Like any other field, the efficiency of a developer varies based on several factors: work culture, management, personal life, skills, and so on. Some we can control, and some we cannot.
In this article, we will discuss how to make oneself better by working on things we control. There are some clichéd tips like Stay Focused, Avoid Distractions and Be in the FLOW.
But we are going to get a bit more technical on increasing the efficiency.
Journey of a Software Developer
The usual stages of a developer are shown below:
Coder -> Programmer -> Architect
Coder
Many people use the words “coder” and “programmer” interchangeably. But, there is a difference between the two. A coder is someone who knows how to write the code or a script. Optimisation and architecture are not their priority. Rather, they focus on writing code that just works.
Programmer
A programmer is a superset of a coder. They know how to write code, but in addition, they also write it with great optimisation and robustness. Secondly, time and memory complexities are kept in mind when writing code.
Architect
As you might have guessed, the architect or the software architect, to be precise, is a superset of a programmer. The architect is responsible for not only a piece of code but also how these pieces fit together.
Coder vs. Programmer vs. Architect: An Example
A great example would be to ask these three people to “Create tic-tac-toe.”
When asking the coders, they will start coding, assuming it's a 3x3 tic-tac-toe with two players. Secondly, they might write nested for loops as a brute force approach to figure out who won the match. There might also be no design patterns in place like MVC, MVVM, or others.
However, the programmer will first understand the requirements completely and then start on the coding part. They will create optimised algorithms for maintaining the state of the players and a scalable way to change the grid dimensions.
The architect will select which technology is best for designing the game. A few other questions come into play: Is it going to be a web-based or mobile app? Will an API be required or just played locally? In addition, they will also decide on which design patterns to implement. Once the architecture is defined, only then will the actual implementation start.
The goal of each developer should be to become a great architect along with having great technical skills.
Here are a few ways to improve your efficiency and skills:
1. Pen and Paper
Many people find it offensive to give a pen and paper coding interview. In my opinion, it is one of the best tools to get clarity. Jot down the things that you want to achieve and how you will achieve them.
In the tic-tac-toe example above, you can write down that there will be models like Player and Board. Secondly, a game engine will be required to calculate the result after each move. Also, write down what each class will contain, e.g., Player will have a name and symbol property.
You get the idea. Figure out your design patterns. What you are trying to achieve in code, achieve it with pen and paper first.
2. Become Your Own Manager
At the start of the day, create a TODO list of your tasks, e.g., you will complete the game engine today, or you will complete the board UI today, etc.
Try to break it down into smaller tasks of 3–4 hours each. Having clear goals for the day keeps you motivated. Secondly, it gives a sense of satisfaction when the tasks are completed; it boosts morale.
Essentially, it’s a variant of the Kanban management style. But, I have found it to be quite effective.
3. Documentation
One of the reasons for taking time to get things right is a lack of knowledge.
Astonishingly, there are many developers who just assume how the system or library works. They spend an enormous amount of time figuring out by themselves how it works without reading the documentation. This leads to a loss in efficiency.
A simple example I personally encountered was writing blogs using the Markdown syntax. I know most of the basic syntax, but I was unaware of some of the advanced ones. I wasted around 5–10 minutes trying to figure it out. If I had gone to the documentation, instead, it would have saved me time.
Here is a Markdown cheat sheet in case you are wondering.
4. Don’t Reinvent the Wheel
If something is already available in the market, with great reliability, use it. Usually speaking the pros will outweigh the cons.
As an example, you should never write your own cryptographic function or library. There are pretty decent libraries available in almost all languages, and they will save you lots of time. More importantly, it will have the correct implementation, and it will be well optimised
But don’t overdo it. You shouldn’t import underscore or lodash just to loop through an array. It only increases your package size and hurts the user experience.
5. Testing
Test-Driven Development (TDD) is another methodology that is going strong. Writing tests is as important as writing code. Though manual testing is required, automated tests provide confidence that your system will not break logically.
Initially, it might feel that you are spending more time writing tests. But as the project grows, it would be worth it. Fewer bugs and more robustness.
Here is an article on how to do TDD in .NET Core.
Conclusion
I, personally, felt a lot of different emotions when following the above tips, but they have improved my efficiency a lot, especially creating a to-do list for the day.
Read more interesting articles: