Software from the Outside In
After working for a few startup companies, I've finally reached the glaringly obvious conclusion that the rest of the world has been screaming in my face for the whole of my life.
The stuff on the inside is not overly important - it's what's on the outside that counts.
Huh? What does the CEO or the sales person or your boss worry about? Basically, what does everyone except for the programmer focus on? How is the customer going to react? They obsess over the finished product. How does it look? Is it exciting? Does it make you want to use it? Buy it? Have you ever watched the guy responsible to the customer worry endlessly over where a graphic is placed? Or worry about some silly feature the customer wants, which probably will never be used anyway.
Most of the world, including the non-technical minded people in your organization and your customers, are looking at the surface area of the software. That is all a person can see when shown just the interface. And this is true for anyone. Even if someone understands software, when he first looks at a new tool, all he knows is the surface until he at least takes some time to think about how it might work. But everyone else is perpetually stuck in this mode of understanding. Only the surface matters. Unfortunately, only the visible product is going to be evaluated. Whether or not you have the capacity to grasp what's underneath is irrelevant. Think about the last house or car you bought. Did you worry about what was under the hood or behind the walls? Or think about something a little closer in cost, like your phone. Did you worry about the quality of the electronics inside?
It's great that the end user and even the boss don't need to worry about the innards of such things. But that allows them to say such things as "Make it look like this. I don't care if you have to throw a dozen cheap programmers at the problem. But it needs to be this way." Thankfully not everyone's boss thinks that way, despite complaints. But good boss or bad, it' hard to make the right decisions when you're obsessed about the outside and have no clue what's on the inside.
Now, how do I think about software? I spend all of my time thinking about things like, is it extensible? Is it easy to debug? How long will it take to develop? Will it work well with other software? Can others understand how it works? Can I make it do something so incredible that the customer didn't even realize that he might want such a feature? Does it make others want to extend it? And when it comes to the interface, my initial reaction is to pretty much blow off the whole thing. "Oh we can just throw some graphics artist at the problem and get it taken care of." Sound familiar? Sometimes it seems no matter how hard I try, my mind wants to understand all the little details of how it operates. And I just don't worry much about what it looks like. Instinct always tells me to worry about what's underneath and do the absolute bare minimum with the outside.
Is there any hope of reconciling these two views? Are they complimentary or opposing? Well I don't know, but if you watch for a while, the coders (or me anyway) always tend to fall back into their vantage point of seeing the software from the inside out and the rest of the world continues to see it from the outside in - both right and both wrong.