When it comes to Software Engineering, simplicity remains the ultimate sophistication. It has become really important that we emphasize the importance of writing really simple Code. I'm not sure if this post will be a rant, or a call to wake you up, but we'll see about that.
What does it even mean for a piece of software to be implemented with simplicity in mind? What is even considered complexity in an implementation? - Well, I'm not exactly talking about time complexity here, nor am I talking about using tools that have the least possible configuration. I'm talking about thinking simple, thinking with the customer in mind, and thinking with an assumption that your future self might not be that smart.
Simplicity is the art of implementing software with the least possible ambiguity. It is thinking in first principles before anything else. It is attempting to take time to think things through before raising that PR with 6 new npm packages. It is avoiding those confusing smart lines of code, and ultimately writing a maintainable, testable piece of software.
Understanding the Problem you are trying to solve is the first, non-negotiable step in this journey. More often than not, I've seen engineers attempt to start implementing a ticket without fully understanding the ask, and how that ask affects their customers, their future self, or even the codebase at large. Furthermore, understanding involves narrowing the scope of the ask. Always start small, as small as possible, and walk your way up.
Writing simple code comes with detachment from the codebase, oftentimes, I have seen engineers attached to their classes, functions, or whatever. It becomes difficult for them to delete code, refactor a method, or even rename a file. If you are one of those people, please understand that your customers don't care.
The art of simplicity encourages you to actively review previous implementations, taking time to refactor them if you have to, increasing the test coverage in your spare time, or even question your thought process a few months ago. Be bold to remove dead code!
This is 2024, and we now have AI companions, I challenge you today to embrace this reality, whenever you are trying to solve a technical problem, refactoring a piece of code, or adding extra logic to an existing class, and you have this inner voice saying I'm making this way more complex than it should be - please take time to ask an AI companion what it would do, ask it to make it simpler, review its options and expose yourself to more possibilities.
Unfortunately, the technologies, tools, and developer experience products that are most popular today sometimes encourage the most frustrating complexities I can think of. Ask questions, and take time to research alternatives to tools whenever you get a vibe that it's looking way more complex than it should be.
Simplicity is not just about not confusing yourself today. It's about not confusing yourself tomorrow too. There is no honor in frustrating the next engineer joining your team, and the excuse of time is not acceptable, thinking is the hard part, and in my opinion, clear concise consistent thinking is what makes a solid engineer. Avoid the trap of taking the easy way out.
I do not want to mention any technology or give any code examples for a good reason. The first step after reading this for anyone interested is to take time to research and review their past work, and the work of others and evaluate how they can simplify it.
Let me be also clear, simplicity does not imply premature refactoring, enforcing DRY everywhere, or always giving the longest variable or method names. No no, I'm more interested in awakening your thought process and how you take time to think about technical problems first before attempting them.
For not-so-experienced engineers, please read a lot more code, that is how you find patterns and gain insights into the minds of other experienced engineers.
I hope that I've left the world simpler than I met it.
Well, sounds more like a rant, but you get the point.
Top comments (0)