Whenever anyone asks what I am working on these days, I have trouble conveying the value that guidance automation and software factories are bringing to our industry - and getting the penny to drop in those who enquire. I find that even seasoned, experienced developers and consultants have trouble grasping the value of this stuff immediately, since it requires looking deeply at how we do things today.
Automation and Guidance and Factories all sounds great, but what's the point after all? "Isn't it just turning us developers into a bunch of simple minded operators and designers who don't have to have any skills to use these toolkits and factories! - it's just like what VB did to C++ developers isn't it?"
The best one-liner I heard this week (21/04) was: "To every complex problem, there is always a simple answer, which is wrong!"
I believe using a real life analogy is the best way to get people to understand the value of this stuff. There are many analogies to chose from that illustrate just how bad we do software today.
[And absolutely no, I dont believe this stuff is going to dumb-down people's intelligence in the same way some rather 'naively' think VB did to C++ developers, since programming languages offer little if any guidance. Its not even remotely a good analogy to start with.]
The classic example they use in these circles is the automobile industry. (Actually this is more of an example of how to do it better rather, than illustrating how bad we do it). I believe this is a popular analogy because most software developers/engineers are male, and males are supposed to know all about cars and stuff, but I think this picture has some shortcomings since most men don't actually know much about how cars are *really* made and what they are made from today. I've never been into cars at all, but I had the pleasure of meeting an Aussie friend in India once who is now building a new sports car for the European sports coupe market and he enlightened me on what modern sports cars like the Audi TT are actually made of, and that still cars of today are constructed from standard parts from cars from many decades ago such as the transmission and axels etc, parts I recall are from cars as far back as the 60-70's! So it may surprise many men to know that their shiny new toy, their prize possession in life, has actual parts on it from cars from a different millennium. My point is the analogy with building cars would be stronger if most men actually knew the real facts about how cars were really made.
Beat does a nice job of using the catering industry as an example in his post on Why Restaurants aren't run by the Software Industry.
My favourite at the moment is using the construction industry example, which I think holds more merit than the automobile example simply for the fact that most people have a fair idea of what it takes to construct a house, the parts, the materials and processes, and what construction cowboys are, (having probably spent many years paying for their mistakes), doing DIY themselves and in most middle age men, having gone through the pain of either buying a second hand house or building a brand new one. Again, I don't profess to being the expert on the construction industry but have had enough experience in this area during my younger years before becoming a geek to know the basis of it (also helps to have good mates that are tradesmen too).
I recently had the chance to tell my story to my good friend CJ. We have been working together some time in development consulting, but Chris is a SharePoint Ranger now and so we don't spend much time on the same stuff anymore. CJ himself often buys houses, does them up and sells them on, so he's pretty familiar with the key players and some of the pitfalls in that industry too.
So, the question is, why do we build software so badly today?, why don't we build software the same way they build houses?
You know, [from the customers point of view], you buy a house, you know what you are getting, its a fixed price, it works, it has all the functional bits a house needs, and if you are lucky and pay a little more money you can get more fancier stuff for it. For the most part, there is little difference between the house I live in and the one you live in, functionaly they pretty much do the same thing. OK, you have a fancy media system or marble spa you paid heaps to get a specialist to fit and you have a couple more rooms, they are layed out differently and you have different colored walls and furniture than me. But the walls around us and ceiling and floors above and beneath us are made from the same materials and constructed using the same practices and building standards. The plugs, doors, windows, flooring, fittings and kitchen appliances are probably the same. The roof does not leak or fall off, and the place is livable (I hope). You make food in the kitchen and sleep in a bedroom. The doors open and close so you can get in and out and lights are wired to you can see in the dark.
This is a far departure from what you get if I and you were to build the same software solution for a customer in isolation from each other. Not to mention that the result the customer gets would be a far from what they wanted.
Well - let me tell you a story and at the end of it perhaps you can tell me what's wrong with the way we build software?
If we were to build houses like we build software today, the story would go something like this with you geing the customer.
So, you just got a raise at work and now after a full decade of working hard every hour of everyday and saving hard, you now have enough money in the bank (along with an oppressive mortgage loan of course) to build yourself and your family a new house. You found a nice patch of land just out of town, and want to make it your home. All you want are the basics with a few thrills to make it feel like your home, perhaps a fountain on the front lawn, a landscaped garden, and a nice long driveway with electric iron gates at the end. But other than that, a nice 2 story house, with 5 rooms, a kitchen, basement and a double garage. You have seen examples of this all over the neighbourhood, and have read all about how affordable this is and the great benefits it can bring you in life. If only you could buy one of these off the shelf!
So, you purchase the piece of land, and start investigating the construction of the house. You got some friends in the industry, and you find out that a decent architect is gonna cost you a couple thousand $$ just to draw up the plans! "Stuff that", you say!, I am a pretty intelligent, educated person, I am sure I can do without wasting my money on that nice-to-have stuff. I'll just do some research and find a simple plan for my house. "I've know mates who have done this before, how hard can it be?"
So you do - it's not that impossible today. After a while you realise that to be successful in this venture you need a good capable builder to help. You have to keep working full time, to support the family once the house is complete, so you can't exactly be on site the whole time, so you need a trusted builder who is capable of doing the job well. You start looking around and eventually one of your work mates recommends a builder they once used to help them build a deck on their sister's house, and they tell you that this guy was the best thing since sliced bread, and you are gonna be real happy with him. So, with that little, but reliable, bit of information at hand, you dutifully hire this builder to be the 'trusted saviour' to build your 'dream home'.
So, you sit down with the builder one day over a coffee and discuss your plans of the house. You show him a basic diagram of your 'dream place' that you created in some word processor package, and you point out all the things that you want on it. Perhaps, you even made a list to ensure you didn't forget anything. The builder smiles and nods his head with your assumptions and tells you that yes of course anything is possible. You also tell him that you want to help out on the weekends and try to save money where you can by doing any tasks to help. You are about to have a baby in only 7 months so you want the 'nest' to be ready for your wife and baby, when it arrives.You finally get to the end of the meeting where you proudly declare to the builder how much money you have to spend on the project. The builder smiles then sighs heavily and tries to explain that he just can't do everything you want for that price - even with you helping on the weekends.
So as a compromise the builder recommends the following: he doesn't have enough specialist experience in creating fountains and iron gates from scratch, (he once did something like that back in trade school) but he doesn't want to risk wasting all his time and money on getting that done. Of course he doesn't say any of this, he just says, well "The fountain and gates aren't that important and they are gonna be well expensive to get done since the electrical cables we need are a special type and are hard to get, I could do it, but you know, I think its more important to put a good the roof on the house and things like that. So, we need to cut that out" He's also no good with a rake, and doesn't have the artistic flare for the landscape gardening, so he spins a similar story to get that cut out of your 'must haves' too. Of course you are not happy with just the plain old house without the fancy trimmings to impress your mates and neighbours, so you try to object and threaten to get someone else in who can do it. Of course it's all in vain, because at the end of the day you just 'know' you can't afford it and you heard he's a real good builder and they are hard to find these days. So, reluctantly you capitulate, and give in to the builder's sensible suggestions.
You shake hands on the deal and the builder tells you he can't start for another month yet, he's busy right now with other work, "Would that be OK?" Again, your pride and hope is taking a beating, but how much worse can it get? "Yes, OK, OK", you say but "I want to start right away in a month - no more delays. I will even hire the excavator for you so that it's waiting for you at the site to start in one month's time - I got a friend with one we can use".
The builder carefully sits you down again and says cautiously, "now look this is not going to work that way, I need to be the one making all the arrangements, I have all the contacts and I can get stuff done cheaper because I know people and where to get the right stuff from. I will sort out the contractors, the materials, machinery etc. I don't want to rush anything - so let me handle it OK? I will keep you up to date on progress".
"Now there just one last thing; the small detail of payment. I will need to be paid upfront so that I can get the permits and buy the materials, tools etc. to get started and I don't want to bother you with money all the time."So, a month goes by and the builder still hasn't started work on the house. You make contact and demand action, and after 3-4 weeks of chasing him up the builder finally shows up to start on the house.
On the first week of the job, he has a gang of several contractors on site measuring up and digging holes in the lawn for the foundations. You are quite impressed with what's happening and feel that he can handle this without you looking over his shoulder. You live about an hour away from the site, so you can't visit everyday. You intended to visit to help every weekend, but things have gotten busier at work, and now you have to spend your weekends working, and visiting family and friends who are all excited about your new baby arriving and stuff. Every now and then you get to drive by the site and take a peek in to see what's happening. You notice that the builder is the only one on site now, and there is mess everywhere. But since you are no construction worker, you assume it all part of the process and carry on.So after 5 months of steady progress, the builder calls you up and asks that you come over and check out the house to see what you think. So, the next free weekend you get, you show up at the site, and are amazed to see that the bare piece of land has transformed into a brick and wooden framed house with attached single garage with a tiled roof on it! Not quite what you wanted, but its looking good for now.
The builder shows you around and you are chuffed with pride that your new home is coming along nicely. He shows you that he personally installed a cool new boat awning at the back of the house, state-of-the-art with electrical, retractable roof and fancy flashing lights and a plasma TV, which also has a motion detector and alarm system. In the house, right now there is no paint on the walls and it's not liveable yet, since there is no plumbing, sanitation and electricity. The basement isn't accessible since they forgot to put in any doors. But on the whole it's looking good at this stage, you are really impressed with the boat awning, and entertain the idea of buying the wife a new boat to fit in there. So over a cup of coffee, the builder and you sit down around a wooden crate to talk progress.
The builder explains that we are now at the stage where we need to call in the 'subbies' (the sub-contractors) to put in the plumbing and electricals and painters to decorate the place. "Normally" he says "we make a bunch of allowances in the foundations and framing of the house to let these guys put in their pipes and cables etc. But here is the thing; these guys are gonna cost an-arm-and-a-leg to get the job done in time and on budget, they are really expensive. So I'll tell you what, why don't you just let me do the plumbing, sanitation, the electrical work, lighting, power etc and I'll put some paint on the walls to and smarten the place up a bit. We have made some special modifications to the house to make all that real easy."
You are not feeling all that comfortable with this decision; can this guy really do all this for us? The builder assures you that they "do this kind of thing all the time", "and besides regular sub-contractors want all these building regulations and standards followed before they will even start work, that's gonna delay things, and we have better ideas about that so we made these special 'allowances' in the structure to get it done quicker". "Look, also, unless we start right away on this stuff, you are never going to move in before your baby is born, as it is now, we probably won't have time to do get the painting completed". "We had better get started right away, but there is one other problem. We need to get some more 'capital' from you since we ran out of the money we started with already a week ago!""What the!" you say in anger! "What do you mean you ran out of money?, there is no more money! I gave it all to you to finish the house, and you still haven't made it liveable yet!!! What the hell have you spent all the money on? "
Swallowing deeply now and looking at you in disbelief like you are the crazy one, the builder turns to you and says, "Well of course, I had to buy a clay kiln, and a new saw mill. I made all the bricks for the house, and I had to cut down the trees and saw up all the wood you see around you. That's not easy work mate, and it has taken a long time and a lot of hard work to get to this point. Count yourself lucky we have a roof over our head (which I haven't yet finished in some parts). You know the clay around here isn't quite the right consistency so we had to buy in a bunch of sand to mix with it. That all takes time you know and I told you at the start it was going to cost more than you were proposing!" "Its not my fault, you know I've been through 5 hammers building this place, my electric saw broke because it could not handle the load, and these new fancy materials on the market today are just too hard to use correctly, I am better off without them". "But don't worry, with a little more money I can fix this place up real nice, make it liveable and hopefully you can move in before your new family arrives".
You can't believe you are sitting here listening to this. You are madly looking around for this guy's hammer to beat him to death with it!! This guys has single handily spent all your hard earned cash on building this house, which is so far from complete its effectively useless. It's not the things you wanted or asked for. He spent all the money on a wizzy new boat thingy you don't even need, and pissing around making the bricks and cutting the wood. He is now suggesting for you to pay him more money to finish what you already paid him to finish. Not only that, but you are going to pay him to dig up the floors and rebuild the walls because he forgot to make conduits for the plumbing and electrical wiring - which he forgot to mention, and will spend ages trying to fix.
I think you are starting to get the picture. I would seriously doubt that you would continue with this project and this builder if this was what you faced in the real world of house building. More like, you'd either dug up the foundations and put him in there, or you'd pursue legal action to ensure he never worked again, and recover your losses.
However, for some sick reason, if this was a software project today, as a customer, you would probably pursue this to the bitter end. Why? Because you are so far committed and so close to a solution that you were desperate for in the first place. You can't back out now, because to do that you would have nothing - nothing at all.
Sure you'd have a non-functional piece of brick and wood on a piece of land that you can't live on anymore. You have to see something working, even if it's not what you commissioned in the first place. You wife would hate to live in the house with no paint and no lighting, and that would force you to seek out another software project to fix all the things wrong with this one. Of course, no sober person is going to attempt to pick up where that builder left off since he never used any building standards, standard materials or practices, and did things his way. You can bet with certainty that the only thing you are faced with is knocking down the house and starting again. And if you let this happen who is to say the same thing doesn't happen again with the next builder? Only this time, the bank isn't going to loan you the same amount of money. What you really need are skilled competent architects, builders and tradesmen but they are now all outside your reduced budget. Either your wife and new kid leave you to it, and you end up living in a caravan in the back yard for the rest of your life, or you fix the house up yourself over time, whilst the wife and kids stay at the in-laws.
If you read this story carefully over again, you can see in most of the points almost a one-to-one correlation with issues in building software today. From the planning and through the execution of the project. Sure, software projects don't all go this way, but I think you will admit, none ever get to completion without any or most of these issues coming to play.
The question is, why do we put up with this nonsense in software today, and are we going to put up with this nonsense tomorrow?