There’s an alarming large disconnect between what our industry preaches as ideals, and what it actually produces. Ultimately, I believe this stems from developers wanting or needing to just get shit done. Working code is seemingly good enough, and anything more is an unknown. So we carry on.
I haven’t been quite so lucky. My first project finally shut down last month after being in production for about ten years. My second project still requires the occasional support request, also ten years later. Since those initial projects, I’ve worked on hundreds of projects of various sizes, some failing, and some slipping past deadlines endlessly.
It’s a tough job. There is an infinite number of things to know, and you have to balance all of them against your unique constraints. When we seek help, the resources offer shallow solutions. Tutorials aim to get you started, frameworks aim to accelerate, but nobody can paint you a full picture. We navigate an impossible maze of decision making balancing doing things academically correct, doing things quickly, and actually solving the business problems we were brought on to solve.
Unfortunately, what has happened is that we tend to favor publishing and reading content that shows us how to get shit done. Anything more is silly, and perhaps is reserved for the book authors and consultants who have clearly lost touch with reality and want to take advantage of us. For those who do accept some of these ideals, we cannot always practice them.
- Accurately model problem domain
- Separate responsibilities, exposing clean interfaces
- Layer applications with clear boundaries
- Unit test every line of code or every logic branch
- Business tests for every use case or interaction
- Version every change cohesively and articulately
- Support multiple communication channels (HTTP, CLI, etc.)
- Communicate over those channels in various formats (JSON, XML, etc.)
- Minimize cost of utilization (battery, memory, disk, bandwidth, etc.)
- Support interaction in different locales
- Protect users and their data from harm
- Be simple enough to allow adoption and educate users
- (searching things programmers should know should yield millions more)
- The vast majority of developers do not write tests.
- The vast majority of developers lean on frameworks for design guidance.
- Building applications from the inside out and testing the logic that matters first.
- Many of the above ideals only come up when they become problematic.
- Interacting with RESTful web services that promote discoverability. No popular frameworks or clients that I’ve seen can do this.
- Not relying on poorly designed ORMs when persistence isn’t a concern yet, nor is SQL a problem until much later on.
Let’s start asking how we can do things better, rather than how we can do things faster. For 2014, my goal is to dive deeper into these topics, and to try and be more mindful of what I produce. Every snippet, article or piece of code I publish will be focused on raising awareness, rather than a cheap trick to save a buck.
These things can’t be afterthoughts.