The world runs on bad software
The world runs on bad software. There are billions of lines of poorly structured, overly verbose, untested code. But, a lot of people are doing amazing things and making insane amounts of money from bad software.
As someone who might call himself a “software architect” or “craftsman”, this is difficult reality for me to accept. If I had my way, I would refactor every piece of code I worked on as soon as it started to smell.
But there is a cost to writing good software. It takes time to write automated tests, refactor code, and do things right. You may miss opportunities to get your software in front of real people, get essential feedback, or even launch at all.
Code doesn’t have to be perfect, it has to be adequate. It has to perform a few functions well enough in most situations. Bad software that ships is better than good software that nobody uses.
I often need to be reminded of this.
Update: I gave a talk on this topic. Here are the slides.
42 Comments
I prefer to ship good software (and I do, regularly).
I laughed and sighed, agreed and cried, all at the same time. I wish I had written this.
You are so right
And yet there is so much inadequate code out there making some people rich and others ripping out their hair!
That’s why software community has to work hard to improve a still immature field like “software development”
Writing software that works is a formidable task for our poor mortal brains. From my daily experience, the software we ship is just working in the tiny portion of the state space we ever explored by testing. The rest is bugdom.
True, but a logical tautology. It is so true and so universal as to not need saying. Every product I own is adequate, nothing more. Every one has the potential to fail under conditions that have not yet been encountered either by the product’s developers or by me. How do we exhaustively test non-trivial software? With testing software, of course. How do we test non-trivial testing software? With … oops.
So don’t feel bad. Some of us try harder than others, but none of us ever fully succeed. It’s usually the ones who try hardest that are most keenly aware their failures. Wear that awareness as a badge of honor, not as an albatross.
Perfection is just adequacy that hasn’t hit the right testing condition.
Nothing is perfect. Nothing ever will be perfect. Speaking as someone that sold his first program in 1979 and has made a decent living at it ever since, it is a business, not an art or a science. Providing the people you work for with the best possible applications in the best possible timeframe AT A REASONABLE COST TO THEM, is the real requirement. Perfection is just braggadocio or mental masturbation…
I come up with imperfect solutions for an imperfect world. (If the world was perfect we could make perfect solutions… or not need solutions at all… as it is, the best we can hope for is to model our imperfect world.)
i think that the problem, in most cases, is a management problem. I been working as a developer for a few years now, and the day to day basis consists of me producing code all the time. Other activities such as requirement gathering and software design are left behind.
All that matters is getting a product done, from the management point of view. Don’t get me wrong, I think that the ultimate goal is delivering good products to the clients.
The point is that in order to achieve that we most focus on requirements and designing, more than coding.
Software best practices should gives us that “adequate” software. And I mean only adequate because change happens, and the only thing we can do is make our software as flexible and robust as posible to endure and adapt to this change.
But until management don’t see this, we’ll be building a house without the blueprints.
Bad software can also destroy your business if the point of failure happens to be somewhere highly visible. Given that it’s BAD SOFTWARE, you can’t control where that failure point will be. If you take into account all the costs, including the potential cost of a high-profile failure, good software design HAS to come out ahead, by definition. If it wasn’t truly a better path, it wouldn’t be ‘good design’.
perfect code is great, shipped code makes money
Well, I work with a 10 year old 1.1 .NET application. It is creepy and terrible. But it’s owner make millions with it.
Of course good pratices are good. They are good for us. For the people that get the real money from software, it almos alwayst doesnt matter. If it is working, it’s ok.
I agree i agree. I wish consumers would be far more discerning. Unfortunately they are so grateful merely to have some new functionality that they put up with poor apps including those with lousy UI. In the physical world there is the concept of ergonomics, however except for one company I don’t know anybody who applies the same principles to software.
I am writing this on an android – it is terrible – i cant easily review what i have written, and various other silly problems.
Note also that in critical life-or-death apps things are much better.
Right know the IT industry does not know how to make good software economically and predictably – a lot depends on heroes.
I’ve heard once that “the excellent is the worst enemy of the good” and totally agree with it, but saying that bad is better it’s too much. For me, bad software that ships is not better than anything.
I would change for “AVERAGE software that ships is better than EXCELLENT software that nobody uses”.
Being not only a programmer but also a repair technician, I use a lot of software that wasn’t developed by me – just like my clients do – and my frustration and stress levels get really high with software that doesn’t behave.
The worst thing is when I have to explain to a client that there’s nothing wrong with their hardware, there’s not a single trace of a virus in the machine(s), that i’ve just reformated the darn thing and it’s fresh as new but it’s the software ( that they may have spent a lot to buy ) that’s bad.
It’s easy to say something of this kind when you don’t have to use the software on a daily basis, hours per day. It’s not incosiderate it’s bad for your reputation ( and your future ) either. Unless you dominate the market and have no significant competition, like a certain mr. Gates…
Yeah, the quality of the code the runs the business world is pretty frightening really. Especially when you consider how much we programmers get paid to create these messes. At the end of the day though, I think ‘good code’ is code that works, i.e. does the job it was designed to do. From a management perspective hopefully on time and under budget and from a user/business point of view software empowers them in some way. The quality of the code doesn’t really matter. Except to the next poor slob who has to maintain the code! But he’ll work something out. That’s why he’s paid the big bucks!
I agree !!
Excellent observation.
This is reality.
This is the first I’ve ever read on this site, but damn, that’s inspiring. Subscribed.
I often feel this way when I see a poor UI, and now that I think about it, I understand now why I feel so good when I dot every “i” (so to speak) in my own code. It just feels higher grade.
Great post – finding balance in everything :)
Writing software that works is a formidable task for our poor mortal brains. From my daily experience, the software we ship is just working in the tiny portion of the state space we ever explored by testing. The rest is bugdom.
I couldn’t agree more. I often look around my home and think about just how surprising it is that none of my electronics have exploded. At the company where I work now the secret to avoiding spontaneous combustion lies in our rock-star test team. We write mediocre (at best) software, but the test team catches most of our bugs. So we’re forced to fix them with more mediocre software. Eventually the test cases pass and we’re ready to release. I believe that to escape this cycle you need to have engineers that are unrelentingly passionate about craftsmanship and feel secure enough to deny managers access to good-enough software for the sake of meeting an overly aggressive schedule.
One can post alternative arguments and offer up different points of view but I think you are right. I see it in my work place. Most, if not all, of the software used at my place of employment are RAM HOGS. There is no such thing as enough RAM when it comes to bloated software. One such software used by Corporate were bringing the servers to their knees. It doesn’t take much to make it bail out and error out unexpectedly. Oh what tangled code we weave…
Writing software that works is a formidable task for our poor mortal brains. From my daily experience, the software we ship is just working in the tiny portion of the state space we ever explored by testing. The rest is bugdom.
You are right, but there can be future cost. Bad software is much more expensive to maintain than good software. If you make software that won’t change any more, it is only important that it works and peaople use it. If there will be changes in future it is wise to spent more time in improving the quality of your software. Especially if someone else will make the chabges!
You are right, but there can be future cost. Bad software is much more expensive to maintain than good software. If you make software that won’t change any more, it is only important that it works and peaople use it. If there will be changes in future it is wise to spent more time in improving the quality of your software. Especially if someone else will make the chabges!
The price of writing bad software and maintaining it has not driven enough companies out of business yet. The day it does will be the day they will strive for better written software. The other question to ask is how many of us (I mean programmer, software engineers or whatever we call ourselves) pay the extra $, or € to buy good quality products instead of the cheap Chinese-like less quality products? I think many. The companies using software and no different.
Correction:
1. How many of us…? I think few.
2. The companies using software are no different.
What happened to my Unit Tests?
Quite right, look at Bill Gates a perfect example of decades of money-making on bad software. I guess the point is, if one proliferates bad software everywhere with a different packaging, they would have achieved their purpose. You make people need your stuff no matter how imperfect but as long as its adequate, more than half of the users wouldn’t even give 2 pence worth of thought to it.
Well, everyone wishes a good coding,but this is impossible,so we have to bear the reality.
I think you can write good code economically and I think the key is to get used too writing reusesble code and to build up a libray that you can reuse. Over time your libraries can be tweaked as you fix issues creating good code. I think it down to your approach to the craft you work in. If you try to start from scratch each time, you will be stuck in this vicious circle of perfection over cost.
A thought about software that gets shipped,
If you think the company is shipping good software, then you either didn’t test it enough … or you’re the project manager !!
As long as it works who cares. What’s sad is this post!!
How do you know there are billions of lines of untested code the world runs on? I know there a lot of unproven statements, and i think this is one of them.
buffer overflow maintenance java/C++/perl legacy reverse “engineering”
It doesn’t inspire confidence in our industry, working with the latest compiler that crashes twice a day and an OS that needs patching several times a week…
This brings to mind the song by the Mighty Mighty Bosstones, “Never Had to Knock on Wood”, especially the lines
I’m not a coward, I’ve just never been tested I’d like to think that if I was I would pass Look at the tested and think there but for the grace go I might be a coward I’m afraid of what I might find out
Which could apply to code too .. has my code (and the code I use) really been tested?
how do u expect a developer to deliver good quality s/w when client s not willing to pay apropriate money to make it fully secure
Every user of technology should be required to read “Dreaming In Code” by Scott Rosenberg. As an software developer of 30 years, the quality of code that is delivered today is horrendous. I take pride in the fact that several users of an order entry / inventory control system I wrote was still in use 15 years after the first installation. The only reason they stopped using it was our decision not to upgrade the application for the year 2K issue.
The only perfect program is a Hello World program, every program more complex is not perfect any more.
I started to respond to this a while back, but it turned out longer than I expected, so I posted it as a blog post: http://mutuallyhuman.com/blog/2011/06/24/in-response-to-the-world-runs-on-bad-software
Post a Comment