Although I am very much not a software developer, I am familiar with the ideas of code patches and workarounds that just get things done. Of course these shortcuts are inevitable as time, resources and complexity force developers to do what they need to do to hit deadlines and ship, with the idea they they will go back and sort things out in interim releases. Too often, however, they don’t go back and fix the system. Some software remains full of these workarounds and jerry-rigs, so much so that they come to define it. Over time the system itself becomes a patchwork of shortcuts and temporary fixes and therefore demands more costly space, processing and back-end service. The ability to connect with other programs, hardware and functionality becomes constrained and difficult. Developers then begin to see their job as “working the workarounds” rather than spending their valuable time creating more customer-centric features and other innovations that sit on top of properly built code. Naturally this becomes cultural and over time you have policies and systems that form around these workarounds, further reinforcing them. Then, attracting talented developers will be tough as they will sniff out quickly what their opportunity (or lack thereof) will be. Customers soon catch on as well, thus completing the cycle. The challenge for any developer (or manager) is to step back and look at what you are spending your time and effort working on. Are you working the workarounds or are you working the system?