As a software engineer, you're here to solve real problems. Not to write code.
Code is often a useful tool to solve problems, because a lot of things are incredibly tedious to do and easy to automate, or do faster, more accurately and/or reliably with code.
But it can also be the wrong tool to reach for. Often adding code is the most expensive tool to reach for. It’s expensive to write, and then an even more expensive liability to test, and maintain.
Or it may be only part of the solution, after you better understand the problem.
Maybe reach for something else...
If you’ve got a one off task that you’ve never done before, and will likely never do again, that will only take you 15 minutes, it’s probably best to just do that manually.
Or if you’re trying to solve the problem of ensuring a user fills out a form properly, maybe stop and think about if you’ve already got this data, and can sidestep the problem entirely by pulling the data over from another system.
Finally, creating a process that automates the maintenance of your bespoke database may be less useful than work migrating to an off the shelf open source solution that would also meet your needs.
Understand the problem
Writing code before you understand the problem is asking to either:
- Cause yourself or your team a lot of pain as you attempt to extend code based around a problem that you didn’t understand
- Volunteering to have a bunch of your hard work thrown away, whether you’d like to or not because it solves the wrong problem.
If you start writing code before you understand the problem you will likely end up automating something that shouldn't be automated, or writing code for something that shouldn't be solved with code.
If you can solve the problem by suggesting a different upstream process that's actually easier to implement, that’s a superior solution, and I want to hear that. Code is a tool to extend abilities and act as a force multiplier. But any number multiplied by zero is still zero.
But it doesn’t feel as good
I know you want to immediately reach for the code because it feels good. It’s comforting. Familiar. It feels satisfying to create, and more tangible than solving the problem without it.
But resist the need for that dopamine hit. Figure out how to solve the problem in the simplest way possible first. Then, and only then, write the code, and only if it’s necessary.
A problem isn't solved when you intellectually solve it. It's solved when it's in the hands of users actually solving their problem.
It's code complete!
Doesn't matter if it isn't deployed.
Let's solve some problems.