Home > Musings, Personal, Software > The World is Messy and Complex: Why Should Software Be Different?

The World is Messy and Complex: Why Should Software Be Different?

July 27th, 2008

Politics, religion, famine, pollution, and relationships; these are parts of our world. I'm messy, my hair falls out, and yours might too. The world is messy and complex, so what would make software different?

During my first real job after graduating College / University, I was horrified by the state of my project's source code. The code was spaghetti; it looked like someone crammed a stack of poorly written technical manuals through a blender that funneled into our source code. Regions (#region) were running willy-nilly, negated values were passing conditions; delegates were calling properties which were in turn calling delegates which were creating infinite loops… SQL rows were being sent across TCP/IP, centralized build servers were taboo, unit testing and TDD was unheard of. Each of the members of our team were build / release masters, developers, and ninjas.  Our job was to maintain this juggernaut and affirm the stakeholders that everything was OK.

But were things really that bad? Remember, I was a recent grad; I was used to creating pristine frameworks (like elevator simulators) crammed with design patterns and fascinating abstract data types. In a way, I was an architecture astronaut being rudely ejected into a toxic tailings pond. The courses I had taken in school, the projects I completed, the languages I used were a great start, but not a valid representation of the real world. In the academic world things were clean; out here (like the rest of the planet) everything is a mess.

I started coming to the realization that, producing software is more about managing people than science, technology, or math. Mistakes and human flaws are the norm, software entropy is inevitable, and technical decisions are often based on nontechnical considerations: time constraints, politics, religion, and relationships rather than sound research and science.

There is hope; realize that you can't control everything, that the one-size-fits-all solution and silver bullets are myths. Then focus on what and how you can change yourself, your software, and your situation. Developing good software (like living a good life) is about making informed decisions, choosing opportunities that encourage growth, reducing complexity, and having a long term vision or goal. Today I still think software is messy, and I'm still horrified by most source code, but abstractions, n-tiered design and testing sufficiently help me manage the chaos.

Science often exists in a pristine clean vacuum, whereas software deals primarily with people. Software is not a science, and humans (like software) are inherently messy and complex.

Author: Adam Kahtava Categories: Musings, Personal, Software Tags:
  1. No comments yet.
  1. No trackbacks yet.