Seven Habits of Highly Effective Software Developers
Seven Habits of Highly Effective Software Engineers
Steven Covey’s The Seven Habits of Highly Successful People was first published in 1989. I think one of the greatest demonstrations of successful writing is that it withstands the test of time, and Covey’s book certainly has.
The format of listing habits that make various sects of people highly effective has taken over the blogosphere. While this might be a redundant post to some, software engineers are very diverse. I have about 4 years experience now and much of my development has been personal projects or working as a full stack developer for a small company. My opinions in this post will be different from a CS graduate with 12 years experience all at an enterprise company so for those who are interested, I wanted to share what my experience has led me to believe are the seven habits that create highly effective software engineers.
I hope that this will help any aspiring engineers working to land their first gig, as well as the veterans.
1. Take Care of Your Health
Several of these habits should apply to anyone regardless of job title. It shouldn’t be a surprise for someone who has grown old enough to land a software development job and disciplined enough to have learned to code that they need 7-9 hours of sleep each night.
It also shouldn’t be a surprise that drinking energy drinks all day is horrible for your heart and might be the reason you aren’t getting half of the recommended sleep.
Eat well, exercise, and get enough sleep. That is pretty simple. That covers physical health and has a huge impact on mental well-being.
I’m no doctor. But I see overweight software engineers that are tired and chugging caffeine constantly. Take care of your health, and your mental clarity and ability to think will improve.
I didn’t play sports as a kid or start to do any exercise until I was about 18 years old. I had a role model who saw me running one day when I was just starting to try it out and he said “A healthy body is a healthy mind.”
Those words stuck with me to this day, so take them to heart. You need both to code at your best. And brush your teeth.
2. Take Care of Your Finances
One of the biggest stressors in anyone’s lives is finances. The average software engineer salary is over $90,000. There is a huge range there depending on locality, experience, and tooling, but even those living on the bottom of that distribution should not be struggling financially. I know software engineers that live paycheck to paycheck. I know there are life circumstances where this can be for legitimate reasons, but many I know have their student loans paid off, no medical debt … but they have all of the latest tech gadgets and great cars so they are struggling.
Pay off your non-mortgage debt, drive a vehicle that is at most less than half your income, and simply live within your means. I’m no financial advisor but I think Dave Ramesy’s book The Total Money Makeover is a great place to look for advice.
If you are living in your means, you should also be investing. This can be by saving for a downpayment on a house, or regularly investing in the stock market by buying low cost ETFs, stocks, mutual funds, or anything else.
To diversify further, I use Fundrise. These are publicly non-traded real estate investments that do not correlate with the stock market, so when the stock market is down, Fundrise may not be.
(I am not a member of Fundrise's affiliate program. I included them here because I did my research and stand by their product. I get no commission from you joining Fundrise).
Do your due diligence when it comes to your investing, but software engineers often don’t need to be stressed about money and I see too many who needlessly are because of bad habits.
3. Have an Opinion
Software development is full of decision making and unknowns. It’s a pretty interesting dichotomy, so you need to be informed and have opinions.
If you were going to build a web app that has tons of dependencies and long running processes, do you think cloud functions are the best architecture for this? Sure, serverless architecture is cool, fun, and interesting… but would this be the best application for it? Or if your team is building a new project and wants to use modern web frameworks while previous projects were all begun in jQuery 5 years ago, which framework would you choose and why?
Many fields require that each person stays current in their latest field of data. You wouldn’t want to go to a doctor who hasn’t read a medical study in the last 12 years or decided to stop renewing his or her board certifications. A software engineer should stay current on the latest technologies in their area, learn these technologies, know when to use them and more importantly when NOT to use them, and have a researched opinion on them.
4. Work on Side Projects
This one actually is more specific to devs. Like I previously mentioned, there is a ton to learn. It doesn't end once you receive your college degree or bootcamp certificate, it just begins. Technology is constantly changing.
I have learned a ton by building side projects and this has paid dividends for me in my freelance career and current position with InventoryLab.
Side projects are exciting. You can’t always use the tooling you want or build what you want at your day job, so explore a new framework or use an entirely new stack and build something that interests you.
I have a post about possible side project ideas here.
5. Have a hobby
Software development is difficult, time consuming, and draining. I’ve mentioned a ton in this post already that a dev has to constantly be learning and building. This shouldn’t be all that you do. I get excited about projects and spend a ton of time on them, but I make sure to spend time elsewhere too.
I think it’s important to have a hobby. I enjoy running, skiing, hiking, or anything that I can do outside with my dogs. I read a ton, keep this blog, and have plenty of hobbies.
If you can spend time with your family and friends doing other things that you enjoy outside of coding you will be less likely to burnout. It’s easy to burnout while coding, and that is no bueno.
I write about an experience I had with burnout here. I learned a lot from this experience and take breaks and vacations doing things that I enjoy when I feel some of these symptoms creeping in.
6. Be Curious
Good devs are curious. I want to try new tools and build things. I want to take some code, throw in some more code, and see if I fixed a bug or could create a new feature. Don't be afraid to try something out or scared of debugging. “Move Fast and Break Things” was the moto developers at Facebook used.
One thing that I believe makes a good developer is that devs should google things they don’t know or understand.
I google everything that comes to mind. I want to know what the best dog seat belt is for my nervous 1.5 year old vizsla who can't sit still in a car, I google it. My girlfriend had one tire on her car constantly loosing air...why was that happening... google!
I was a teaching assistant at Boise Codeworks, a coding bootcamp in Idaho, early in my career. I had a student that was struggling and the teacher asked him what he does to figure out the solutions to what he is struggling on. The student didn’t even know how to answer the question. Google it, bro.
I think a good developer would say they google it, search stack overflow, look at github issues… search around for a solution. Be curious and seek out good information.
7. Share what you know
If you are a good developer and follow the habits in this post, then you are going to learn a lot of useful things and become proficient. It only makes sense that a kind and ethical person of your wisdom should share that knowledge.
I recommend that you keep a blog, podcast, or youtube channel. It can help with marketing your name and message, but most importantly it helps others find solutions to the problems that you have faced and solved.
Also, if you acquired this knowledge in the first place then you probably love to learn. I believe the best way to learn is to teach, and that’s what keeping a blog, podcast, or youtube channel allows you to do.