I'd like to tell a story. When I became a woodworker, I was lucky enough to be able to obtain many of the tools necessary for a functional workshop. My wife graciously left me to my own devices within a section of the basement for doing my woodworking. I was very happy for a while, but I also found that I would really only enjoy working for a little while before I got tired of constantly searching for the tool I had just set down, or tripping over dust collection hoses. So most of my projects took/take quite a while.
I'm not even going to tell you how many times I've bumped into that pole. So last week, my wife suggested I just expand into more of the basement, we aren't using it for anything else. So we spent about a week rearranging things, organizing them based on flow(see, this *is* about software development). This led to a new, somewhat more usable layout.
Ok, now that I'm done showing off, what is this story all about? Well, last night I started working on the kitchen cabinet doors that have been taking me forever. I had a great time. I didn't trip over anything, I didn't make anywhere near as many mistakes, and I was able to make great progress in less time.
And that is the true reason I'm telling this story. Software development is the same way. We need to keep our environment clean and organized. This takes on several dimensions in our world. Architecture should be well ordered, not overly complex, and with a focus on flow. Not just the software architecture either. The infrastructure too. I've worked with teams where software would only run on certain machines, and only if deployed a certain way. The amount of time spent babysitting those infrastructures could have been spent making new things.
The more obvious example of course is our actual code. It is easy to just keep adding new things(especially if we are practicing Clipboard Oriented Programming) without cleaning up our designs and code. Now, in my workshop I ended up redoing the whole thing, but with software we can do it a little bit at a time. As a side note, having an nice clean environment makes you want to keep it that way, so you put a little extra effort into your refactoring.
At the end of the day, having a clean, well organized space, whether it be the architecture, the infrastructure, or the code, makes for a more fulfilling experience. And when you are enjoying your work, you do better work.