CUPID – the back story
I spent some time in Web Apps between video game jobs. I got into some tense conversations where I, as manager, recommended against the abstraction layers the Senior Developer was trying to explain to the team on a whiteboard.<p>He said something like &quot;Why do all the game developers write code like that?&quot;.<p>He handed me Uncle Bob&#x27;s Clean Architecture. Uncle Bob is something of a meme to me. I read the book and couldn&#x27;t figure out how to explain how I thought this style was inferior to what I had done in games before.<p>Ive been thinking about that ever since it happened. How could I explain to this guy my programming philosophy?<p>Last night, back in games, after refactoring the same piece of layout code for several hours, I finally arrived at the irreducible, simple, clean result that I wanted. I slotted it into our code base, and mentally noted how I would onboard the team to it on Monday, and how they would instantly understand because the resultant code is so simple. Then it came to me:<p>&quot;Unit Tests are like pouring concrete on your code base.&quot;<p>Same goes for using &quot;the wrong abstraction&quot;. Sometimes you want concrete to encase your precious technology. The problem is when people are writing sub par code, then they pour all this concrete on it via Unit Tests, Inheritance and Abstraction Patterns. It can become harder to improve the core logic of the system if it&#x27;s distributed across many files, and enshrined in Unit Tests.<p>I&#x27;ve dedicated over 10 years to coding, and only now do I think I can write clean code that is worth encasing in concrete. I think there might be a general flaw in the idea that everyone should be writing tests. I&#x27;m not certain about this, it&#x27;s just my general intuition based on my experience.<p>They are pros and cons to every design decision. I acknowledge that they are many pros to these kinds of designs, I&#x27;m just enumerating some cons that have arisen from my experience.