As a developer, as soon as you touch the keyboard, you start making decisions, a lot of them, and often very quickly. Each of these decisions carries weight to them and will impact future decisions. If you’re a developer with a constant stream of work coming your way, it can be easy to ignore them and just keep going. However, if you don’t consider the impact of these decisions, you may find yourself in a bad situation that you never intended. Surely you didn’t mean to do this to yourself but all too often I’ve found that the road to hell is paved with good intentions.
It’s so much fun to write code. Building that new exciting feature that’s going to completely change your product offering. Implementing a new algorithm that will reduce your infrastructure costs by half. Refactoring bug-laden functionality with a brand-new language. These are some of the reasons that draw me to software development. It’s exciting, challenging, and so damn rewarding. However, there are repercussions to our actions, and the most common victim is future you. Today you are excited, ambitious, and ready to tackle anything. Future you will be cursing today for a stupid decision you made, the edge case you didn’t account for, or the shortcut you took because you ran out of time.
Be kind to future you, you’re going to meet them soon, much sooner than you realize. While it can be exhilarating to jump right in and bring my ideas to life I try to think for the long run. How does this work fit into the broader picture? Does it match my testing strategy? What if my approach breaks? Do I have the right information to debug it? Is there a contingency plan if none of this works?
I also like to consider my work from the outside. Think about how another developer would use this if it was a third-party library. How could they misunderstand the documentation or make an assumption that was different than yours? Put yourself in their shoes. Consider how someone without your knowledge would come to a different, and entirely valid, conclusion.
Plan for the future and others when building software. That doesn’t mean you have to account for every situation in the first iteration but try to keep your options open. Don’t assume that everyone who looks at your creation will immediately understand it. Be kind to those who follow you, including yourself.