10 things that make you a good software engineer
Good software engineering habits
During the last 5 years, I had a chance to work as a software engineer in a start-up and corporates, lately at Google and Amazon. During my experience, I have discovered 10 useful things which I tried to follow as a software engineer, and which I have improved over years.
This sounds like common sense, however, I always keep them as a note for myself, and today I would like to share them with you.
Don’t chase two rabbits at the same time.
When I started learning programming years ago, I was so gung ho about coding, I used to poke my nose into every technology possible including Android, iOS, backend service engineering, game development, and a bit of robotics. One year passed, I was less than average and I was able to learn only basics on each area of specialties, and I hardly was able to build something useful. The lesson I have learned is that it is much easier and faster to choose one of these domains and become an expert in one specific domain. Once you grasp a really good understanding of a particular domain, it is much easier to explore other domains as time passes. It is economically beneficial as well.
I do not remember where exactly I have heard this term. What it actually means that it is possible that anyone may start a good career with a lot of motivation in a well-paid job in a decent company. However, over time it is likely that anyone may start feeling more comfortable in their comfort zone and start feeling that they are better than anyone and good at everything. And they think they do not need to improve their skills and knowledge, eventually losing touch with their existing skills. I have learned that nothing is permanent including your company, your boss, or your manager. It is always good to improve yourself consistently, gaining new skills, brushing up your fundamental CS knowledge, solving more complex problems, and doing competitive programming unless you own your own company.
Always giving premature estimates
In the very early stage of my career, I used to give premature estimates for the tasks without any precise estimation and plan, just to make managers and supervisors happy. However, most of the time, it used to lead to the point that I would miss deadlines, making everyone on the team unhappy. Over time I have learned my lessons and I promise to myself to
- Spend more than enough time on planning and identify the blockers in advance
- Always keep buffer for the unexpected
- Provide more time than my original expectation. Because it does not hurt anyone if I finish my tasks before the deadline but it blows up if I can't finish on time, destroying the team's plan and expectation.
Learn from your mistakes
There is a famous quote from Stephen Covey
The proactive approach to a mistake is to acknowledge it instantly, correct and learn from it.
It is important to learn from mistakes in the software engineering career. Doing a mistake is fine but making the same mistake again is not fine. It is the reason why some engineers never get a raise or promotion in their job.
Good communication is key to get things done, especially when more than a person/team is involved in the project. Communicate your problems, obstacles and blocks to the supervisors in good time, and communicate with your team members, or engineers from other teams, and try to learn from them as much as possible. Every engineer is unique and each one has their own skills you can learn. To grow in any company, you need to be recognized by colleagues in your team and in your company. At least, the majority of people should be able to recognize you. So communicate.
Be a good team player
Help other engineers in your team. As soon as you see something not working, even though you did not work on it directly, take ownership and try to fix it. Be a good contributor to team success, not just to your own success. This way, you gain your team members respect and trust. Be a mentor for entry-level / newly joined engineers.
Be confident, try to work on complex project and tasks. Go for a new promotion if one comes up. Never underestimate your strength and experience. Always push yourself up.
Always test, test and test
Always test your software constantly, do unit/UI or manual tests for every single piece of code by achieving good test coverage. Be curious about the edge cases. Do not be lazy.
Chasing new shiny technologies
It is better to have solid and good experience in a few technologies than having minimum experience in hundreds of those technologies. When I see people’s resume with hundreds of frameworks and libraries listed and used within 2- 3 year’s experience, I always think about what kinds of project they use all of these frameworks.
Do not be a coding monkey
Do not just sit and wait for someone to give you a task to code. Participate in team/company’s planning, do research to solve complex problems in your company and speak up and make your voice and opinion heard.
The list goes on, these are the ones I always keep to remind me. I hope it will help, at least for beginners who are starting a career in coding.