April 21, 2005
Software as Prosthesis
Sometimes I think the software world went horribly wrong at some point.
There is so much written on hackers, the hacker ethic, the joy of programming, the love of computing, the joy of creativity, etc. Much of this writing is accompanied by lamentations of how most professional software development isn't like that.
The cause is generally attributed to suits, to process, to history, to life itself or to some combination of the above. I have a different theory: I blame it on the early adopters of computers.
Not the early early adopters (i.e. the military) I mean the early adopters in the business world. Back in those days computing was very expensive. To purchase a room-sized computer with less processing power (if a lot more storage and reliability) than a 386, and still make a profit meant that you had to eliminate a *lot* of cost somewhere else in your organization. Back in those days (as today) that meant labor. Which meant people... which meant jobs.
So, computer programs were intended less for helping people do their jobs as to replace them. Sure, someone would be using the computer to do that, but the main emphasis was replacement, not augmentation.
This was fundamentally different than how the military used computers. To cite just two examples:
At Bletchly Park, Alan Turing and the other mathematicians didn't simply chant incantations at a magic box -- they understood the mathematics and could theoretically (if not practically) perform the exact same calculations as Colossus. The result was to greatly enhance their ability to break codes.
WWII submarines used analog computers to assist the crews in setting the gyroscopes on torpedoes. The TDC Mark III used in American submarines also calculated the target's position. This data was compared to calculations made by the crew, to reduce error. The result greatly augmented the crew's already existing ability to target their weapons.
The difference is that the military wasn't directly concerned with cost, but with results.
Working on my little anagram calculator the other day, I was struck by how different the process and the results were from the type of software I have generally written professionally. Initially I attributed this to the fact that I was writing it for myself and not someone else, but the more I think about it, the more I come to believe that isn't it.
The difference is the use I put the software to. True, I didn't write that software so that someone else could play the anagram game, but more importantly, I didn't write it to replace my playing of the game, but to augment it. I was still a key piece of the solution. I knew what words needed to be in the dictionary, I knew the speed requirements, I even had to sync the two programs by typing the game's information into the calculator. I haven't tried it, but I am willing to bet that if I had it simply list the words, and *I* type in the ones the were likely to be correct (thus eliminating the largest remaining the bottleneck, the false positives), we'd do even better. A further tweak might be for me to identify the words to send and have the program type. And so on. The point being, the goal is to augment, not replace.
Contrast this with your typical enterprise CRUD application (let's say a Customer Service application). Its designers (and gold donors) are often much less concerned with user augmentation as they are with user reduction. For these people Cost/Benefit analysis means "Do more with fewer people" instead of "Make our people able to do it better." If they can reduce the number of people in the service center, then the project is a success. The goal is to replace not to augment.
The difference is subtle, but I think that this is at the heart of those systems that succeed: They do so because they allow the users to do what they would do anyway better. That's faster, more easily, more accurately, or all of the above. This doesn't necessarily mean fewer people, and so this doesn't necessarily make the project a success from the cost standpoint. However, the ironic part is that the only way to build software that could reduce headcount is to build something that truly augments the workers. It is this dichotomy that is at the heart of why Customer focus is important to build software that works -- and why its so hard to achieve in most environments.
Why do I blame the early adopters? Because the technology required strong central control (because of cost and difficulty of use), which led to specialization. Programmers wrote software for others to use. In those domains (e.g. Engineering) where the users learned to program enough to augment their own jobs, this happened less (although the software quality is deemed terrible by people who list programmer as their job title).
Its still visible today. The largest organizations have (stereotyping alert) the least technically savvy users, the least interesting programming jobs, and the most spectacular software failures. Enterprises (e.g. Trading) where the software development is tightly integrated into the workflow of the business often have people who are at least semi-competent programmers doing the work of the business.
That computing is cheap now, that programming languages (and the knowledge on how to use them) are more accessible than ever before, is dwarfed by the inertia of how things used to be.
It can be different. What if every user learned a high-level language like Ruby, was instructed in how to write simple scripts to augment their jobs, and focused on solving the problem of their job instead of on using software? What if each group of 5 - 10 customer service reps included a couple of programmers to pair with them while they worked? What if we truly democratized computing? What would happen to big IT? Would it even exist? Its not that farfetched -- the use (and abuse) of Excel as a user programming environment attests to that. Imagine if the users had a tool that was actually easy to program well instead?
I don't know the answers, but I like to imagine the results. Someday maybe somebody will try it.
Until then, hackers everywhere will continue to write software to supplement their natural abilities, get a thrill of creativity and power as they do things they couldn't do before writing their little script, and leave everyone else scratching their head as to why these guys think computers are anything but a necessary evil in their lives.
And to all those out there trying to figure out how to save money with computers? Well, you're half right. Labor is still your biggest cost. The difference now is that the labor cost is in the IT department. I say, don't offshore your software IT department, eliminate it. Take all that money you spend training your users to act like monkeys using someone else's software and teach them how to solve their own problems. Integrate good programmers into your people's lives and create human/computer symbiotic systems that solve business problems.
If nothing else, its a solution guaranteed to piss off everyone.
Posted by wcaputo at April 21, 2005 08:33 AMI like this idea of breaking the IT department, specially for software development activities.
Moreover, this kind of "organic" organization naturally improves business/process innovation, because the users become (back) actors of their own tools.
In my humble experience, I often notice that developers are hostile to this idea. For a long time, large companies/organization have deeply separated activities by profiles : functionnal, technical, project management, etc. and created more and more groups of 'corporate drones', unable to work together.
I am sure that business companies now need a new class of software developers, masterizing and involving in every perspectives of developing business software (closely with the users) : domain - software architecture & programming - user story-driven project management and communication.
So, the fist step is to break this drone mind!
Posted by: Julien Cabot at April 23, 2005 12:14 PMI do not think there is any mystical property of a computer system, or rather the intent behind the creation of a computer system, which leads to that system being a success or not.
Just because a system is designed to augment a human being does not guarantee that it will work, nor if a system is designed to replace a human being will it definitely fail.
I think, therefore, that you are focussing on the wrong axis. I think the correct axis to focus on is complexity: Have the business, proverbally, tried to bite off more than they can chew ?
I think the business needs to separate out its intent from the implementation of that intent and recognise that they should apply an incremental roll out regardless of whether they want to replace people or augment them.
If a business is providing a commodity service and seeks only to increase its execution productivity then cutting costs will be its major concern and thus replacing people will be a valid aim.
If however a business is seeking to grow the service it provides then it will need the creativity people provide and replacing them would be invalid.
I do think that businesses often make narrow sighted choices, they choose to commoditize today because it will make them money but with a bit more foresight and courage they could branch into other markets and make more money.
Using an incremental rollout not only would be a safer approach but it will enable the business to defer the decision to replace the people, after all a project designed to replace people can often be thought of as a final step of a project designed to augment people. It provides a business with more options or rather the option to defer the closing of one approach, and thus also gives a business a better chance of correctly deciding when to replace or augment people.
Posted by: Stacy at April 25, 2005 10:10 AMMore power to the business, and where appropriate more power to the users.
Posted by: Stacy at April 25, 2005 10:20 AMThank you for the feedback Stacey.
I don't think we need be a slave to the xor: there are many more than this axis to judge success upon -- but, I can't talk about them all in one post. :-)
However, I do wonder sometimes if complexity is a cause of failure, or an effect -- as the people creating the solution also create the complexity of that solution (i.e. different people with more skill may have found a simpler solution) so I'm not sure that it is the main axis of failure either. Perhaps there is no single axis of failure -- just as there is no single definition of failure of a SD project.
I want to add that I don't really disagree with anything you said, but I wish to clarify something:
You said:
>If a business is providing a commodity service
>and seeks only to increase its execution
>productivity then cutting costs will be its
>major concern and thus replacing people will be
>a valid aim.
If you reread my post, I never said reducing head count wasn't a valid aim. I implied two things instead, which I will now make explicit:
1) that the most effective way to reduce headcount is to focus on increasing the capability of your people (i.e. augment). Yes, this makes reduction a second order effect of your efforts, but I think its the most effective way to get the best efficiencies.
2) That these days, the biggest bloat in headcount is in the IT department. I think this has historical roots in the big iron computing approaches, and that we are facing an economic situation (cheap hardware, and cheap languages) where reduction (via augmentation?) of IT headcount could be the biggest cost saving opportunity for CIO's and the businesses they liaise with.
Posted by: Bill at April 29, 2005 11:35 AMBad Links (January 19, 2006)
Visual Studio Team System Jumpstart (January 18, 2006)
Aligining Value (January 17, 2006)
Lisp Again (January 16, 2006)
Getting It Right (January 13, 2006)
Efficiency vs Productivity (January 12, 2006)
Stubbornness (January 10, 2006)
Writing To Annoy Yourself (January 9, 2006)
Due Process In The Workplace (January 5, 2006)
(All Entries...)