I started reading a new book (at least to me) that looks promising “The Design of Design” by Frederick Brooks, the guy who came up with “The mythical man month.” On first glance, I’m very pleased to see that this book reinforces many things I’ve come to believe are somewhat self evident. To design something, you have to be able to visualize things a bit differently, and its complete folly to think that you can know everything from the onset (or for that matter, ever).
This may apply to anything that falls into the world of knowledge work for which there are end products (a subset of things people do that is primarily an intellectual pursuit. There are certainly other examples of this kind of work, architecture, the arts, music composition, creative design. Things that people do to conceive of and create an end product that wasn’t clearly defined when they started.
Perhaps software can be developed like it’s a car being assembled on a production line similar to the ones Henry Ford conceived for the Model-T? There’s a school of thought that software is something that can be created using a very linear, methodical process. Understand your requirements, sift through the options to fulfill the requirements, identifying the path that best balances a bunch of alternative approaches, decompose the aspects of that path, divvy up the work amongst a bunch of contributors, have the contributors do the work, have the contributors test their work, pull the pieces together, test the integrated pieces, fix the integrated pieces, test again, write a bunch of documentation, and ship/deploy/whatever you will with the end product. You could do this with pretty unimaginative folks, not a lot of room for mistakes, right? (probably also not a whole lot of room for great things either).
Neat and clean, right? Not often, actually, pretty rarely. Requirements are frequently misunderstood, they change, what may have seemed like the best alternatives may have really been laden with disappointment. Besides that, what fun is it to work in a mode like this? Kind of seems like the first part of the Wizard of Oz. You remember right? The part where everything’s in black and white. Or what was that other movie where it shifted into a color world once the main characters discovered other enticements, much to the dismay of the town fathers (no mothers, mind you)…
I think that the best designs and design processes are a bit messier than this. Have you ever had an opportunity to review some of the process that the great artists have followed. It’s not uncommon for them to have sketch upon sketch, rework designs, and so forth. Thankfully, the software process can lend itself to that, while allowing a place for the rigor needed to ensure that whatever concoction the team cooks up, it can be reasonably proven to work in a way that satisfies its constituency. Users should be able to review and reflect on incremental work products, and have that feedback incorporated into a sustainable product.
I can recall being around folks who had a knack for pulling together sustainable designs. In almost all cases, they could express their designs in a visual sense, much as I’d imagine an artist conceiving of their creations. abstract concepts, that largely ended up manifest in a series of mundane statements come together in a framework more easily understood as collections of objects knitted together in cleanly defined inheritance, containment, relational, and interaction hierarchies. When assembled, these artifacts lend themselves to assemblies that directly address user requirements.
My answer to the question is that the answer is “yes, a bit of both” Keeps things interesting.