I'm approaching 8 years as a professional software developer. I've written a lot of code, worked on a few teams and helped build a team from 4 developers to ~60. Now, more than ever, I find myself thinking about what it means to be a good software developer. Not good as in "good is the enemy of great", but good as in "I want to work with this person again". I think there are three characteristics that make someone good in this industry.
Curiosity is important because it fuels the drive to learn more, try new things, tinker and fail.
Humility is necessary to internalize feedback, keep trying after failure and learn from others.
Discipline, I've found, is both more subtle and more important than the other characteristics. It tells me how an individual will react under pressure, how they'll perform repetitive tasks, how they'll commit their code and run their builds. Here's a non-exhaustive list of the ways discipline manifests itself on real software development teams.
A disciplined software developer will:
- Make small, intentional commits
- Write code with tests
- Run the tests before committing
- Ensure passing builds after committing
- Understand their VCS tool and use it well
- Understand the team's release process
- Write tested scripts to perform one-off maintenance
- Ask for feedback (via pairing, PRs, etc.) on their code
- Know team conventions and know when to break them
The list could go on and on. It may not be obvious that all these things are related to discipline, but when I see a developer doing these things on a daily basis it builds trust and respect. I would work with that person again.
I met a friend in college that started his own awning cleaning business in high school. He still runs it today and it's extremely successful. I was talking with him one day and found myself confused as to why one awning cleaning business would succeed where others failed. How do you differentiate yourself? When I asked him this question, his response was both simple and insightful. "We show up on time and do the job we said we would do." That's it.
We can be successful in many facets of life following those same rules. Notice that nothing in the list above says "genius coder", "knows algorithms", "cranks out solutions quickly" or anything of the sort. Most of being a good software developer involves showing up on time and doing your job well. It's the little things that count.
We are what we repeatedly do. Excellence, then, is not an act, but a habit.