Let's add a whole bunch of simplicity
Simplicity is something that seems pretty uncontroversial. Everyone wants their code, their writing and their products to be simple, elegant, and easy to use, and almost no one argues explicitly that we should make things more complicated or difficult. That’s why we live in a world where everything is perfectly designed, there’s no such thing as code debt and it all just works, right? Hah…
Of course, that’s not how code, or the world works. Things tend to get more complicated and tangled over time. And sometimes this is ok - it’s as easy to fail because you took too long getting your code perfect, as it is to fail because of hacky code. Successful projects are usually somewhere around “slightly embarrassed” with their code - neither proud, nor disgusted or terrified.
But we talk about things like simplicity or even tech debt in the same terms as we talk about features - as something to add or increase. Of course, the opposite is true, and it’s hard - you can’t?add?simplicity to something, you can only remove complexity.
How do we do that? A good place to start, both with products and code, is with the cognitive model. The best place to start is to ask, “what is the job we are trying to do”? Getting that as tightly defined as possible, and as narrowly as possible, is a pre-requisite. And you’re not really done until you can start talking about the things you *won’t* be doing - just like a strategy, it’s not helpful if it doesn’t tell you what not to do.
领英推荐
Once you have what feels like the cleanest, tightest story you can tell, the next step is to look for the atoms - the smallest pieces of behavior or data that you need to be able to do that job. Nouns (data model) are a good place to start, followed by verbs (actions, functions, affordances) on those nouns. Finally, constraints are useful too - being able to say “X can never do Y”. Looking at how the actions and constraints fit together will give you a good sense of whether you’re on the right track - if you find that you have to do a lot of contortions to get all of the functionality to work, it’s a good signal that you haven’t gotten down to the right set of atoms, or that you are trying to do too much overall.
Simplicity isn’t something that can be actively “added”, but it is possible to work on it and improve both code and products in a deliberate way - but it does take discipline. At the end of the process above, you will?absolutely?find that your reasoning implies that you throw away a piece of code or a feature that you like. That’s the moment that’s the hardest - when the design tells you that simplicity is in the direction of losing something that you don’t need but want anyway.
Making things easier to use and understand is a different, and distinct process from building in the first place - a process of stepping back, asking questions, and finding the fundamentals of what you’re trying to get done, and then ultimately doing the hard work of removing everything else.
Software Engineer | Bar Raiser at Amazon
2 年This reminds me of the quote, “Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away.” Source : https://www.goodreads.com/quotes/19905-perfection-is-achieved-not-when-there-is-nothing-more-to
Sales and Marketing Director at AmeriTex Pipe & Products
2 年This is Great! I’m in a completely different industry (building materials for heavy construction), but the theme is right on point across virtually every area of business. Thanks.