On the Future of Software Development #3 – Feel the heat!

Ok, so now that any “attitude” is out of our way (see my previous posting for details), we can start to look at what is the real challenge for programmers today.

Perception 2: Software Development is changing at a much higher rate than 20 years ago

What makes a trade, an industry? It´s of course the products which it produces. Bakers produce bread, waiters produce a “dining experience”, directors produce movies, programmers produce software.

 

But to produce a quality product, skills, knowledge, tools, materials need to be of high quality. (Let´s leave methods and processes aside for the moment.) A master of his trade needs to have the rights tools and materials, be able to use them on a high level (skill), and be aquaintant with their capabilities/limitations (knowledge). Sounds like common sense, right? I´d say so.

 

Now, does our trade lack quality tools? No, I´d say, there are a lot of quality tools. A whole lot.

Or does it lack quality materials? No, there a lot of quality materials. A whole lot.

 

What I mean by tools and materials

For a carpenter a hammer is a tool and wood is his primary material. But what are tools and materials for software developers? I find it convenient to distinguish between the two like this:

-Tools are the things to use to work with materials. You use tools to “shape” materials or test materials.

-Materials are the things the products are build out of. When the tools are gone, there is only material shaped for the job.

 

So what are the tools of our trade? Programming languages and compilers are our primary tools. An IDE is another ever more important tool. NUnit is a tool too. Or FxCop. Or CodeSmith. We use those tools to either work on our materials or check the quality of our work.

 

The materials on the other hand are the many APIs (not the data flowing through a program, as you might have thought). ADO.NET, System.Net, GDI+, MSMQ, SQL Server Notification Services, ASP.NET, SQLXML, LCE, QC, Win32 API etc. are all materials you “bend into shape” to form a solution – through which then flows information like through a system of pipes.

 

When you´re finished, there is no compiler in your product, no FxCop, no NUnit etc,. Your customer just gets materials bent or tied together by your code. The tools are gone.

 

 

But what about skills and knowledge? Does our trade lack quality in this regard? Yes, I think so! And I think this is an inevitable outcome given how we view our trade. So I don´t really blame todays software developers – but if they don´t see the writing on the wall and don´t change, there will be no happy end for many of them.

 

We are like a frog sitting in a pot of water. If you heat up the water slowly, the frog won´t realize it and gets boiled alive. (But if you put a frog into hot water, it jumps out immediately.)

 

Like the frog we are in a system that was good to live in 20 years ago. But since then it has changed – but so slowly we are not conscious of that change. Maybe we just feel some diffuse pain and can´t lay our finger on it.

 

So what is the change in our system? Where´s the heat? The heat is in the faster and faster movement of our tools and materials. And in addition to that, the products we are requested to manufacture become more and more complex – with the tools lagging behind in their abstraction of this complexity.

 

20 years ago a master programmer´s toolchest just contained a couple of tools: a formal language or two, a very simple IDE (or just a text editor like vi), a debugger, … what else? Ok, on Unix systems there were those lovely command line tools like sed, awk etc. Great! But still a pretty small number all in all. Also, there was a strong agreement on what was the “canon” of tools you should now. This was fine, because programming was still an “art” and programmers where the universal heroes for solving any software problem.

 

What about the materials 20 years ago? Hm… there was the C library. You needed some API for character based UI, a data access API (what was your favorite ISAM library?), maybe some printing API? What else?

 

Or your world was even smaller: you just used Cobol or a 4GL like Zim or Amber.

 

Let´s face it, your choice of tools and materials was pretty small.

 

However today, there is no limit to the number of tools available. Even the number of tool categories is expanding all the time! 10 years ago there were no Application Servers. 5 years ago there were no Business Process Management Servers. So how do you keep up with the acronym (and code name) avalanche coming down upon you? What´s LCE? What´s QC? What´s STA? What´s MOM? What´s SOA? (I know, that´s an easy one ;-) What´s SOAP? What´s XQuery? What´s BEPL? What´s VSTO? What´s ORM? What´s MARS? What´s XAML? What´s GPL? What´s IRS? (Upps, wrong trade ;-)

 

Ok, I guess you got it. And I even left out the non-acronym technologies and code names. And I left out the many “instanciations” of concepts/technologies. There is not one data grid control, but many. There is not one installer tool, but many. All with subtle (or not so subtle) differences. And ever changing. A next release is always upcoming.

 

The rate of change and well as the breath of changes as well as the complexity of technologies has increased so much in the past 20 years (and especially in the past 10 years), that we cannot possibly think, we can cope with it without changing ourselves.

 

To make it even clearer: We still work around 40-60 hours a week like 20 years ago. And this is not gonna change much in the future ;-) But within the same amount of time, we now need to keep track of maybe 5 to 10 times as many tools and materials plus the increased complexity of the technologies and our products.

 

Is that possible if it was a specialist´s, a hero´s job 10 or 20 years ago? No!

 

Now, you might argue, the tools are so much more productive nowadays. To do a Windows UI with C took a long time, to do it with VB1 was a snap. Sure, of course some tasks have become easier through improved tools. Garbage collection is a godsend! And ServicedComponents are much easier to host in COM+ than ATL/VB6 COM-Objects. But my feeling is, the productivity advancements do not compensate for the overall rate of change. They just mitigate it a bit. Or new developments even add to it: Earlier I had a crude printing API to use for all my printing tasks. Today I can choose between several reporting engines, XSLT-FO, and PDF.

 

To come back to quality products as the goal of a trade: I think, we are at a turning point in our industry. Given our in general unchanged attitude of 20 years ago (“Once a programmer you can produce any piece of software!”) we will be less and less able to produce good quality. Because what quality needs is not just quality tools – which we certainly have (see list above) -, but skill and knowledge.

 

Skill and knowledge require time. Time to acquire knowledge, how tools work, what the capabilities and constraints of materials are, and time to hone your skills by actually using tools and materials.

 

Unless you actually build up experience in using tools/materials, you cannot wield/process them like a master, and you cannot even choose the best tool/material for a given task. Just reading an article or two about LCE does not (!) make you a master. Just seeing a presentation of Notification Services does not make you a master. But only a master can decide for a project, which technology to use, which not to use, and how to use the chosen one.

 

How should a host of “general purpose developers” (GPD ;-) using mainly general purpose programming languages (GPL) be able to master that many more tools/materials to produce even higher quality software? (I hope we agree, that software quality in general is not really good – at least not for version 1.)

 

The answer: Not – at – all! It is impossible!

 

So what should we do? Well, that´s the topic of my next installment.

 

[See here for an overview of all postings of the series on the future of software development.]

 

4 Comments

  • We need an entrance exam like lawyers and doctors to filter out the meek. Would be nice to command a similar $300/hr. rate :)



    The certification stuff out there just seems like money making fluff to me.



    We also need more tech saavy people in management. Often times, those who end up becoming programmers/developers are those that despise management type positions. Yet it takes people who have been "in the trenches" to truly understand what it takes to create a successful (on time with most of spec'd features) software project.

  • @Charlses: I agree with you and will tackle education in another posting.

  • It seems, as if too less people in our branch realized, that we live in a world of division of labour. And that's what we'll be faced with in the near future: more specialized jobs. To some degree, it's reality today: While others are working at their projects, people like you and me are evaluating new "materials" and "tools" and speak about that at conferences or in journals. That doesn't make us or "gurus" or otherwise better developers, it is simply the fact, that different people spend their time doing different things.



    I think, developers not using possibilities like conferences and journals to hone their skills will have problems soon.



    At ADC team we noticed, that the difference between well skilled and average developers has been getting bigger and bigger over the years.



    But how to manage that "Divison of Labour" thing? I think, the most important topic is exactly, what you "left aside for the moment": methods and processes.



    We need developers and--not less important--a management with an understanding of the process which leads from the requirement to the product. And we need a more systematic development approach.



    Mirko

  • @Mirko: I agree with you, Mirko. Education of developers as well as management has to go hand in hand. And the process of software development needs to change, too. Less production depth per developer/shop will change the process in any case. And with that will come new methods to deal with virtual teams. There are a lot of implications when you go down the road of specialization. And I´ll cover some of them in future blog postings.

Comments have been disabled for this content.