I have been employed in the software development biz for 15 years. I used to really like what I did. Now I am not so sure I like what I see in our industry. I see vendors plying their wares with cheesy marketing campaigns like Microsofts Dinosaur ads
or Oracles Fusion middleware that is hot pluggable
(what marketecture). I am not sure why others arent disappointed by this or maybe I am so nave that this is just the way it works in our industry.
When I first started, I was the eager programmer stayed up all hours to ply my craft. It was fun and I have no regrets. I was fortunate enough to move from C, which I really did not get, to Smalltalk, which I did get. Since then, I have had opportunity to use many programming languages and frameworks. 15 years later, I see them as all the same still low level tools, not much beyond assembly language in some respects. We still laboriously toil over cryptic lines of a foreign language to get it understood by the machine (i.e. compiled) and in the end some human being is going to interact with the code you wrote and hopefully it fulfills whatever function it was supposed to do.
Amidst this is the whole world of quality, metrics, process improvement, Agile, CMMI, ISO, Scrum, Extreme Programming, etc. To me, its all the same, most of it just common sense. It still boils down to functional decomposition from Knuths Truths written many years ago. Make the problem small enough for the humans to understand and have reasonable expectations on planning a solution for the problem. I used to work for a division in Kodak (CMM Level 2) and division in Motorola, where we were a CMM Level 5 shop. My disillusionment of the whole process improvement world was born at these companies, who were not really interested in quality from a product perspective, but more from a marketing perspective, so they could get a sticker that says they have a quality process. Bureaucracy was what it really was.
Over 15 years ago, I came from the electronics engineering world where most of what we did in that industry was fairly predictable and repeatable. I thought when I joined the software world, it was more or less the same. After 5 years in the industry I came to the conclusion that the software world is not even close to being predictable or repeatable. In 1994, I read the Standish companies CHAOS Report
, which confirmed to me that our software development track record is absolutely abysmal. The latest report
says we have improved, but still our record states that for any given project it is still a crap shoot if the project succeeds or not. As a closet perfectionist, this does not sit well with me.
After I got out of the quality game, I dived deeper into programming and buried myself with projects for a number of years. Some were successful and others failed miserably. None of them failed for any technical reason or staff skills, even though staff variability in productivity can vary 20 to 1 according to industry gurus. My experience meter suggests programmer variability is much higher than that. Programmer productivity aside, I was still seeing the truth in the CHAOS report, every project was a crap shoot. How to increase the odds for success?
I know, I will start my own company and I can control everything, muh, ha, ha, ha. So I did, I formed my own company called 5by5Software with another like minded programming buddy and for the first couple of years, we were successful in turning a profit in our little pro services world. As I have written elsewhere, I am extremely fortunate to have worked with several brilliant programmers. It amazes me to have people that can listen to a conversation and go away and within a short period of time, there is the solution, and with a little refactoring, solid as a rock. Yet, with other people, where the specs have been written in infinite detail, only to be looked at with glassy eyes.
In our company, we did so many projects of a particular type that we saw a repeatable pattern and a business opportunity to become a products company, in which we did, called Bridgewerx
. After 4 years being President, I resigned cause I was dissapointed by the direction the company was taking from a business perspective. Of course when you require investment, other people get involved and the original vision gets diluted along with your shares. I am proud of what we invented because it does raise the level of abstraction
of a particular problem domain. That part feels good. However, now what?
I could go to work for Microsoft, yet when I read Mini-Microsofts blog
Yeah, start another company thats it. My objective is to build tools that help raise the level of abstraction in our industry, which in my opinion, we are sorely missing. Where are the tools for a Business Analyst to model or draw business processes? And I aint talking Visio. Domain Specific Languages (DSL) look like a good candidate to start building tools from. You can read an excellent DSL article
by industry guru Martin Fowler.
DSLs to me are what is exciting and perhaps the next generation of programming tools for our industry. I am not talking about a new programming language or a framework, I am talking about a fundamentally different way to design and construct software. Rather than build solutions, build tools that build the solutions in an automated way. This is what I mean by software industrialization.
It is also the way of other industrialized industries that have matured from one-off, hand-crafted solutions to more of a product line engineering approach. "I don't think the craftsman will be replaced, but the tools he uses will be provided by companies who provide (or are) software factories." This quote comes from Steve Cook's blog
and I happen to agree with it. Just like the drafting table was replaced by a CAD machine doesn't mean one loses his or her's craft, right?