There is more to software engineering than code
Three most important non-development activities for developers
February 03, 2018This post is for all the coders on their way to becoming developers.
Too often I see coders jumping right into the code and spending their whole days just implementing function after function. I was one of them. This could be an optimal strategy in the world when customers would pay directly for the lines of code written. In real-life, a business makes money on value added to their customer. Therefore, what really counts is the global impact your team has on the business.
Following advice is following principles I learned from many books and years of working with various businesses.
1. Dive deep into the business domain
If there is any secret to becoming a mythical 10x developer, this is it. An efficient programmer who can be a responsible partner to a business side of an organisation is worth his/her weight in gold. You will be able to propose solutions that drive the business forward. You will adjust your priorities according to business goals thus avoiding wasting time on activities that do not add value.
I found that the simplest way to learn the domain is to ask a ton of questions and clarify everything, especially initially. Write everything down, create mind maps if necessary. Do not start working on any feature unless you are sure that it makes sense to you. Rephrase everything in with your own words and clarify.
Another technique I found useful is looking for money in everything that business wants. In the end, every feature of a commercial application should either make the company some money or reduce the risk of losing some. Often I found that some abstract user stories like "As a user, I want a lookup a list of transactions from the previous year so that I could prepare a report"are just an exercise in wordsmithing. Impact Mapping is one of the techniques to find out how development activities influence business goals.Read Lean Startup for examples on how much effort can go directly into waste if you do not understand problem that you are solving.
2. Peer review everything
It is unbelievable how much peer review improves software development process. Time and time again I am amazed by the improvements suggested by my colleague developers to my code when I ask for a review. Sometimes it is just an improvement to a name of the variable or missing test case. But usually, they are more important issues like pointing out the cost the dependency or recalling a use case that I didn't know I need to handle.
However, it is not just about code. Every tangible and intangible item can and should be peer review. If you thought about a design for a new component, explain it to someone, ask for feedback. When you are about to update some dependency to a newer version, tell someone about it, discuss potential implications, note risks and benefits. If you have the first version of a new screen or report that business requested, make a screenshot with some comments, sent it by email and ask for early feedback.
Of course, you need to be on both sides. Review whatever colleagues are asking you to.
3. Take responsibility for your health
This one is as simple as it gets. If you are sick, your back or your head hurts, it is highly unlikely that you will produce the best results you can. Proper diet, regular exercises and proper sleeping habits should be a foundation for all your professional development.After that, you need an ergonomic chair and most probably standing desk.
You can find an excellent overview of the topic in "The Healthy Programmer" book.