I always find myself sitting down to read <i>Out of the Tar Pit</i>[0] at least a couple times per year. It has been—and continues to be—one of the most seminal texts in my career. I still remember the first time I read the following passage on complexity, and how it just turned on all the mental light bulbs:<p>>> Essential Complexity is inherent in, and the essence of, the <i>problem</i> (as seen by the <i>users</i>).<p>>> Accidental Complexity is all the rest — complexity with which the development team would not have to deal in the ideal world (e.g. complexity arising from performance issues and from suboptimal language and infrastructure).<p>>> Note that the definition of <i>essential</i> is deliberately more strict than common usage. Specifically when we use the term <i>essential</i> we will mean strictly essential <i>to the users’ problem</i> (as opposed to — perhaps — essential <i>to some specific, implemented, system</i>, or even — essential <i>to software in general</i>).<p>The best skill I've learned, and continued to practice and improve, is the ability to strip how we talk about problems we want to solve with software down to what's truly <i>essential to the problem</i>. Making a habit of doing so helps clarify the contours of the problem itself, and improves discussions around solving because the boundaries of what's truly essential become clear—and then everyone involved knows that every choice we make from that point is additional, accidental complexity <i>we are adding to the problem ourselves</i>.<p>Far too often I have seen even greenfield software quickly ratchet up the overall complexity because the people making choices don't take the time to really isolate <i>the problem</i> from <i>the software</i>—but instead frame the problem within the context of languages, frameworks, architecture, infrastructure, and so on, and then just start slinging code at the problem.<p>If you haven't yet read <i>Into the Tar Pit</i>, it truly changed the way I look at and think about software and problem complexity. You may find value in it, as well.<p>[0]: <a href="https://curtclifton.net/papers/MoseleyMarks06a.pdf" rel="nofollow">https://curtclifton.net/papers/MoseleyMarks06a.pdf</a>