Software doesn't work. I'm shocked at how often we put up with it. Here's just a few issues - literally off the top of my head - that I personally dealt with last week.

My iPhone 4s has 3 gigs of "OTHER" taking up space, according to iTunes. No one has any idea what other is and all the suggestions are to reset it completely or "delete and re-add your mail accounts." Seems like a problem to me when I have only 16 total gigs on the device!

The Windows Indexing Service on my desktop has been running for 3 straight days. The answer? Delete and rebuild the index. That only took a day.

I have 4 and sometimes 5 Contacts for every one Actual Human on my iPhone. I've linked them all, but duplicates still show up.

My iMessage has one guy who chats me and the message will show up in any one of three guys with the same name. Whenever he chats me I have to back out and see which "him" it is coming from.

I don't think Microsoft Outlook has ever "shut down cleanly."

The iCloud Photo stream is supposed to show the last 1000 pictures across all my iOS devices. Mine shows 734. Dunno why. The answer? Uninstall, reinstall, stop, start, restart.

Where's that email I sent you? Likely stuck in my Outlook Outbox.

Gmail is almost as slow as Outlook now. Word is I should check for rogue apps with access to my Gmail via OAuth. There are none.

UPDATE: Yes, I know how OAuth works, I've implemented versions of the spec. A Gmail engineer suggested that perhaps other authenticated clients (GMVault, Boomerang, or IMAP clients, etc) were getting in line and forcing synchronous access to my Gmail account. Gabriel Weinberg has blogged about Gmail slowness as well.

I use Microsoft Lync (corporate chat) on my Desktops, two laptops, iPhone and iPad as well as in a VM or two. A few days back two of the Lync instances got into a virtual fight and started a loop where they'd log each other in and out declaring "you are logged into Lync from too many places." So basically, "Doctor, it hurts when I do this." "Don't do that."

Final Cut Pro crashes when you scroll too fast while saving.

My Calendar in Windows 8 is nothing but birthdays. Hundreds of useless duplicate birthdays of people I don't know.

iPhoto is utterly unusable with more than a few thousand photos.

Don't even get me started about iTunes.

And Skype. Everything about the Skype UI. Especially resizing columns in Skype on a Mac.

Google Chrome after version 19 or so changed the way it registers itself on Windows as the default browser and broke a half dozen apps (like Visual Studio) who look for specific registry keys that every other browser writes.

I should get an Xbox achievement for every time I press "Clear" in the iPhone notification window.

I've got two Microsoft Word documents that I wrote in Word that I can no longer open in Word as Word says "Those aren't Word documents."

Three of my favorite websites lock up IE9 regularly. Two lock up Chrome. I never remember which is which.

AdBlock stopped my Gmail for working for three days with JavaScript errors until I figured it out and added an exclusion.

All of this happened with a single week of actual work. There are likely a hundred more issues like this. Truly, it's death by a thousand paper cuts.

I work for Microsoft, have my personal life in Google, use Apple devices to access it and it all sucks.

Alone or in a crowd, no one cares.

Here's the worst part, I didn't spend any time on the phone with anyone about these issues. I didn't file bugs, send support tickets or email teams. Instead, I just Googled around and saw one of two possible scenarios for each issue.

No one has ever seen this issue. You're alone and no one cares.

Everyone has seen this issue. No one from the company believes everyone. You're with a crowd and no one cares.

Sadly, both of these scenarios ended in one feeling. Software doesn't work and no one cares.

How do we fix it?

Here we are in 2012 in a world of open standards on an open network, with angle brackets and curly braces flying at gigabit speeds and it's all a mess. Everyone sucks, equally and completely.

Is this a speed problem? Are we feeling we have to develop too fast and loose?

Is it a quality issue? Have we forgotten the art and science of Software QA?

Is it a people problem? Are folks just not passionate about their software enough to fix it?

UPDATE: It is a communication problem? Is it easy for users to report errors and annoyances?

I think it's all of the above. We need to care and we need the collective will to fix it. What do you think?

P.S. If you think I'm just whining, let me just say this. I'm am complaining not because it sucks, but because I KNOW we can do better.

Related Posts in this Three Part series on Software Quality

Sponsor: Thanks to DevExpress for sponsoring this week's feed. Multi-channel experiences made easy: Discover DXTREME. Delight your users with apps designed expressly for their device. DXTREME, multi-channel tools build stunning apps across devices & optimize for the best of each platform, from Win8 to the iPhone. And, the powerful HTML5, CSS and JavaScript tools in DXTREME also build interactive web apps.

About Scott

Scott Hanselman is a former professor, former Chief Architect in finance, now speaker, consultant, father, diabetic, and Microsoft employee. He is a failed stand-up comic, a cornrower, and a book author.

Where a twiddle bit is the difference between a robust app and a system crash, where testing coverage has to enumerate every possible scenario, and where digital means no graceful degredation, we get our current software ecosystem.

I blame a combination of non-technical management types driving development, along with rampant incompetence in the IT industry. I'm yet to work within a single workplace which didn't have blatant problems with efficiency and direction due to various combinations of apathy & incompetence. Because of the intellectual void between technical and non-technical folk, it seems that there are too many people working as IT professionals who clearly shouldn't be, but they are rarely caught out due to the 'black art' mentality amongst traditional business management hierarchies, who seem to be falling over themselves to look past blatant incompetence in IT which would never be tolerated in better understood industries.

Regarding your first problem: iPhone "Other" space hogs; have you checked the Usage in Settings->General ?The report that pops up there will show the size of an app with it's added "documents & data", this might be the source of your huge "Otherness". As an example: I have a reddit reader called Alien blue that weighs in at 24.8Mb, however it is using an extra 97.6 Mb for what I can only assume are caches and downloaded images. I've seen the twitter app on an iPhone take over more than 400 Mb which is just plain nuts.Some apps like flipboard have a way of clearing the cache. Others you have to delete and reinstall to get your space back.

Hope this helps alleviate *one* of your problems. Me? I'm stuck on this one: https://discussions.apple.com/thread/3398548?start=60&tstart=0 and I see no light at the end of the tunnel.

Monday, 17 September 2012 05:08:25 UTC

I feel your pain, Scott. It works better when you use only one vendor (only MS, only Google, only Apple) and do only predicted by them scenarios. I think Microsoft integrates with Microsoft better than others. But you are on your own when you're trying to combine this entire Zoo. But I think you're doing better than others, so keep posting and sharing experience.

Andrey

Monday, 17 September 2012 05:09:55 UTC

I believe the issue is too many things to deal with. There are so many devices, OSes and other software that you keep losing track of which code fixes what and testing across all combinations is a nightmare. We talk about standards but not all implementers implement it equally. It's like law. Always open for interpretations and crooks take advantage of it while common man suffers.

It's all about scale. You can only QA so many cases in a lab. Once it hits the real world the Millions of users (of each of the services/devices/apps you mentioned will find crazy interactions that make everything fubar.

Now it's all about triage and mitigation while still finding a way to plan new features for the next release. I got tired of all my Facebook friends showing up in my Windows Phone calendar (with alerts mind you) and found how to turn it off (somewhere in your Windows Live account settings) but still haven't bothered to do so when I upgraded to the Lumia 900 (30 days to the day before MSFT announced it won't support Windows Phone 8).

It's not that no one cares...it's about whom does this edge case affect? .5% of our users? Maybe that's worth looking at. Workaround in place? fuhgetaboutit.

It makes the open source model a little more attractive no? Got an itch, here's a back scratcher put it to use.

Many large enterprises have so much division of labor in the process of software development. The people that decide what should be delivered by R&D base it on revenue prospects...and fixing old features doesn't drive revenue so if you have the lead in the market there is little motivation to improve usability, general user experience, or even underlying code quality if it is "good enough" and "selling". Sad but true.

Eventually, the large enterprise can use up their goodwill and a new company can displace them by caring more, but it takes years and it is risky so a small business is less likely to take on the lion, rather go to blue ocean opportunities.

In some industries, software vendors that have been there for decades (think cobol) are still selling their crappy old "good enough" solutions because new software is so complex for some customers they would rather stick to what they know. You or I rarely see this in the network we run in because those people adopt latest and greatest but so many cannot, still.

The apathy for user experience is a very sad thing to me...because a happy customer will stay with your through thick and thin if they feel like you care enough. How much does the crappy iTunes interface show how Apple cares about the people making purchases? It is horrendous.

About "...rogue apps with access to my Gmail via OAuth. There are none." the only interface I found was exclusive for Chrome: an extension of chrome in the chrome store showing a mobile version of gmail, with support for offline reading and drafting.

The fact that software is so broken is the reason I'm getting out of software engineering. I completely burned out working with the very "engineers" who cause software to behave like that to begin with. Software is delicate. It takes attention to detail to get right. Engineers are zombies who just want to get their paycheck, copy-paste code, and someday become managers.

I must be lucky, I rarely come across issues like this. But I always see it with others (my family/friends/coworkers). I honestly believe until developers start acting like professionals, and are held accountable to professional standards (or at the very least start taking craftsman-like pride in their product) will this trend start to reverse.

As the others have mention, in part it's a scale and complexity problem. But it's more than that, and you kind of alluded to it: it just doesn't matter, in a relative sense.

Companies don't have the incentive to make "perfect" software because customers aren't prepared to pay what it would cost. We have a balance at the moment where most software mostly works and is pretty cheap (or free). People get more value out of new software that does new things than they do from perfecting existing software.

I couldn't get a MBP to sign on the WiFi with an error message about a self-assigned IP. The root cause? Keychain entry was corrupted. An error message to that effect would have been useful.

You're right, Scott. Software sucks. I've always felt that one of the reasons that things have gotten this bad is that there really isn't a penalty for shipping shit. Software, being licensed and not sold, has managed to get exempted from product liability lawsuits. Imagine the focus on quality if you could get sued for shipping buggy software.

I think there are two problems here: One is a problem in society in general where mediocrity has become the norm. Exceptionalism and good service seem to have long fallen by the wayside for most businesses and especially for big corporations.

You see this especially for software companies and how hard it is to even submit a bug report. Ever try to submit a bug report for any Office app? It's amazingly hard to find any place to put this info. All you're left with is forums. Google - you can't ever get a human for anything. Try finding any sort of support link other than forums on Google's sites anywhere. Support links point to FAQs, point to forums, point to FAQ and so on. The only way I can interpret that is that clearly they don't give a shit if things don't work or what their customers think. I've had a number of unresolved issues with Adsense with Google and NEVER EVER have gotten anybody to answer my questions on forums or otherwise...

And worst of all it's become the norm, so that nobody can really complain because the alternative is - well often there's no better alternative. You can get the same shitty service from some other company. So, basically it's put up or shut up.

The other issue is complexity of our society in general. We continue to build more and more complexity that depends on other already complex systems. We are achieving amazing things with technology (and not just computer related but also infrastructure, machinery etc.), but I also think that all this interaction of component pieces that nobody controls completely are causing side effects that can in many cases not be tested completely or successfully, resulting in the oddball interaction failures that you see (among other things). The stuff we use today is amazingly complex and I sometimes honestly wonder how any of it works at all. What we can do is pretty amazing... but all that complexity comes with a price of some 'instability'.

I often wonder whether we really are better off now than we were before 30+ years ago when computers took over our lives. We have so much more access to - everything, but it's also making our lives so much more complex and stressful and taken up with problems we never had back then. Every time we fix a computer problem you're effectively wasting time - you're not doing anything productive, we're throwing away valuable time that could be spent doing something productive or just enjoying life.

And then I go on back to my computer and hack away all night figuring out complex stuff. Yeah I'm a hypocrite too :-)

Christ said If things are this broken for people who live and breath all this stuff, imagine how broken it is for the average Joe who doesn't have the skill or confidence to understand why software sucks.

My wife fully assumes that when something goes/wrong stops working on her device that it's something she did. The only specific app she'll blame for behaving "stupidly" is Facebook. Everything else is "Can you take a look at this? I'm after screwing it up". 99 times out of 100 it's nothing she did.

It's interesting that nearly all the products you complained about come from large organisations. Once companies get big enough that you have non-programmers involved in the development process quality starts to slip.

Of course small developers will have bugs as well but it is much easier for them to deliver a fix. You could email the developer of AdBlock about your problem and almost certainly get a response, good luck even finding an email address to contact Google about a bug.

Some solutions to your problems:Switch to using a Window Phone. You work for MS so that shouldn't be too hard.Switch to a decent email client (I use gmail wherever possible).Switch to an ad blocker which has a bias to false negatives rather than false positives.Chrome works fine.IE9 doesn't.Switch to using professional apps for editing images and video. They ARE built to handle huge workloads.As for all the Apple software, they never said it will work well, just that it looks pretty. (Try winamp)

with Windows 8 supression of the classic start menu or with VS 2012 restriction of the UI to unusable ( modern ??? ) icons and monochrome environment, a huge number of people have publicly complained in blogs. And even there the responsibles of that mess don't hear the feedbacks, so why would you be surprised that everything breaks. Even when you are upset and tell it , it is unheard and you receive as an answer that you don't understand modernity and that you're against changes....so easy! I love changes that help me become more productive, not changes that break my productivity and pleasure to work.

fhallot

Monday, 17 September 2012 07:11:37 UTC

John Batelle seems to have run into many of the same Apple issues as you did.

I read up to "literally off the top of my head" and face-palmed so hard that I went blind and couldn't finish the post.

John Delan

Monday, 17 September 2012 07:36:56 UTC

I think we as users have accepted a lower level of quality about our software. We all stick to our platforms of choice, but the facts is every piece of software has its problems and quirks.

The old joke says : "How does a software developer fix his cars. He shuts it down, exists then enters again and turns it on".

What can we do as users. File bugs and if it gets to problematic switch platforms. That is the only thing we can do.

Monday, 17 September 2012 07:37:07 UTC

This stuff always makes me feel like 'just' writing my own OS...

Mike

Monday, 17 September 2012 07:56:25 UTC

In the grand scheme of things and the complexity of different software working together, the things which work right are a ton more than the ones which don't but we mostly pay more attention to the latter.

I take the time to report problems i find... and shame the companies on twitter when they don't respond. Just did that in my last two tweets few days ago @abdu3000

Abdu

Monday, 17 September 2012 07:56:43 UTC

One more for the list: When logging in to comment, using myOpenID, I am supposed to type my username in a input field. It is all ready filled by the default text 'username', and when I try to delete it character by character, it fills it self the second I delete the last character. Had to type in my username first, and then delete the other text. (safari on iPad)

What I really wanted to say, was that things are to compilcated. It's to many layers. I never stop being fascinated by how simple engines and cars are. Every farmer I know can take one apart and put it together again and make it work. There are no layers of abstractions of any kind. You step on a pedal, and you see things move.

Software? Not so much... There are lots of layers, and every single one will make your application behave in ways that you have no idea how to solve. Like Dep.Injection. A good Idea by it self, but now, every time theres something wrong, I have a 40 level deep callstack with no code that I know of. Is it worth it? I'm not that sure...

Monday, 17 September 2012 07:59:16 UTC

If things are this broken for people who live and breath all this stuff, imagine how broken it is for the average Joe who doesn't have the skill or confidence to understand why software sucks.-Chris

I'm about as close to an average Jane/software developer hybrid you can get; I didn't touch a computer besides for writing and e-mailing up until a year ago, when it was suggested that I try programming. I fell in love, and am now getting my masters degree in Software Development at QUT in Australia. I never fully understood the concept of ignorance is bliss until I started studying User Interaction design. Things like the Skype and iTunes UIs frustrated me before, but it never occurred to me that they could be changed. Now, spending so much of my time working with human cognition, learning, memory and how it impacts the design of software makes it difficult for me to turn on my laptop without wincing. Particularly when you like 10,000 miles from home, I rely heavily on Skype and GMail to stay in contact with my family. When these things don't work, it has a direct impact on so many people's lives. If my 92-year-old grandmother doesn't know how to find a contact on skype, she can't call me. While I am very new at designing software, it seems like a worthy goal to remember that human beings are the ones who have to use it, and no matter how interesting or funky my code may be, if it doesn't translate into something usable, it's utterly worthless.

I like the way you criticize the current state of development. And you are utterly right.However, how long has mankind been programming? Right, only about 30 significant years. Thus, mostly only covering about 2 generations.

How long took it to get fire working, to implement decent steam engines, ...Yes, it took a lot longer. And I'm sure in those days with every failing engine, they said "we can do better". But they didn't, it took more than 30 years to get those things working reliably.

So I think it is a matter of time and education to get all IT professionals to realize that their "quick workarounds" won't work in production and it will take sales A LOT LONGER to understand that we need more time to guarantee quality.

Software is easy to write, but hard to get right. I think that's the problem.

Other things in our world that are hard to get right, eg computer hardware, bridges, aeroplanes etc, these are hard to make, and so the cost of getting them right is not so large compared to the cost of making them in the first place. But when hacking together a piece of software that works for me (and only me and my situation) takes an hour, but ensuring I get it right for everyone in every situation takes weeks, psychologically this cost is very hard to swallow, and this impacts people at every level of organisations, from developers to managers to sales people to the CEO. Everyone has to swallow it to get it right, but if one person doesn't, then there will be pressure to take shortcuts, and so it will be wrong.

The problem you mentioned with the contacts struck a chord with me! I have this problem with my last android device and never could restore my contacts back to normal. I have duplicated contacts and they are somehow caused by the phone auto-linking contacts to emails.

I would be very very happy, if someone would recommend a tool to resolve this. :)

What if any software that you are using would come with source codes and you are able to edit and run your version of system very easy, and then if you wish - share your version with others easy. Would that solve some bugs? Is this is what OSS trying to do or at least initially tried?

Sorry. I was just trying to make a point here. Almost every bright guy who could think overall about a software and provide an end-to-end implementation, consider quite a bit of edge cases, etc - is now busy dreaming up his/her own startup (and making a bit of money, while at that).

Large corporations are busy solving scaling issues so that they can add the next billlion in the next few hours.

Nobody is interested in plain old and "mundane" work of optimization, performance, quality, etc.

Agree with some of the other comments. Switch to a single "vendor". I pretty much breathe MS...Windows 8, Windows phone, Outlook (live) mail, 125GB SkyDrive backup and then don't even get me started with development tools (VS, SQL Server...). Yes I still do other technologies Android tablet, and Gmail spam address but that is just to play and open my head to other ideas and non "life critical" stuff.

One other thing. You mention Windows 8 and then IE9, shouldn't you be on IE10 (which is awesome)?

I do understand your pain, Scott! However all those products mentioned are still *great* products, aren't they? The bugs you list remind me is Spolsky's concept of Software Inventory ( http://www.joelonsoftware.com/items/2012/07/09.html ): you *can* build an infinitely ideal product, but you need *infinite * time. Whereas the market demands on new versions, new resolutions, etc

--Ivan

@Isantipov

Monday, 17 September 2012 09:23:18 UTC

I think a lot of the problems are simply allowed to show up in public because the dev teams of these software products aren't given the time to fix them: Time to Market is critical, marketing already reserved a given date, things are already in motion, only the bugs in the category 'it kills kittens and old ladies' are fixed at that point, the rest is 'moved to a later date'. But that later date never comes, because after the product is done, the team moves on to the newer version with new stuff, and fixing bugs is dreadful work, new stuff is exciting.

There's another thing about bugs which is also key in this issue: fixing them won't sell more licenses of vNext: people won't run to the store, yelling "OMG! They fixed bug 33422!!!1 I can't believe it!". They'll run to the store because new, shiny things have been added, like a completely new UI with ergonomic characteristics of which no-one really knows whether it's actually a step forward.

We all know software contains bugs, even though we did our best to fix them before RTM. But in the end, we have to admit that that label, 'RTM', is really just an arbitrary calendar event, not a landmark which says "0 bugs!". This means that even though something went RTM, it doesn't mean it's bug free, it simply means: "It's good enough that it won't kill kittens nor old ladies".

A wise man, who passed away way too soon unfortunately, once said to me: "Your motivation and ability to fix issues and bugs is part of the quality you want to provide", which means: even though at first glance your software might look stunning out of the box, if that essential part of the quality of the software is missing, i.e. when a bug pops up it gets fixed, pronto, your software isn't of the quality you think it is.

If I look at today's software development landscape, I see a tremendous amount of people trying to write applications without the necessary skills and knowledge, in languages and platforms which have had a bad track-record for years, yet no-one seems to care, or at least too little. Last year I was in an open spaces session and some guy explained that they would place people who just started programming as 'trainee' at customers for 'free' and after a few months these trainees became 'junior' programmers and the client had to pay a fee per hour. I asked him what he thought of the term 'fraud', and he didn't understand what I meant. I tried to explain to him that if you think a person who has no training at all and you let him 'learn on the job' for a few months, is suddenly able to write any form of software, you're delusional.

But with the lack of highly trained professional developers growing and growing each day, more and more people who can tell the difference between a keyboard and a mouse are hired to do 'dev work', as the client doesn't know better and is already happy someone is there to do the work.

I fear it only gets worse in the coming years. Frankly, I'm fed up with the bullshit pseudo devs who seem to pop up more and more every day, who cry 'I'm just learning, don't be so rude!' when you tell them their work pretty much doesn't cut it, while at the same time they try to keep up the charade that they're highly skilled and experienced.

Sadly this process of pseudo-devs which are seen as the true 'specialists', is in progress for some time now and will continue in the next decade I think.

Let's hope they'll learn something about what 'quality' means with respect to software, that 'quality' is more than just the bits making up the software. But I'm not optimistic.

I still think most people are missing the point. The existence of buggy software is a feature, not a bug.

We don't have infinite resources, and we get *a lot* more value from "more" software than we do from "perfect" software. It's got nothing to do with pride or skill and everything to do with actually being useful.

1) VERY few people take pride in their work. They don't care if things don't work quite right, as long as Management approves. They don't care because they're paid the same no matter what. If they produce better code, they don't get more money - they just get questions about why they took longer. If Management says everything is fine, it must be. Ship it!

2) Management knows absolutely nothing about development. Management was promoted from Sales, or was hired from some firm which made widgets for 30 years, or was the VP's Nephew's Friend's room-mate at Good Ol' Boy U. And they don't actually have to care to produce a mediocre, bug-riddled product - they have burndown charts they can point to, and time-tracking on work items. If the burndown line reaches the bottom, everything must be great, right? Ship it!

3) 2 isn't willing to pay so much as one cent more to get a more motivated developer than in 1. Because they don't even know that the developer isn't motivated. They don't understand the code. They barely understand the app. They can't tell the difference between the worst code imaginable and the most sublime, bug-free code in existence. If it runs, it must be great, right? Ship it!

4) New Developer Fresh Out Of School joins the business, and pretty rapidly learns that there's absolutely no point to doing a better job than "just good enough," because when she produces amazing code, no one actually cares one iota more than when she produces mediocre code. If you know the code is bad, don't say anything because you'll be accused of complaining or "not being a team player." Shut up and ship it!

5) Testing - The tester can't actually read code any better than the manager, doesn't understand how to use any tools outside of the testing suite and the software under test, and isn't actually given any time to learn. They don't know how the customers use the software, so they can just test the most basic functionality. All the test systems are in VMWare or Lab Manager, and are wiped and reimaged before each test (Why would you ever bother to test software on a computer that has OTHER software installed on?). If it works fine when you follow the instructions *precisely*, don't bother testing any more (you're holding up progress!) - ship it!

----------

Those are the real obstacles. Commoditization of work. Disincentives for producing better work. Management that doesn't know anything about the business. Demotivational 'project management' that focuses on producing coloured charts instead of good software. Burning out new talent before they even have a chance to write good code. Failing to test beyond the most basic, vanilla scenarios.

K

Monday, 17 September 2012 09:39:51 UTC

Andrej Slivko -

That's the dream scenario for many of us. Companies don't make PDBs available. They try to obfuscate code and symbols as much as is possible. They hide or encrypt *everything*, regardless of whether or not there's a reason. They don't produce any logs or, when they DO produce logs, they're in some proprietary format that only the company's internal tools can decipher.

Microsoft makes this much easier in Windows with the public symbol server, most of the time, but when they fail to do so...

I have an issue with an IE9 security update and some other software. The issue shows up when an IE DLL is called, but there are no PDBs available for the version currently shipping - no one told the IE team to put the symbols up. Consequently, there's nothing that can be done at this point to debug or fix the issue, short of taking wild shots in the dark with code that otherwise works perfectly fine.

K

Monday, 17 September 2012 09:49:04 UTC

I believe the issue is money. If we were all independently-wealthy craftsmen who released things when they were perfect then each piece of software would be a masterpiece.

Sadly we none of us are. We are multinational corporations trading on the NASDAQ. We are employees who get paid an hourly rate. Someone else makes all of the important decisions.

Software is big and complicated. The only reason that people fund development is the expectation of large profits...

yep this wont work in current context of software business.but we can dream about other context :) where every peace of software that run on your device has it's own mini IDE build in and mini source control and you can work on it's sources as easy as with app itself and you can share your code versions with others... we have peaces for building such context already and it could be that we only need to put them together? (and then fight and win against old software business models... :)

Your amazing, multi million line Windows desktop, the work of some 1000 people or more, has a problem with indexing.

The network and apps that connects you via email to everyone else on the planet, free, globally and instantly, sometimes loses a mail. Or is slow to load your new messages.

A program with which you can do what it took huge teams, million dollars of equipment, and professional expertise to do (FCP), has a crashing bug in some particular action.

The program that lets you talk to everybody on the planet, instantly, with video, and paying nothing, has a badly designed UI.

etc...

Yes, I can see how "everything is broken".

Because when you didn't have any of these, when 30 years before you had a rotating dial to dial numbers on your phone, 20 years before 20MB was a huge disk in a desktop system, and 10 years before something like video chat was only possiblein huge organizations with special software, everything was perfect...

foljs

Monday, 17 September 2012 10:01:41 UTC

"I read up to "literally off the top of my head" and face-palmed so hard that I went blind and couldn't finish the post."

YES. We have 3 literallys in that post, of which none *is* correct.

Note the "is"! There's also a "there are none" in the post.

"None" is "not one" abbreviated, thus singular. Should be "there is none"

Sorry to be a PITA but given that this is someone who expects near-perfection in software, I'd expect perfection in grammar on they're (jk) part.

Stickler

Monday, 17 September 2012 10:27:18 UTC

@Radu Iscu - switching to Windows Phone is not a solution - also on WP there are thousand of small or big issues that nobody cares about. Some will be fixed in futures versions, some maybe never. Some are in Microsoft software, some in OEM apps/drivers (HTC, Nokia etc.) some in third-party apps.

Just some recent ones: very often I'm unable to enter in the marketplace app from the phone and to "fix" this I have to restart the phone, the phone "forgets" the phone numbers for 80% contacts after I change the SIM, no USSD or SIM toolkit support, no support for encrypted emails, Skype on WP7 does not run in background, Lync seems unable to connect to the server, an icon appears on lock screen telling me that I received notifications but there is no history with the notifications and the list continues..

We certainly have some amazing stuff in our lives but every time I tell my daughter or wife to reboot to fix this or right click that and reconnect or turn the printer on and off or have to restart print spoolers or reinstal drivers etc I just wonder how the other side of the non tech world live. Even my oven had to have a hack applied to it a few weeks back to make it get to heat and stay there ( new board now)First world problems....

Scott, I know it doesn't help you, but I still want to thank you. I moved myself and my whole household over to Linux some years back, and when it hiccups I feel kind of guilty. Knowing they'd have just as much pain with Windows, on top of endless virus and trojan irritations (especially for my kids), I feel much better. You haven't solved anyone's troubles, least of all yours, but you have made me feel better.

I think it mostly comes down to competition. Ship or you/your product become irrelevant and that leads to fast and loose dev/release cycles and not enough testing.

Integration is another big issue in my opinion. You may expect all your apps to behave nicely across all OSes/browsers, but in reality they're not going to be tested thoroughly with even a small sample of every conceivable configuration that millions of users are going to be using.

A. First is what many have alluded to already - we want top-notch software, essentially for free. We have become accustomed to adding substantial function to our devices, as well as cloud-based/cross-platform/"unlimited" data and services at no charge.

B. With the explosion of the mobile space, the pressure increases to innovate and push the bleeding edge out to consumers faster. Iteration cycles become shorter. There is increasing competitive pressure to get new features out the door. This is especially true in a world where all of the players and platforms intersect in the web space. To me, this has an impact on the QA cycle and upon vendors ability to design for both forward and future compatibility.

C. "Standards" have become a moving target.

D. There are more, but it is early, and I have not yet finished my first cup of coffee.

To me, this all falls into the category I like to call the "Apollo" or "NASA" syndrome - IN 1969, the US put a man on the moon. Multiple times. Following this, they developed a re-usable space shuttle program, which operated successfully (with some caveats) for thirty + years. The complexity of these ventures (or most other space-program undertakings) is nearly unrivaled in the history of human technology. Yet, the biggest headlines pop up when things go WRONG.

Given the complexity inherent in our modern computing and software systems, what is amazing to me is not that there are bugs and compatibility issues, it is that there are not MORE of them.

Great post Mr. Hanselman, and spot-on. Just wanted to throw a different perspective out there.

Remember. It never worked in the first place. Don't get pissed off because it still doesn't. I wish Novell net ware was still here too

John Allen

Monday, 17 September 2012 12:02:16 UTC

Probably so late in the comment stream no-one will read it, but ... (damned being in the UK time zone! ;) )

Just listened to you on the 800th podcast show, on which you mentioned:

a) why be negative all the time and mentioned "someone on Twitter". Cue everyone thinking "it's not me is it?". Though for the record, you're so right, no-one cares. Turn JavaScript errors on and browse the web and see how fast you turn it back off.

b) much of your complaints are concerned with the iPhone. So why not, as you say, "stop using it"? Just like I'm going to stop using Telerik Reporting, and JustCode.(Though to be fair, Telerik *do* listen)

I'm with you till the last one. It's not gmail's prerogative to work nicely with an ad blocker. It's probably actually in their best interest if you have to add an exception to get Gmail to work. And the ad block people can't possibly test every website on the Internet.

We accept project failure rates (meaning features not delivered, not working, software not on time and / or not on budget 50-75%) of the time. Software is simply not a mature industry - contrast those failure rates with building codes or airline safety.

So what's the answer? Education for everyone concerned with building software about what craftsmanship actual means and how to do it. Yes, that means practicing the technical practices, such as paying developers to take part in code retreats, coding dojos and other types of hand-on learning events.

The .NET developer community, in particular, seems myopic in it's resistance to change and process improvement. Since 'leaving the fold', I've been involved in production projects where pair programming, TDD, minimum viable product deliveries, on-site customers, etc... are a reality. Guess what? These practices work.

We don't farm with hoes and horse-drawn ploughs anymore, so why do we still build software based on archaic and out-dated practices?

People who "facepalm" over the use of literally need to get a grip. You are acting just like the marketing guy who is looking at the software chrome rather than whether the damn thing works in the first place.

Since you didn't say anything about iTunes, i will say that it failed to update while i was reading through the comments of this article.

i agree that a small part of this problem is a complexity issue. As a developer, it's difficult for me to know what my code is doing because i don't completely understand the stack underneath my applications and i tend to only learn more about it when i run into an issue.

i've also learned that just like life, situations in software aren't as cut and dry as i'd like them to be. Often, i find issues to be systemic. Often, it's me.

The hard part is hitting that wall and then being willing to put forth the effort to push through it in the name of quality and that does mean not listening to the part of my brain that says it's horribly boring work.

Surely somebody's doing something! I'm sure if you look around you'll find a lot of people doing a lot of things to fix software quality and improve user experience in software applications.

But, consider what's really broken in the world: food supply, resource depletion, pollution, poverty, crime, violence, war... When I read a title like, "Everything's broken" those are the problems that come into my head. And so, I was disappointed to read your list. It didn't aim high enough for the problems I was considering.

Makes me feel one component what's broken is our priorities and focus. Clearly the priority and focus for the software you're using is not on quality and experience. It seems the software industry has optimized to get-product-out and iterate asap. Ship!

But then, when I consider the larger question of "what's broken?" where I look at the real issues in the world, I come to the same answer: the priority and focus of society is not tilted strongly enough towards fixing those types of big-world problems. Instead, we have so many of our great minds attacking other types of problems.

Generally, when we humans focus and prioritize, we can achieve just about anything we desire.

Harmony

Monday, 17 September 2012 13:20:01 UTC

This is something very interesting to me as I am in my final semester of my Master's in Software Engineering which is basically the study of quality in software. I personally think there are many variables which lead to lower quality products from timeline and budget contraints to poor process management or just poor software project management in general. Think about architecture for a few minutes. In our daily lives how much time do we spend thinking about how to build the software versus just building it? I know most of my peers have said things like "why do I need a class diagram?" or "Why waste time making these plans to code when I can just code". I am fortunate where I get to make the architecture decisions, but, that doesn't mean I always have the time to do so and many companies won't hire people to focus on just architecture which is where the quality issues start. A lot of the quality issues happen before even a single line of code is written through requirement analysis and figuring out exactly what the customer actually needs. The stats say 70% of the cost of software is in figuring out the problem so why spend so much time coding before we plan right?

Iphone 5 is a good example. Do we really NEED a phone that is thinner and lighter with a slightly better camera? Not really... but the public wants that so apple is giving the public what they want. It does lead to poor quality though and less innovation in the software community. Without having a driver toward people who are really innovative companies will continue to ignore the problem and just keep developing the same thing over and over in a shinier package.

Aaron

Monday, 17 September 2012 13:24:07 UTC

I think it comes down to serveral reasons:

1. The definition of Quality

Quality is in the eye of the beholder.

2. The 80/20 rule

Bugs/issues are (rightly or wrongly) seen as the "20%" by management, it's not worth spending the time fixing them, as the percieved gain is so small, better to get new features out the door to get the competitive edge.

3. "One swallow does not make a summer"

Everyone's a programmer, or everyone's a designer or everyone's a web designer etc. etc. Because I have a pc and a copy of photoshop, I'm now a designer... or I've got a DSLR I'm now a photographer, I've bought some spanners and a book on plumbing, I'm now a plumber (actually I probably am!)

Are the apps/systems broken? Or is the way you use them broken? I'd say the latter. You can either control your systems, or let you systems control you.

I used to be in this same problem at one time. Then I stepped back, looked at the problems and took control. Now I control the systems by using them more efficiently. Any process, be it computer based or not can easily get out of control. Just like a desk stacked with papers up to the ceiling your computer can become so overloaded with crap that it appears to be broken. Time to re-examine your use of these machines and start over. Not just with one app, but with the whole mess. Throw out everything. YES! Everything. And start as if you've never used a computer before. But, this time make sure you know what you are putting where and why.

Simple. Fixed.

Scott

Monday, 17 September 2012 13:33:12 UTC

Now that's just insane. I would never accept that situation, let alone 100 of those.

Why do some people keep having issues like these? I think the answer is pretty simple, although not very welcome to most. It's because you _don't_ use the open tech available to you. After all, most of my geeky friends have issues like these, and neither do I.

But we don't use Word. We just write, just text, and there's nothing more to it. We don't use crazy complicated indexing file managers. We don't because there are too many moving parts. Too much stuff that breaks. And we need to get stuff done. I for one can't be expected to relearn my file manager every few years.

Jonas

Monday, 17 September 2012 13:36:14 UTC

I don't think what you are describing is a software problem per-se. It's a characteristic of any large and complex systems.

The same kind of "issues" could be said about the English language per-se (what do we pronounce this vowel here but not there) or about how these two plants in my windows are growing different if they receive the same light.

I think mainly because the massive scale in which consumer software is used, it has reached that kind of complexity that we see in other large systems and we should learn how to live with it. And by "live with it" I don't mean just put up with it. I mean we as developers need to account for it, expect it, and design systems that work gracefully even in some unexpected conditions. Users are learning to live it with one way or another.

My $0.02 (and probably worth as much): your pain is a result of 2 factors -- one you are doing and another that is being done to you. What you are doing is trying to make make not-very-compatible hardware and software ecosystems (there's that word again...) integrate seamlessly (e.g., using Outlook -- most reliable on PCs -- on Mac). As others have mentioned, remaining as much as possible on the hardware vendor's "reservation" is still, after all this time, the most reliable way to go. What's being done to you is a change in the tech culture which values velocity over quality, and which ranges from agile programming methods all the way to vendor's "don't ask permission, ask forgiveness" implementation strategies in rushing products to market in order to steal share. Whether they are ready or not, to be fixed later. Maybe.

SpragueD

Monday, 17 September 2012 13:39:11 UTC

This reminds me of John Battelle's similar, recent Apple usability rant, already noted in a comment above. But I'm also reminded of Jaron Lanier's criticism of "lock-in" or the inertia created by 25 year old on-the-fly fixes that we're still stuck with. When we go from snafu to fubar should we blow everything up (everything from cabling infrastructure to product markup ideals to every single device?) so we can start from scratch and do it right this time?

Or do we just need to go back to usability testing before product launch in order to get rid of at least half your list?

You seem to have a very short memory. Can you not remember using Macos 9? Or windows 98? In those OS, if you could even load up several applications at once without a complete crash, you were lucky. And after such a crash, we waited for many minutes for a "disc check" or similar.

We got used to several desktop crashes per day. My guess is that your contemporary machine hasn't needed a reboot for weeks.

We had applications which took a long time to do things which are now instant. We waited for modems, the modems often kicked us off. Our web pages loaded slowly.

I don't feel your pain. Not the slightest bit. Why? Because I don't run *any* of that stuff. Okay, except for Word sometimes, and that doesn't count because I run a really old version. It shouldn't come as a big surprise that if it's old it's probably more stable, and if it's new and *!FEATURE-FILLED!* it's probably immature and twitchy and doesn't play well with others.

Want less to write about? Run W2K and carry a dumb burner.

Jonathan Levine

Monday, 17 September 2012 13:49:56 UTC

I love the comment about birthdays - "My Calendar in Windows 8 is nothing but birthdays. Hundreds of useless duplicate birthdays of people I don't know." This gave me a good laugh.

It reminds me of a problem I've run into with cross-platform calendar synchronization. I have a friend that has a birthday sometime in June. When June comes around, I'll look at the Calendar, and I'll see his birthday listed on June 12th, 13th, and 14th. Apparently he was born on 3 different but consecutive days. Somehow his birthday has spread like a virus. And I have no clue which day it *really* is, because I don't remember - that's why I put it on my calendar. And this happened regularly with a large number of friends.

My solution was to use a one-way iCal subscription instead of a 2-way sync.

"All software sucks" -- [citation needed, but at least as old as I can remember in USENET]

Personally, I think a lot of the suckage these days comes from toolkits and deep stacks. When my software has problems it's sometimes really hard to know where to even start when there's at least (quick count) 5 layers between my code and the signals on the wire (my code, toolkit api, jitter/language, vm, os, tcp/ip stack or disk or other resource). More than likely its my problem, of course.

But when things go wrong and I suspect it's not my problem I don't have many choices except to shift the stack a bit and find another way to do it. There's no realistic way given the constraints of time and money to do anything else. OSS doesn't help much either. Who has the time?

I'm writing software with bugs (that I own) on top of a buggy, shifting stack of software that I don't own or control.

It's interesting how many comments have some element of "blame the victim" (e.g., you're using too many products, you'd be better off buying Chevrolet gasoline to go with that fancy Bel Air).

It's also interesting how many comments here focus on some specific problem (e.g., setting up an alternate account with one-way frobozzes will resynthesize the index deletions), while missing the big picture that these are symptoms. It's all bad.

As a profession, we can do better. We know how to do better. We've been taught how to do better since the 1970s, when modularity and data hiding really came into their own. But, alas, we're in a hurry, and doing better requires hard work: thinking. The problem is not that it's hard to enumerate a zillion test cases--that wouldn't be as much of an issue if we focused on getting things right in the first place, on designing for isolation and independence. Heck, maybe focus on designing at all, rather than on getting the latest greatest tiny update out as fast as possible.

But it's been clearly demonstrated that what the market wants is crap in a hurry, and that's what it gets. The problem is exacerbated by the purveyors' need to deliver constant "improvements" to existing functional products in order to garner more revenue, which in turn requires grossly incompatible changes with great frequency just to wean satisfied users away from working solutions and force them to adopt more expensive new (but hardly improved) technologies.

For more on this, read anything by Don Norman, or Why Software Sucks...and What You Can Do About It by David Platt.

Olin Sibert

Monday, 17 September 2012 14:19:27 UTC

Scott, this is a first world problem. I imagine that people using machinery in the industrial age had similar complaints. "The ink doesn't print uniformly when I run the printing press at full speed", "The belt keeps slipping off the thresher when there's too much straw on it.", "The welds on the steam boiler keep failing from the heat", "The keys on my Underwood typewriter keep jamming when I type too fast." Imagine having to send a letter of complaint to the manufacturer of these machines and waiting weeks for the response. I wonder if those people felt like nobody cares back then too. But the advantages afforded by those technologies were far better than the previous alternatives, so people put up with it and carried on. You *could* perceive that as 'no one cares'. Maybe it's simply the price of progress.

You've received 80+ responses to your post on the very same day, the first coming minutes afterwards. The ability to create software, and indeed to complain about its quality online is the highest form of individual empowerment and communication capability we've ever seen. I don't disagree with your complaints, and I too believe that we can do better. But look how far we've come in just that last 20 - 30 years. It's just growing pains, and it happens with every new, significant technological advance. Having said all that, I believe that "the collective will to fix it" can be characterized in a single word: craftsmanship. We need more of that in our software.

Randy Westman

Monday, 17 September 2012 14:21:25 UTC

The question has to be: to what extent do these bugs affect the bottom line?

If the answer is "not much" then we should move on by realizing what that means: users simply don't care enough about these paper cuts.

Jeremy

Monday, 17 September 2012 14:25:08 UTC

My list since I use Visual Studio so much is skewed but:

1. Silly non-printable character on the please wait popup when opening a WinForms form in the designer.2. Errors saving WinForms that the only solution is to close VS.net and clear the temp directory and then restart. Really messes with Dev Express.3. asp.net sites claiming compile errors because of temp directory crud not getting updated by VS.net when a change is made to a project that the website depends up on. Requires close of Vs.net and kill of temp folder.4. If you have a ton of errors in the same file (common if you're refactoring by hand) and you start at the top of errors list and ever delete a line of code, all others in the errors list will be off by one line. It doesn't automatically update.5. Vs.net 2012 routinely fails with intellisense. Only solution is to close the file and reopen it. Minor but annoying and new in VS.net 2012.6. Package Manager Console in Vs.net 2012 project drop down is always blank so you can't pick a project to do things like EF Update-Database etc. Have to hack the manual commands. Yuk.7. Windows 8 RTM, if you do a lot of copying and pasting (over and over again) of files, especially with drag and drop, Windows Explorer crashes without error. Doesn't kill the start menu interestingly.8. Windows 8 doesn't let me have multiple metro apps up on multiple screens. Yuk. This one thing would have made the OS OK to use.9. Windows 8 loss of start menu. Should have been replaced with a Windows Phone 7 style small version vertically scrolling of the main start screen. Pita.10. Windows 8 native apps have screwy mouse support that didn't adapt and it's a shame. It should have been changed to work like a tablet and scroll by grabbing (click and hold) and highlighting and drag and drop should have been changed to click and hold longer like WP7. Then panorama and everything else would have worked great just like touch and people using a mouse wouldn't have hated it. (also works on a touch pad too)11. Chrome routinely freaks out loading a google result that you click on and shows the previous page loaded instead of the new one.12. Ever since google started redirecting through themselves on links instead of going directly to the link clicking through results is slow as hell. Bing is better but not great.13. Microsoft please release a complete bluetooth stack that works with all bluetooth dongles and not just your own and has all profiles for all devices. The ones from the manufacturers SUCK.14. Seriously you can't boot Windows Media Center on start up in Windows 8? Seriously?15. Seriously you're not replacing Windows Media Center with a Windows 8 native set of apps? (see below)

My #1 biggest peeve:

Microsoft: Release a box that takes a cable card and has a power, Coax, USB 3 and CAT6 plug on the back. Work with the cable companies to automate cable card pairing and activation. Make it run Windows Embedded and automatically detect new hard drives plugged into the USB port and automatically add it to the drive pool for recording. Make it do nothing but handle the schedule,and record shows. Make it seriously cheap. Then provide an open interface that anyone can use to communicate with it and stream video, but create a consistent interface on Xbox 360 and Windows 8 in metro style. - Take over the TV world by doing this before Apples does it. Don't try and create your own cable company, waste of time for now. But cable card gives you the solution and a box that just works that xbox 360 can use and control with guide etc. or Windows 8 same way and any device can play anything and the box can record/live stream 6 shows at once (max cable card supports) and you're done. Ultimately work out deals with Dish and DirecTV to plugin as well with an adapter. I know the WMC group is disbanded but this is how you own it. Why are you not doing this? It's the logical next step for WMC and will hit a HUGE market fast especially if you have iOS, Android and WP clients and it can work in and out of the home. Head shake as to why this isn't happening yesterday? You should have released this 2 years ago or more when you brought out the Xbox dashboard with Metro Design language. DO NOT PUT THE RECORDING IN THE XBOX. Let multiple xboxs work as set top boxes. Work with the TV manufacturers to licence access to the boxes. Let other companies connect and create their own interfaces. Google wouldn't be able to compete, neither would apple if you do this right and it would assure Xbox 720 would own the console market too because Sony would be behind the 8 ball and if you patent it properly you could block everyone out.

I believe its simply because we, from the average to the seasoned professional, have historically taken software for granted which is partly because of the dynamic pace at which technology evolves that there is so less time to perfect it and partly because we don't care 7/10 times is great

Abhilash

Monday, 17 September 2012 14:28:57 UTC

Is it a people problem? - Yes

Are folks just not passionate about their software enough to fix it? - NoI am a passionate developer, but I am not a genius.I seek opportunities to learn from passionate geniuses, but my unfortunate experiences are that geniuses don’t get into details, they cost your time and money and create some issues, and then they tell you that your system sucks and leave

day day up

Monday, 17 September 2012 14:32:15 UTC

Bugs are to the benefit of companies like Microsoft and Apple. Having a bug in system version n, means that you can sell next year system version n+1.

On the other hand, I've been running a debian Linux 2.6.18-6-k7 for more than 714 days, without interruption. While I encounter no bugs, I have no reason to upgrade it (and then I actually did upgrade debian to a whole new version to install new software last year, without having to restart it!).

When there are bugs in commerical software, programmers would need time to find and correct them. Therefore they'd need to be provided food, clothing, shelter, for them and their family. This would translate, in commercial enterprises, to money to be paid, while no new software would be sold, which would translate to a loss, bad quarterly results, falling share price, hangry shareholders, bad "economic statistics", bad GDP, pessimism, enterprises not hiring, unemployment. A lot of sad people.

On the other hand, if instead the corporation just increases the version number and start selling the buggy software, there's no expense, there's sales income, therefore benefit, therefore good quarterly results, increasing share price, happy share holders, good "economic statistics", good GDP, optimism, enterprises hiring, people get hired. Everybody's happy.

On the other hand, software that's not developed in a commercial environment, eg. GNU emacs, is delivered when its completed. There's no dead-line time limit for when a new version is release: the next version of GNU emacs is released when it's ready. The result is that while emacs is the application that I use the most (I always have it running), it's even more stable than the underlying linux system (which has to be rebooted when upgrading new drivers). On the above mentionned system, I have emacs instances that are running since more than one year.

There's also another consideration. Operating System research has been practically stopped since the late eighties. The fact that commercial corporations have standardized on IBM PC and then Microsoft Windows killed all the effervecent competition there was between various computer architectures and diverse operating systems, both from the commercial offer, and the academic research. See for example http://herpolhode.com/rob/utah2000.pdf

There are a few searchers who try to develop new OS concepts. For example Jonathan S. Shapiro was working on capability-based OS (eros-os and then coyotos), but he was stopped in his tracks, by being hired by Microsoft. Again, one has to find food, clothing and shelter for oneself and family, and in the current system, that means the commercial corporate world.

http://venusproject.org www.thezeitgeistmovement.com/

There is a very strong spirit of herd in humanity, so it's also hard to expect much. Yes, there may be bad systems, but as long as 85% of the people are using them, they keep using them. Sometimes for the good "network effects", sometimes for the economic mass effect (but nowadays we'd have the means to produce more personnalised products, so there's no strong reason to have billion of identical phones on the market), but more often just because the rest of the herd is doing the same.

Pascal Bourguignon

Monday, 17 September 2012 14:36:26 UTC

I think that the main problem is a lack of accountability. When a product and/or service has a clear owner, it tends to be better because when people have feedback, it's clear who to give it to. When that owner is anonymous or amorphous, the feedback either doesn't come or gets lost in transit.

Take your calendar birthday issue for example. What do you do with that feedback? Who owns that experience? I have an issue with the Videos app in Windows 8. I bought three seasons of "Avatar, the last Airbender" years ago and now every individual episode shows up there in a flat list. Worse still, none of them actually work. Who do I talk to about that problem? I have no idea.

Experiences like that seem to come from a soulless experience factory manned by mindless automatons interested only in parting you from your money. When we're able to put a name (and a blog, twitter account, etc.) to a user experience, then I'll think we'll see some real progress.

If we built buildings the way we built software everyone would work outside.

I think right now we need so many developers we will put up with crappy software. Good enough as become a status quo.

I have to constantly debug web apps for users (doctors, MDs) trying to use large corporate apps to collect information to help sick people get better. Sometimes I give up and that means "XYZ's" app really sucks.

I hope the industry is working through all this right now and we are in the middle of the change.. it feels this way to me. Change for developers and change for management to accept what is possible.

My perspective is that the consumerization (if there is such a word) of technology is happening too fast before we understand it completely.

Technology for developers and technology for consumers are totally different beasts.

Which is why when something seemingly cool which when unleashed upon the general masses eventually grows to be complicated enough starts buckling under its own weight.

Also, the usage patterns go wild when the technology is in the hands of the consumers, some of which are not even thought of by the makers of the device / software applications.

Instant gratification and "don't make me think" is part of the problem as well IMHO.

When we purchase a car, we are aware that it behaves in a certain way, there are rules of the road and there is maintenance to be done to keep the car running.

Technology has no such boundaries, it can do whatever we can build it to.

Plus software not being a physical entity makes it much more complex to comprehend.

I feel these are growing pains in a very young industry and it will take some time before it matures.

"Wisely, and slow. They stumble that run fast." - William Shakespeare.

fallenprogrammr

Monday, 17 September 2012 14:44:27 UTC

In the corporate environments in which I have worked, my feeling is that the end users just expect software to have problems and perform poorly. This expectation causes the quality bar to be set really low. I have always tried to mitigate this by insisting that our in-house development efforts only be of the highest quality, but when your end users are also your quality assurance testers you run into problems. Bottom line is that- and I'm speaking really generally- apathetic users don't inspire the best efforts. And sometimes- Agile be damned- there is a deadline that must be met due to business or regulatory conditions. Against these forces you run into a perfect storm of conditions that prevent the best work from being done.

I see many "it's because of complexity," "it's because of money," "it's because of lack of pride," "it's lack of training," and "it usually works," comments.

I think all of those skirt about the real issue. I believe it is about accountability, which wraps in all of those arguments.

Software doesn't *need* to work, and we agree to that every time we click the "I agree to these terms" box. There is no cost to turning out a failure-prone product so long as it is (to a sufficiently large audience) in some way more desirable than the alternatives, or it at least sells enough to pay back the development costs.

If Apple had to pay for your time spent fixing your iCloud Photo stream, Microsoft had to pay for the cycles wasted while the indexing service churned away at nothing, or Google had to reimburse you for lost business when Chrome made you bust a deadline because it screwed up Visual Studio... Those companies would either get out of the business or tighten up their code and make sure it played well with everything they could possibly test. QA budgets would skyrocket, and so would the cost of software.

I don't see any way to impose accountability, though, and I'm pretty sure that if we did, innovation would come to a crashing halt and then restart at only a glacial pace.

So, aside from perhaps being an interesting observation, I suppose none of that is very useful.

Eric Kervina

Monday, 17 September 2012 15:03:43 UTC

Maybe, it's as the Nokia Lumia ad says, "We are all part of the beta test".

fallenprogrammr

Monday, 17 September 2012 15:06:58 UTC

Scott,first of, throw your IGarbage products where they supposed to be and get a window phone 8. =PI totally agree with your post, but we can't forget the factor that drives our lives in software development and engineering "Meet the dead line at any cost no matter what" of find yourself replaced by the next dude that wants to try.nobody cares about QA as much as they should, scopes are constantly changed and dead lines as constantly static.

One of the last things he had published was an essay called "Nothing Works and Nobody Cares". This was in 1965.

So "everything's broken and nobody's upset" has been going on for at least 40 years now. It wouldn't shock me to find complaints from the Roman legions that the quality of swords and spears has been declining, and now you can't get through an entire campaign without using three or more swords, where in the old days you only needed one.

I'm not saying we shouldn't do anything about this (and I have my own long list of tools that don't work or are broken) but I think it might be worth taking the long view on this.

I work in software testing. Stories like this drive me more to push quality upstream and hold the line politically when errors are bad.

But yeah, when timelines are shorter (remember when huge software products took 5 years or more to get right?), quality requirements are lower (how many users will really do THAT?), and upper management now has less of a real connection to the software (since somehow now everyone wants to run a business rather than solve simple life problems).

That said, these instances all make me want to face-palm, then go into work and spend a little extra time selfhosting and working on integration testing. Because the last bit that I didn't read above (sorry, too many comments) is I believe that when we are all building more complex software, test teams (if you HAVE a test team; *cough* Facebook) spend more and more time focused on the complexity of their features and less on the experience of using the product.

If software engineers on the whole recognized the priority of software quality, then maybe the role of test engineer would be more common. Today, its just not.

It WILL get worse before it gets better though. Most engineers just don't get it. They use all the workarounds you mention as a part of daily life, then go back to work and keep ignoring the pain. Not until regular users just literally can't use the product anymore and don't buy it will this pattern change.

I feel your pain. Every day is a similar list for me and it drives me to do better testing software before other's get to it.

Scott,You didn't give much coverage to the whole security aspect of things (apart from AdBlocker)

For me, this is one of the most broken aspect of computing (at least on the windows platform) with just about every ounce of grunt that my quad core PC may have had, being taken up by virus checkers & firewalls etc.

Whilst the concept may now exactly be broken, the implementations certainly are. Just as we are now consigned to spend inordinate amounts of time in airports, due to terrorist threats, we are also doomed to never realize the full potential of computing performance improvements.

In general, though, the 'More haste, less speed' philosophy seems to have crept into most software products.Just how many times a week does Adobe Flash get upgraded, for heavens sake? (Did anybody even notice the issues that the patches are addressing?)

Also, you're probably just getting old(er) - just like me ;)

Bob Armour

Monday, 17 September 2012 15:36:15 UTC

Wow, Scott. How timely is this?

I have five kids and at least 6 platforms to deal with in my house. My head is about ready to explode because I am the ONLY IT guy. I told one the other day that his grandfather died at 67 and his great grandfather died at 62 and I'm 58. Exactly how much time do I have to spend troubleshooting his print server?

The barriers to entry in this field are effectively zero.

The ability for the consuming public to ascertain expertise prior to engaging a product is almost zero.

The liability for false claims about a software product or service is effectively zero.

Developers can jump in, produce total crapware, cover their costs and move on, all while updating their resume.

What it comes down to in this field - like every other one - is the personal commitment of the developers and companies involved to have no tolerance for mediocrity and to stand behind their products. You either give a damn or you don't. I had a service that processed electronic health insurance claims. 20,000 a night for 10 years. We NEVER lost a single claim because we were nuts about fault tolerance. Why? We used to say "it is someone's paycheck". He, his family, his employees and his patients all depended on us to make sure everything worked. It was hard and it sure as hell was satisfying.

Of course, this will all be moot as the patent wars escalate. Pretty soon I won't be able to pinch my wife's ass because it'll violate some Apple gesture patent.

I would tend to agree that it's mostly about money. Many companies don't want to do real budgets around software engineering. Project costs should be budgeted as an investment into the product. Instead, many companies just scrounge up the bare minimum they can find and see what can be done with it.

Given the Time-Money-Quality triangle, quality is the first to go. High quality software requires money and time. You need to hire project managers, testers, designers, tech-writers, etc. Companies that just lean on their developers to get as much done as they can are clearly sacrificing quality in favor of reducing head-count, salaries, and time to market. I think the small companies and large companies alike are guilty of this.

That said - why is it that hardware engineering doesn't seem to have this issue? That shiny new iPhone took plenty of competent engineers, but also lots of overhead from project managers, designers, quality control specialists, and much more. Can you imagine if Jobs had just found another Woz and asked him to build an iPhone?

One wonders if the rise of 3D printing, self-fabrication, hobby electronics, etc. will end up corrupting the hardware industry. When hardware engineers stop designing stuff and start just throwing things together because their boss asked them to - they will be exactly where we are today with software.

"Technology is the name we give to things that don’t work yet" - Danny Hillis

Bill Christie

Monday, 17 September 2012 16:00:44 UTC

Mostly agreed. Also agree that we can do better. Same with with David Kennedy's comments.

I am amazed how greatly IT incompetence and workforce apathy are ruling in the work environments nowadays. It seems that that IT "solved" their problems giving VIP treatment to their leaders - so do not feel the pain in everyone's asses - and the rest of us are receiving the "left-alone-in-the-cold-night-public-service-like-sorry-I-cannot-help-you" treatment.

As others have written, software complexity takes many forms, one of them being sheer size. There's also the number of domains you need to address (from telephony to car driving, from contacts to enterprise assets).

But there's something else. A root cause of many bugs is the fallacy that the code behaves like the concepts we have in our head. You see a "person" in the code and you assume that it somehow behaves like a real person, when maybe it's just a first/last name pair that is not good enough to uniquely identify a person. And you end up with contact sync bugs or instant messages going to the wrong window.

Concept programming challenges this core tenet, by putting the focus on the conversion from concept to code, which is always lossy. It gives us a few metrics to identify what might go wrong. With the help of concept programming tool chest, you will quickly realize just how broken something as simple as your "max" function is. By "broken", I really mean that it has very little in common with the mathematical "max". So any reasoning by analogy with what you know from concept space leads you to ignore issues that you should consider (e.g. overflows in integers).

The linked presentation also offers a few ideas on how to build tools that take advantage of these observations to reduce the risk of error.

When I cut out all Google products, most of my issues seemed to go away.I use an MBP running Windows 7, WP 7.5, and FireFox as my primary browser. Other than some stupidity with Trillian, my tech issues are non-existent.

D Cameron

Monday, 17 September 2012 16:27:50 UTC

start from scratch. remove the things we know are broken and replace them with the most minimal tool possible. why the "most minimal tool"? because these minimal tools will also be broken or fail you in some way, but because these tools are small, we can manage their failure states.

also, eliminate monarchies. after microsoft failed to be a benevolent monarch in the 90s, people simply looked for a new king - apple. no more kings. use open source and dive into problems or help those who are diving in. if you rely on the goodwill of a benevolent monarch, its game over. you probably cannot get out of your situation with apple technology.

keep expectations in check. technology is often poisonous to our happiness. limit the penetration of technology into your life.

brad c

Monday, 17 September 2012 16:29:33 UTC

Yes it is broken! It has been that way for a long time. Somewhere in the sixties someone called it the 'Software Crisis'. We've been sliding down hill every since.

I definitely don't think you're whining. I've been writing about the decline for years:

http://theprogrammersparadox.blogspot.ca/

What seems to happen is that the problems are really easy to ignore when you're new to software. But after a while you start getting expectations about what quality really means and then you start noticing less and less of it out there. Somedays it makes me want to become a Luddite.

Wow. What a nerve this one touched. I will state that I do not see an "incorrect" comment in any of those previously posted.

Two quick observations:

1. Your general pain exemplifies why it takes me quite a while to incorporate something new into my technical ecosystem. Before I commit to using one of these wonderful services, I want to largely know how it integrates, what its limitations are, and ensure that it is easy to live without if something goes away or fubar.

2. Here is another instance of the problem: I have tried more than a couple of times to use my Blogspot/Blogger information to further identify my comments, never gotten it to work, and comments I spent five minutes or more typing in get completely lost. Happened with a previous version of this comment too.

There are many parts to the problem, and this is just scratching the surface:

1. Developers are discouraged from considering their work art or craftsmanship. Emotional detachment is critical, I agree, but nearly every development methodology siphons passion out of coding in an extremely effective manner. And when developers stop fighting for code elegance, quality spirals quickly. I've never seen high quality code produced when the developers weren't willing to fight management tooth and nail over feature bloat and quirk maintenance. Everything is a tradeoff, but each non-critical checkbox that is introduced generally doubles the number of logic state permutations, and halves the ability to perform complete Q & A.

2. Leaky abstractions are considered 'acceptable' by management. Software capabilities are limited by how tall we can stack the layers. Perfect layers can be stacked infinitely, but imperfections trickle up exponentially. Software innovation has slowed to a trickle, in a nearly logarithmic fashion, and it's the fault of layer quality just as much as the patent wars.

3. Money is one of the least effective ways to encourage creativity and craftsmanship (see "Effective Programming: More than writing code" by Jeff Atwood, great read).

To me, the only strategy for solving the layer and quality problem on a large scale would involve nearly removing the monetary reward and management interference factor. And to be truthful, this strategy wouldn't work on a small scale, either. Only large companies with very diverse software needs would reap significant direct benefit over a traditional management approach. Finding developers who craft excellent libraries and beautiful layers is possible, but dictating what they want to work in is not - you can inspire, herd, and motivate interest/passion, but you cannot dictate it. However, on a large enough scale, (such as at Microsoft, Apple, HP, IBM, etc), it's unlikely any creation of very high quality won't find its own utility somewhere.

1. Locate a large number of software craftsmen and craftswomen; people driven by the desire for perfection, who create elegant and artful solutions to complex problems, and have a good bit of altruism. How do you locate these people, you ask? By browsing GitHub, or looking within your own ranks for dissatisfied, despairing, yet accomplished perfectionists.

2. Calculate the cost of living for each person (and their family), and pay them no less and not significantly more. Eliminate the monetary reward factor. Re-evaluate periodically to adjust for family changes, medical problems, etc. Eliminating monetary stress is just as important. I know this is impossible to do perfectly, but it shouldn't be very difficult to improve on the existing situation. Providing accounting and budgeting services to the developers is an easy way to monitor and manage things. You don't want to make money a carrot *or* a stick; helping them get by with less money is not necessarily a disservice.

3. Promise that any patents derived from their code will never be used for offensive purposes, and will never be sold. License every line of code they create under an OSI-approved license, have an accessible staff of layers in case ambiguities arise.

3. Decouple management as much as possible, with a ratio of 1/8 to 1/20 'handlers' per agents. And use your best managers, people that are rockstar coders and were born with enough people skills to charm a gargoyle. These people are already good at self-management, or they wouldn't be creating high-quality work on their own. But looking 3-10 years ahead, determining what layers will be needed, and inspiring them to work on *those* projects is not a task you should assign to any but your best.

4. Evaluate projects every two weeks, to help keep them on track, or suggest a deviation if they need a break. Handlers serve more as counselors than managers.5. Evaluate individual suitability for the program every 18 months, or sooner if requested by the individual. Provide an easy path into and out of the program; this will increase employee retention rates and allow developers with good foresight to save the company's collective behind occasionally, and also permit agents with flagging interest to return to the 'standard business environment' without repercussion. 6. Encourage collaboration between agents, but do not require it. Require good code readability, good documentation, and well-focused unit tests, such that an project can be picked up by another developer within 3 weeks. Allow agents to act as coordinators if their projects achieve sufficient popularity and the intrest of other top-tier devs.

This is not a small-scale or short-term strategy, nor one that can be employed on people that aren't already in the top-tier. However, I suspect it will attract a *lot* of top-tier talent that would otherwise be inaccessible to a large enterprise. And I think it would eliminate the talent loss that seems to be occurring everywhere.

Many of the best developers are driven by desire for immortality - they want to write code so elegant, so reusable that it never dies; layers so perfect they are never replaced. Find a way to channel that desire, make that code a possibility, and you can solve a lot of really hard problems with a very small amount of cash and a few high-quality handlers.

I would suggest moving to Google's ecosystem. Use Picasa on OSX, and auto-photo upload on either Dropbox or Google+. Use Google Docs with Google Drive instead of Word. My philosophy: Web 2.0 apps work.

Change and stability are mutually exclusive. Rapid innovation is in demand so stability often suffers.

The life cycle of products and companies is drastically shortening. There is less incentive to polish products and more incentive to keep releasing new ones.

Companies get wildly successful or die in 3-5 years. iPhone was released 5 years ago and turned Apple into a behemoth. It doesn't matter if every feature in Nokia phones worked perfectly. Apple evolved and Nokia didn't.

The society doesn't require better software. It constantly requires new things at the price of reduced quality.

It's not a development problem. No one cares, so everything is broken.

I haven't connected my iPad to my PC for about 8 months because the word "synchronise" has started to scare me. This can't be normal. As for memory management on my HTC Wildfire S phone - well, I'm at a loss. Doesn't Android have virtual memory? Why can I open images with 3rd party apps but the built in gallery won't let me because of oom? Why does the interface talk about "storage" when I think it means RAM (I have plenty of storage)?

i use two anti-virus programs: MSE and AVIDS (from BELL Canada, a.k.a. Sympatico) from time to time both find the same virus (giving it different names) ... it never goes away ... i'm sure i'd be told i'm guilty for my own re-infections but i'm guessing i'm not -- the virus is NOT today's latest ... it's several years old.

Microsoft Outlook 2010 ... my .pst file i've named "iHateMicrosoft" which says it all ... i was perfectly happy with Outlook Express a.k.a. msimn ... at least for me, Outlook 2010 usually closes and opens cleanly (most of the time). really, the file extension should be .pis for personal information store and also because one almost certainly end up .pis-toff at it.

i'll quit now because i do not want my comment to be longer than your post ...

The mixed/cross platform bugs are among the worst. There is often low or negative value placed on making your stuff work well with the competitor's stuff. It is seen as a chore, or a tax, or un-strategic. Even when the customer benefits are recognized, it can be very challenging to coordinate technically with a competitor. Cross platform issues receive limited development resources, testing, and support. When problems arise it's easy to pass the blame. So as an end-user you see frustrating bugs that no one takes ownership for and never get fixed.

For example: Apple bootcamp + Windows 7 x64 + Lion: In June '12 I upgraded my MBP to OSX Lion and it silently wrote a new recovery partition over the first several hundred MBs of my Windows partition. I won't soon forget sitting down with an Apple filesystem engineer at WWDC and hexdumping the top of my Windows partition to see it no longer started with the NTFS signature! I later found that this catastrophic data loss bug had been reported many times in Apple Support forums for almost a year before Apple's latest OSX installer wiped out my filesystem. But in that interval Apple apparently did not bother to fix it, did not even deign to add a bootcamp check or warning to their installer. This was not an esoteric scenario, nor did Apple lack resources to catch it in testing or fix it promptly after the first reports. Rather, their actions (inaction) reflects their priorities here.

In such cases, Carl's idea for a central public wall of shame has merit.

I'll begin by agreeing that the failure rate of computer hardware/software is incredible for a product with its price point.

For example, you can buy a new computer that will routinely f-up, or for the same $2K, by an old but highly functional used car.

Not only is there no doubt which one will have fewer problems, the problems the used car has will not be catastrophic. They'll just cost money.

On the other hand, a misbehaving computer can trash your disk, overload your network, become a zombie in a botnet, overload peripherals, etc...

As to what the problem is, I'm reminded of a saying I've heard many times in the software development process:

There are four key factors in software development:1) Budget/Resources2) Features3) Deadline4) Quality

It is an inevitable fact of nature that management can only choose three of the four factors.

Nearly every software product I've been involved with has had management choosing the first three factors because budget, features, and deadline are critical to a business's success and easily measured. Software quality is hard to measure.

Tthe more management focuses on budget, features, and deadlines, the less time there is for testing. This reduces the number of known bugs and, ironically, gives the appearance of better quality.

Focus on the first three also forces engineering to skimp on testing, ship products with serious, well-known bugs, delay rewriting and refactoring of code to make it more stable, etc...

As a comparison, my first "real-world" software position was a summer internship for Grumman working on revamping the F-14. More than half of the development time, before a single line of code was written, involved designing requirements, specifying tests to meet those requirements, and writing those tests. The even put an actual cockpit of an F-14, along with a giant computer system to simulate flight, into the testing lab.

Suggesting this level of testing to a software manufacturer would surely evoke laughter. In the computing business, extensive testing seems to be replaced by a mad-rush to the finish -- sometimes even requiring the movement of QA to development to meet deadlines.

While having an exclusive contract and being paid cost+ leads to waste and even criminal activities, it does have its advantages..

I think that we, as software engineers, took a wrong turn somewhere about 2004. We had grown up suffering from brittle, procedural spaghetti code. We knew that it wouldn't scale and it wasn't maintainable. And we were sick of looking at the same old winforms applications. We were intrigued by smart phones and tablets (yes, there were Windows based tablets then). We knew that thick client applications wouldn't scale, and that object oriented design was a better way to handle complexity than procedural programming. So we invented n-tier, thin client computing and we founded it on OOD/OOP principles.

It had some issues early on. We wanted rich client-side interactions that a pure thin-client browser could not deliver. We wanted asynchronous requests with lazy responses that http simply could not deliver at the time. But I think when the going got tough, we abandoned our principles in favor of features and quick solutions.

So today we have thick clients again, albeit implemented in the browser using a scripting language that barely supports OOD/OOP (yes, I mean JavaScript). Spaghetti code is back with a vengeance. Only now it takes the form of ajax calls to arbitrary service interfaces over unreliable networks. We talk about domain driven design and the SOLID principles, but in reality about 80% of the code we write is just crap. It can't recover from a failure, it breaks if the implementation behind its interfaces change even slightly. If you don't believe me, open up any MVC sample and try to find any evidence of software resiliency, true separation of concerns, portability, or consideration for reuse.

I think we need to start thinking about this whole n-tier problem again from the ground up, because what we have now is not going to work for complex, enterprise class applications over time. Most of all, I think we need a true object compiler for the browser and design, coding, and testing paradigms that cross the server to client boundary seamlessly, so that we can enforce software design quality from end to end.

Software will never be perfect, but you're still right in assuming it could be better than it is.

There are many different areas to look at for improving future work. It's easy to get stuck on the first one, which is the developers themselves. Sure, it's obvious if they wrote perfect code, everything would be perfect, but that's an unreasonable view to assume the fix is you just need better developers, because that's an even more complex problem than saying you just need better software. It needlessly simplifies everything and ignores root causes while providing no real solution.

What we need to ask, is how could we encourage a better average competency among developers, and how can we remove more of the impediments that require developers to not just be good but superhuman.

Training is always an idea, more might help, but there's already enough to show it can't in single handedly solve much.

Being more selective is a good question. Do we really need as many developers as we have? Or would be better off removing or redistributing such that good developers aren't cleaning up messes of green or nearly incompetent ones?

Oh sure, that might help, but who would do this selection? Managers would be the obvious answer, but we seem to have an epidemic failure among software management of the ability to evaluate performance of developers.

The few really good facts we have on what allows developers to perform at their best are ignored not just occasionally, but almost entirely. Arbitrary deadlines are the norm, despite evidence that they always produce lower quality results, and often take longer too.

Fiat design, handed down from management, is the norm. This despite the obvious knowledge that few people will be both expert in design and in managing people, thus leading to a predictable failure in one or both of these inappropriately married roles.

And last but not least, the mixed messages provided to developers on the importance of quality in all aspects. You're very unlikely to have a quality product if you don't care about the quality of your code, about the completeness of your tests, the health and well being of your developers, or your communication practices. Yet over and over messages such as schedule at all costs are transmitted. Even when a message such as quality is simultaneously stated, the damage is done. At best, after some confusing the schedule message is ignored. At worst a team vacilates between one side and the other, constantly screwing up their code, only to then lament at their inability to fix it (and spend a lot of time talking about what's wrong and how they can't fix it, while never actually fixing anything).

I feel your pain Scott, but I'm more inclined to blame it on Sturgeon's law. I think that, in this case, it just gets exacerbated by the fact that software is now the human made object with which we interact the most.

It's certainly a pessimistic view on my part, and I honestly hope that I'm wrong and that there is a way out of this mess.

Miguel

Monday, 17 September 2012 17:50:22 UTC

Speaking of the Skype UI, MS isn't doing itself any favors with the latest beta:http://community.skype.com/t5/Windows/Two-big-chat-problems-with-Skype-5-11-beta/m-p/1047232

rick

Monday, 17 September 2012 17:51:17 UTC

The one that always gets me is iTunes (on the PC). Over the years it has wanted to "organize" my library, or I've imported albums from CDs that I already had (but forgot about), and wound up with 2 copies. Or I'll move songs out of "My Music/iTunes/Whatever" up into "My Music/Whatever", and iTunes doesn't catch it. So my whole iTunes collection is about 30% duplicate songs. Sometimes it's because there's 2 copies of it, sometimes it's because it got "organized" for some reason (by myself or iTunes or who knows what) and 1 of the entries is pointing at a non-existent file. The latter is easy to fix by refreshing the whole thing (delete everything from iTunes, then reimport it all) but the former will be sitting in the guilt piles of procrastination and apathy for years to come.

Maybe one problem is too many of the same products for the sake of promoting ecosystems. In a alternate universe, great software would all talk to each other using some standard and devices would be easier to investigate and understand. But in this universe, everything is locked down and we have dozens of solutions to the same problem. like chat. How many chat clients do we really need? wouldn't a file system on a phone be a nice thing? how about a command prompt and rich community of script authors solving problems? We are stuck with gadgets and tech support and they already got your money, so no, they don't care. Worse is people who do care and could help have no way to do so.

And then there is the "testing is for wimps" retort I heard to chuckles the other night in a user group. Testing in general is still rarer then you might think, and way down the list of things to throw money at. It's all about the money these days. I'm not sure when that happened, but I think it started around 2008.

I've thought a lot about this problem because I unfortunately have the skill of finding bugs in software that other people don't.

It's rare that I use a piece of software and don't find an obvious bug in 5-10 minutes that should have been a show stopper.

I compare this to my hobby: cycling. I have extreme confidence in my tools. I've learned to tune my machine to prevent failure. When something does go wrong, I can fix it without taking it back to the manufacturer. Often, I find a problem and learn how to fix it, thus preventing the problem from happening again in the future.

Software is not like this. The user usually cannot fix problems in the software (even in Open Source software). Tools change so frequently that new skills must constantly be acquired and then lost to make room for different ones. I'm in online education so I profit from this, but it still frustrates me.

The most frustrating thing to me is perfectly good features that are removed from software. In Open Source software, there's a need to release new versions that are different from the previous ones, even when there's no noticeable benefit or functional improvement.

I want software that works like my bike. Serviceable, reliable, consistent.

First, I love the self-correction of "literally" because up to this point, I literally had no idea there was an issue with it.

Secondly, regarding the issue at hand, I really think that if you boil this problem down it really has to do with the fact that we write software and software is an incredibly complex system.

BTW, just this morning somebody mentioned to me the cliche about "this isn't rocket science" and that got me to thinking that maybe software development today is as complex as rocket science!

Think about all the software stuff we carry around in our heads and look at all the software books on our shelves (as well as our guilt piles) and really consider that maybe people should modernize the cliche and start saying, "it's not like it's computer science!"

Proximity. Remember when all the stakeholders (developers, managers, customers, and users) worked closely together. Not close as in physically. Although that was true as well. But close as in cohesively, communicating thoughts, struggles, etc. throughout the process. Now they don't. Thus the problem.

DaveWill

Monday, 17 September 2012 18:46:09 UTC

In 1999, I used to read the Micronews, and it has a column - "Ask a Pissed off Tester". When I left, that column didn't exist.

Mike T

Monday, 17 September 2012 19:11:09 UTC

This enforces the growing feeling I have that humans weren't actually meant to write software. That it'll be so complex in the future that only machines will be capable of writing decent bug-free software. Humans coding will seem as laughable and ridiculous as a person soldering nanometer scale transistors onto a chip today.

I fear for my livelihood in such a future. :/

Jayraj

Monday, 17 September 2012 19:15:04 UTC

I think it goes beyond just not working to also not listening to a vast majority of people.

Example, Windows 8. I have not met a person who has used it on the desktop who liked it. How are invisible spaces on the desktop that you have to hover over good for usability? Why do I have to hover over the lower left hand part of the screen (and then wait) to see a start tile... why can't they just put the button there. Why do I have to hover of the invisible part of the lower right hand screen to get the charms menu to come up (if my main monitor is on the left, I frequently slide off of it onto the second monitor). This maybe good for a tablet (I love my WP7 phone) but it's horrible on the desktop. Why does alt tab only show the desktop and not all my open apps (if this isn't proof that the desktop is a second class citizen I don't know what is). At a minimum, it should be customizable to metro/vs. desktop view (and I'm not buying usability arguments from MS because I commonly have to go 2 or 3 clicks deeper and out of context to get to common tasks I need).

In summary, Windows failed on the tablet for 10 years because they tried to cram a desktop OS onto a tablet and it was hard to use. They didn't learn their lesson. Now, they're trying to cram a tablet interface onto the desktop. Tablets are all the rage, but seriously, you lose your desktop market and you will be hurting.

- The ASP.NET Development Server with Visual Studio 2010 throws "Out of Memory Exceptions" after 10 to 15 minutes of use on any project (don't have this problem with 2008). - Outlook stops refreshing mail, requires you to manually enter your password which also doesn't work. You have to close it (and Lync) to get your mail to refresh. - My source repository (vault) has become slow to the point of being unusable... the recommended solution is to start from scratch and check all my code back in (thus losing the history). - SQL Express service fails to load on my desktop every couple boots. I have to go into the services and manually start it.

And when is Skype team going to fix the issue that lots of people have with the latest version - a popup that says "Unterminated element!" shows up every now and then. I'm fed up waiting for the new version as the proposed solutions don't seem to work for me.

Seems like a trend is starting up: Write a rant that starts with an iPhone-related problem so that all the iPhone haters will comment. (Note: your problem is probably due to an app, not the iPhone, and the simple fix is to restore the iPhone.) Be sure to include a comment like "Don't even get me started about iTunes."

Then provide more examples of things breaking down without mentioning any fixes, and without any comparisons to competing products (which also break down). Then blame software developers.

The result? Lots and lots of comments, and your blog shows up in Techmeme. (Including comments about how we should all be rewriting source code, or switching to Windows. Give me a break.)

I just read Battelle's rant and it is so close to this one, I'm beginning to wonder about this trend. Maybe if enough bloggers do this we'll all start to ignore them and they won't end up on Techmeme.

How about publishing an article about how to fix some of these edge cases?

It's too easy to point the finger at developers. Being a developer is hard. It requires a cognition for which evolution has ill equipped us.

The problem will only get worse. Gone are the days when one could master C and be a productive contributor for the foreseeable future. The software landscape is now a roiling morass of frameworks and protocols and half-interoperable languages, all with unpredictable life cycles. No one can know enough, and Jacks of All Trades are still Masters of None.

In the same way that casual development results in log files that cannot be automatically processed, so too casual meta-development results in frameworks, protocols, and languages that cannot be automatically analyzed in conjunction, much less in isolation. In a slower world, analysis tools would be scraping the cruft and automating the menial, the weights that make even the smallest software task feel like heavy lifting. And they would be training us in the process to boot.

But they can't much now and they won't much later. Because the problem of software quality is not a matter of complexity, or attention to detail, or the fact that we can't even model heterogeneous systems—beyond their source—to say nothing of analyzing them for "obvious" inconsistencies and vulnerabilities. (In the time it takes to write a useful analysis, the shifting landscape has marked its obsolescence.)

No, the problem is a matter of difficult and unsexy tasks, and what we'd rather be doing. And until that changes, we are left with the status quo: that working software is amazing (and nobody is happy).

Nathan D. Ryan

Monday, 17 September 2012 19:37:02 UTC

Tony Bove - Funny you mention that. I'm actually going through the list trying to fix each one. Hopefully I can help someone.

To boil down my earlier comments: Software management sucks. It's getting worse not better. There are enough talented developers out there willing to do the right thing that we could have all the products we want, and of much higher quality than we get today, but the obstacle is destructive management practices.

That includes focusing too much on schedules and staffing projects with masses of incompetency and allowing no time and providing no motivation to develop competency.

Hi, I fully understand feeling from Scott. However, software (including Operating systems) have become more complex compared to 30 years ago. Sometimes it is too costly to exercise every test case and QA would include critical, but then cherry-pick the other cases. I've seen it in our own internal development/qa. Here is an example: I currently have a problem with my VS 2010 not being able to run a specific asp.net app with the VS dev web server (built-in webserver)--it is just stuck at waiting from response from localhost-- when IE opens. You look at this example and ask well; what are the dependencies? framework versions, vs configuration, service packs (os and vs), environment, MS hot fixes (Kb) on the machine, vs plugins, etc. You check on the web and see some folks having a similar issue--but may not be quite exact, and tried their remedies and did not work. Some folks questions go unanswered and they end up rebuilding a machine. BTW, in my case it is not a problem with the app, because other devs can open the same solution on their machine and it runs fine. This is just one issue, but as you dig deeper, it becomes a wormhole ready to suck you in totally.

Hansel

Monday, 17 September 2012 20:26:51 UTC

Did you say you work for Microsoft?. Sorry to hear that.

Well, the problem is you are giving your $$$ to multiple companies, nobody is happy and want more.

I'm surprised to know that you are allowed to USE Google Chrome, even more surprised that you can even BLOG about it.

The quality of a product depends on the QA team. Developers rely on them to point out their mistakes. So the blame squarely lies on the QA teams.

I heard that Steve Jobs was involved with every aspect of the iPhone. It sounds to me like he was the QA person for iPhone. If we do not like to hear that Steve Jobs was doing QA for iPhone, then we have a problem. QA needs more respect.

I also have a general point to make - we have to stop giving too much respect/importance to the 'process' i.e. software engineering, and start giving more respect/importance to 'people' i.e. developers, QA teams etc. You need great 'people' to build great software. A great 'process' can only be an add-on.

I also sometimes find it amusing that everyone has accepted the fact that the foremost quality that code should have is that it needs to be 'maintainable' i.e. it needs to be written in such a way that, a new developer can look at the code and understand what is going on. That is HR-attrition-economics stuff. Some emphasis should be given to 'maintainability', but we seem to have gone overboard with it. We have to note that, 'maintainability' has nothing to do with 'usability', 'performance', 'design', of an application.

I agree with Brad C.'s comments. The solution is to make everything open source (in an ideal world). Have a uservoice system and a pull-request system so that everyone is heard and fixes are either released or forked.

Anyway, your post did the job (which, I assume, was its purpose). I just fixed an annoying bug which appears once in a while. I knew it was there, I knew it's not going to be hard to catch, but being a lazy developer, I tend to postpone the process of debugging an old code. Now it's done. The quality of bugless software in the Universe is slightly up.

It's the Internet's fault. Before the Internet software fixes required feet, gas, phones people and plastic (disks) to diagnose & fix. Show-stoppers were scary. Now show-stoppers are not scary because the software will just fix itself with a patch or have a Google-brain workaround.

I'm upset. Users need a collective voice for software designers to actually hear them. My lab does a lot of research on this topic, including some new technologies for aggregating problems that users encounter when using software:

Did foljs really do a "you have no right to complain" comment? Really?

I can't really add to this, though I will say it's funny to me to read someone actually list their problems with an iDevice. So often people fawn over the things to a level where I wonder why I have an Android phone instead of an iPhone, only to find out it has the same kinds of quirks.

I do remember one head-scratcher a few years ago with OS X, where the home user folder would just keep growing over time even if the user didn't save anything. It was enough years ago that it became a problem if something was taking up an extra 2GB on a desktop machine. It turned out the culprit was Mail.app, and the way it indexed emails; I don't know about today, but a few years ago they used SQLite. It's a nice library--for those who don't know, it 's a SQL implementation meant to be used as a library, and saves databases to a file--but Apple's index files would just grow no matter what. There were a slew of shareware apps that solved the problem of growing index files, of various prices, and they all did the same thing: they opened the indexes and ran "VACUUM DEFS;"

I seem to remember the excuse being that there was a bug that prevented SQLite from auto-vacuuming, but Apple never came up with a good reason why they couldn't vacuum on exit or when the program was idle.

But, seriously, nice post and I agree. We (developers) have become lazy and our users have become lazy. One problem is that there is really no effective (cost and time) way to report bugs and actually get a fix. Ever contacted anyone from Google support?

Today's moto: "Meh, it'll do."

Colin Mackie

Monday, 17 September 2012 22:34:08 UTC

I gotta add one: iOS reminders are great in many ways, not least of which is the idea that it can use the GPS to remind you of something when you arrive somewhere. This would be great to let me know to buy some meds when near a pharmacy, some bread, when near a bakery, you get the idea.

However, when you choose to be reminded when arriving or leaving a location, it gives you, not the maps app, but the contacts app. It only let's you set a reminder for when arriving or leaving a pre-saved address attached to a contact. It's... I just can't... How stupid is this? I mean, come on! Let me set a reminder for when I drive by the supermarket to remind me to get eggs! There's a GPS, there's a reminders app, there's a map app! Oh well...

I laugh at the people comparing software to buildings or bridges. Hate to tell you, but bridges are built exactly to the minimum level required by legislation and contract. Remember the Millenium Bridge in London?

The building industry is a joke that makes Scott's problems with software seem pretty trivial. He hasn't died even once as a result. Watch some "Holmes on Homes" and tell me that that industry doesn't have the same problems. There's the same conflict between features, price, quality and speed in both industries.

There's a term for this type of problem but I can't remember it. Grr.

Moz

Monday, 17 September 2012 22:49:14 UTC

I completely agree with this article.

To prove the point of the author, Firefox crashed while I was reading it!

Anon

Monday, 17 September 2012 23:01:14 UTC

How about this one: is 2012 and you still can't open two excel files with the same name!

You forgot the best example - Visual Studio 2012's UI is so broken that nobody wants to use it. For the first time since 1998 and Visual Studio 6 I haven't rushed to install the new version immediately but decided to skip it till 2014.

And to your question. Everything is of so low quality because it's a race. Individuals, companies and corporations are not thinking about making things better, they only wish to get ahead of their competitor.

We have reached an enormous speed of software generation (not creation, not development, but generation). You ship it before you test it and it is deprecated before you could go through the first bug reports. This is insanity.

The same actually happens in other industries as well. New hardware is shipped with bugs and becomes outdated before I could read reviews about it.

Basically every piece of software you use is a prototype, a pilot project, it's never going to get finished, because there is no time to make it good. The same with computer hardware. I even wrote about it:

The new culture of entrepreneurship which flourished in the last years polluted the web with thousand of useless apps. Sometimes I wonder who are those people who register with any new service and find time to use them all. How can you be simultaneously on Facebook, Google+, Twitter, Foursquare, Pinterest and dozens of others? Don't you need to sleep or rest? I personally see the current of "apps" going before my eyes and since it never stops or even slows down to glance a closer look at something I sort of let them all go, can't process information at that speed.

I think one part of the problem is that the faults are not immediately apparent, and might not show up at all. When it takes specialised knowledge or tools to even detect the problem most of the time, it's hard to convince laypeople that it's worth spending money detecting and correcting the problem.

With software it's sometimes the size of the thing to be tested, but as often it's just hard to see the problem at all. "uses extra disk space"... so what?

Also, the thing with small software teams is that generally that means the source code is small enough to be understood by one person. So naturally it's easier to spot and fix systematic errors. But I don't think those teams are any more likely than a big team to address larger problems like "sometimes the JRE stops releasing memory, then after a while the device crashes". I don't expect the programmer from some random java app to fix that issue, OSS or not. Even though it only starts when I'm running their app.

Personally what I face quite often is a sprawling codebase that's not understood by anyone who still works in the company. It's big and fragile, and different people have learned about different parts, so any change is fraught. It's like the architecture tour I did recently where the engineering manager said "see that giant nest of pipework? We're ripping it out and starting again because no-one knows which pipe does what any more. The problem became critical when the asbestos insulation on some pipes started falling apart".

Moz

Monday, 17 September 2012 23:49:48 UTC

It's a combination of things.

Firstly computers are no longer algorithmic. Your computer (device/system) is always in some state. Software interacts with this state and with other software. It's a mess.

Secondly from my experience people seem to care more about looks and cool features rather then quality and raw, everyday work features. At least when they buy stuff. It kicks them later... This is probably because there is a lot to choose from and we don't care enough to spend too much time searching and reading.

Nux

Monday, 17 September 2012 23:55:45 UTC

Hi Scott,

At the end of the day, if there are cracks in the walls and the building is wobbly we have to look at the foundations. To a certain extent the fact that so many test artifacts are produced and so much goes into software QA and buggy software is STILL released by enterprises -- bugs that gnaw away at usability until the product effectively rots -- suggests that the way we write software and what we write it on has become a spaghettified mess.

I find the following article cathartic reading now and then, for putting a finger on what has gone wrong with the software world since the 1980s. At least then, in theory, one developer could know a machine to the metal.

http://www.loper-os.org/?p=55

While it's true that languages, libraries, and hardware can inhibit development, I suspect that the problem is ultimately one of will and imagination. The great thing about the early days of personal computing is that the future wasn't certain and people were willing to experiment with hardware, with languages, and with architectures to get a piece of it. I don't think the will to go back and reinvent is there anymore to the same degree.

Modules, libraries, and object-oriented programming have enabled us to pile structures on structures to build things -- but the resulting structures are, like Alan Kay has said, more like Egyptian pyramids than Gothic cathedrals.

I don't offer any solutions -- just sharing your frustration!

Iian

Tuesday, 18 September 2012 00:14:10 UTC

Yay. Someone else admitting to be a technical black hole. It still doesn't work but I no longer feel alone. Crisis support for the battered it user!

I have a bit of a different perspective on this. I run the quality assurance program for a product that absolutely positively must work every single time. No excuses, no exceptions. There are well-known solutions to guarantee few or no defects (see DO-178C or AS9100C), but they come at a very high cost. Part of that high cost is generally that the product has the smallest feature set that gets the job done. Most customers aren't willing to pay for quality at all, let alone quality like that.

But you'd better hope that the software flying the airplane you're about to board was developed like that.

Successful systems get more complex not less. If you switch platforms to a product with fewer features/less complexity you might experience fewer problems. However, the new product will eventually get bloated.

Systems are like closets, except they can only handle so much complexity instead of stuff. The complexity in a system rises to it's carrying capacity. New features must be balanced with a reduction in complexity or the removal of older features. When does a system ever drop a feature?

This is probably been stated by someone else at some other time, but the what the heck, let's call this principle the Childs Law in the slim chance someone hasn't said it better. Childs Law: 'Complexity rises until the system fails.'

Simplicity isn't a feature. Reliability is a feature. There is a strong correlation between the two. However, it is difficult if not impossible to add simplicity to a system. One can add features, but one can't add simplicity. It's usually easier to just start over. Of course, then it is hard to call it the same system.

justin

Tuesday, 18 September 2012 01:27:58 UTC

You should get an Android phone ... you'll probably end up with a gun in your mouth after about 3 days of trying to operate it.

I think the solution is to develop software in Node.js. No more complicated networking and sync problems as it is blazing fast. Also no storage problems as all is in RAM.

Use such open standards, we shall lead the world of software from the mire of conflicting implementations.

User

Tuesday, 18 September 2012 02:22:52 UTC

I know exactly what you're talking about. In college I was a huge Linux user. In the work place (and to play games) I had to use Windows and after I made it through undergrad I finally purchased a MacBook. All three operating systems suck, to different degrees and in different ways. I currently use Linux for all my development. I use to like the direction Mac was going up until Lion which destroied all usability in Spaces/Expose.

All languages suck (although PHP and Perl are complete cluster-fracks in bad design patterns) and anyone who is a zellot for any one language is someone you should worry about. Currently I love working in Python, Scala and Groovy.

So many comments and such a true subject. I won't read all of them because I can't. To digest every one of these is going to take hours. Even to scan through them will probably take an hour and that's time I don't have. This is one problem.

The ecosystem that we've built up and learned to live with is at the heart of a lot of these things, and I might go out on a limb to say it's the entire cause. It's not one piece of software acting up. Or Microsoft and Apple together on one machine. It's the combined junk from everything all running together co-habitating but not in a nice way.

Take one piece of software. It goes though a lifecycle. Code is written, scenarios are dreamt up, tests are performed. Lather, rinse, repeat. A software release of fair quality is put out there and it becomes integrated into the collective, your computer. Your computer that runs a bevy of other software, drivers, utilities, that probably nobody else runs that combination. Your computer that combined with it's hardware and software produces one of a million combinations where only 10 or 100 combinations were tested in the labs before the software got out into the wild.

Think about the ecosystem of society. Legal, financial, social, healthcare, municipal, federal, real estate, transportation, technology. It's complex. Nobody can draw a picture of the world because it's gotten to be so large and grown in so many dimensions that even when you look at it, it changes.

A computer system running a single OS already starts off as a complex society. Dozens of drivers and services running, interfaces to hardware, memory, SSDs, hard drives, CD-ROMs, Blu-Ray, USB, monitor, etc. Layer on top of that more services and memory resident programs and drivers and applications. Layer onto the hardware compatibility services, messaging buses that communicate to other services and make use of the Internet and all the communications protocols that entails. Layer onto that software that continues to run in the background and all the complexities of task switching, idle processing, sleep and wait states, hibernation and restoration.

That's a lot going on.

Now toss a single wrench in the middle and watch so many of the pieces break, either directly or indirectly.

Now multiply that effect 10 times across your entire system.

You now have a day in the life of your computer. It's no wonder things break as they do. I sometimes am amazed some of this stuff even works at some (and many times it doesn't).

IMHO it's not one thing or even a combination of things that causes this. It's the entire collection of *stuff* and how it all interacts. Many times in ways we have no idea how, let alone debug and fix some of this stuff.

Yes and yes. It's all broken. I run into this stuff all the time - different stuff, but same idea. I'm a developer... my personal universe includes a number of Windoze machines, some Android goodies, and a new Macbook Air which hasn't had a chance to disgrace itself recently.

At work, use Java EE (ugh!). I find myself creating stuff that can't work robustly, because of constraints put on by management or poor architecture choices.

On the side, I do embedded work in C with marginally acceptable tools from Microchip. My embedded stuff does work, because it really, really, really has too - but the embedded software in my new 60" TV, every DVR I've ever seen, and my blu ray player was all done by baboons, as far as I can tell.

I do Android app work (Radar Alive Pro is my first), again with marginal tools (the Mac in the house is partly here in hopes that Android device driver issues in windows won't happen on it).

I think that fundamentally, the world is just moving really fast. People want new and more and quality of software is down the list a ways (or, by now, most folks are beaten down by the lack of it and unconsciously just assume everything will be hosed).

One sad thought is that technology management usually imagines that they understand this stuff, and maybe, somewhere, they do.

What's scary is that really important stuff is probably in just as bad shape - infrastructure systems, for example, or banking. How about nuclear early warning systems - you do know that the US and Russia are still at launch-on-warning status, right? And even the thought of software, developed under high pressure, doing high speed trading should make everyone take all their money and hide it in their mattress (currency or gold, your choice).

John Moore

Tuesday, 18 September 2012 06:05:10 UTC

@Chris Poland - Windows 8 doesn't work the way you describe. I think when you actually use it you'll find it's a lot more intuitive than that. For instance, you absolutely never have to hover in corners. That's only if you're first learning the system and need the hint, and even then the hint appears *immediately* with no hovering.

To go to Start, you just throw the mouse in the corner and click. No hovering. It's the exact same motion you did in Windows 7 or earlier (unless you made things more difficult than was needed and actually make the effort to target the old button). There is no easier thing you can do with a mouse than click a corner of the screen, and it works *anywhere*. You really can't beat the usability of that.

How do we fix it? One word: pride. Either find it or find another industry. There are far too many programmers and QA in the industry because "IT is where you make money." This is the net result of that.

To be honest, what I find strange about some of the 'oh why aren't you using OSS' comments is that OSS solves nothing in this regard. OSS is no better in terms of quality, it has bigger internal flamewars, and it still requires enormous technical skill to actually fix anything (or, more importantly, find the real problem to fix in the first place). OSS developers seem to think that everyone can just grab a code editor and fix problems. That's what got us into this mess in the first place!

Building quality into software is hard & requires passionate people who know the domain in which they are working. It requires diligence and consideration of 'so what if' scenarios, and we just don't have the language constructs to simply specify good code. It's too easy to write poor code, code that works for one given test case but nothing else, and how many of us have spent days/weeks/months reinventing the wheel because of some arbitrary reason (usually because the existing wheel isn't quite the right colour)?

I have had the privilege of working in places where developers genuinely care about bugs and fixing their code, and also watched as this is eroded by the addition of developers who just hack code until it passes a unit test, and managerial practices that don't care about quality at all. If it's not a shiny feature being shipped, it doesn't get onto the roadmap. Fighting tooth & nail to get time allocated to write proper unit tests or fix an architectural problem wears you down when the manager is always saying 'but what business benefit does this give us?'. It reduces motivation when it's more vital to have a pretty interface reinvented every year (*cough*Visual Studio*/cough*) than actual performance bugs addressed.

I understand where they're coming from - today if you're not first to market with the latest & greatest, you lose out, and that has real job consequences. It's just not conducive to good quality software. I guess it's a question of whether we still seek to be craftsmen/women, or just paid to do a job.

It can change. It has to start with the users though. I remember an anecdote (which may or may not be true) about how 3DS Max had become so buggy that the users revolted and told Autodesk 'please, just fix the bugs'. They had two years of releases where they just fixed crashes & improved performance. How many of us would wish for users like that?

Jeff Hotchkiss

Tuesday, 18 September 2012 08:28:38 UTC

Excellent post,though it came up twice in feed ;)

On a serious note, Scott you are absolutely correct in noticing and voicing concern about it. Somehow people have just got used-to of expecting apps/website to break just like they expect London buses to be late. Another reason for this is related to tendency of alpha or pre-beta or beta launches of products when they are just not ready for being presented in show.

Solution for this is same old-time quality testing. There are no silver bullets. We need to give due attention to quality assurance and control process in order to give better apps and websites to world.

I just said to my wife the other day, "you say I'm a perfectionist. I say you're used to garbage work from most people. Very few people turn out quality any more."

The argument about scale is bullshit. That's like telling a professional engineer (not some half baked software "engineer") that every second bridge he designs can have a few flaws because he needs to scale his work.

Tym

Tuesday, 18 September 2012 08:59:00 UTC

The majority of the software you are complaining about comes from two companies, MS and Apple. Avoid their crap software.

Colin

Tuesday, 18 September 2012 09:02:01 UTC

Everything is always broken. As computer professionals we work with [largely] deterministic systems, but the world in which we live is not deterministic. It is complex and chaotic.

So any complex software system will almost by definition be imperfect to some degree. The issue of how large that degree is one of economics not computer science.

Microsoft (and every other software company) as you know has to balance the cost of fixing bugs against the benefit gained. Microsoft's Connect site sees this often:

We have to prioritize the work we take on based on customer need, return on investment, and the limited resources we have at hand. While we understand the logic and sentiment behind the suggestion, it isn't a feature in our mind that provides sufficient value for the effort and resources it would take to implement.

Howard

Tuesday, 18 September 2012 09:02:49 UTC

Hello Scott,

When are you going to give up on the filth that is Microsoft and move over to the light? :)

I like the comments from people saying that "most of the software mentioned is from Microsoft or Apple."

That's true. Because Scott primarily uses software from Microsoft and Apple. If he was using OSS, he'd encounter the same number of issues, if not more. I know I have, each time I've used Slackware, Ubuntu, or any other *n*x.

That is to say, when they work, and I can find drivers for all of my hardware devices. It took nearly a decade to get support for my wireless chipset.

K

Tuesday, 18 September 2012 10:11:35 UTC

(Oh, and for those who say they won't use VS2012: It is miles faster than any previous version of VS.

Even though I have to restart it every ten minutes because it hangs, it *still* helps me get work done faster than 2010)

K

Tuesday, 18 September 2012 10:30:11 UTC

nothing like pointing out reality to depress someone.

jride

Tuesday, 18 September 2012 11:39:50 UTC

Amen.

walkerp

Tuesday, 18 September 2012 12:01:41 UTC

Scott, while I am in full agreement with you about the state of software, I think it's folly to believe that this is a problem unique to software that can magically be solved by holding developers to a higher standards. For those that believe that's going to fix things frankly aren't paying attention to the world around them. Building things that work for all people in all situations is a difficult problem. Fixing things that don't work for some people some of the time is nearly impossible. But we're not unique in this.

Take my Toyota van - wonderfully engineered in many ways, but you cannot stand under the trunk and load groceries when it's raining without getting wet. Take my wife's favorite gum - the packaging requires you to pop the pieces through aluminum which is left sharp and jagged and easily cuts you. Take my flat panel TV - it's great except that the form factor is too small for quality speakers, so there's no opportunity for space saving from a CRT if you want quality sound. These are all engineering problems and UX problems. Software is not unique in this.

Humans generally can't build things perfectly, and that's okay. No really - it's okay. Why? Because we're adaptable and can learn from our mistakes. What we need to do is adopt a mentality of continous improvement - from a design perspective AND from a user perspective. And we also need to lighten up a bit and recognize perfection is not attainable. And the persuit of it, while worthwhile, is never cheap. Lighten up.

Let's not forget NuGet!I have NEVER had a clean upgrade. This, from a product that is supposed to manage upgrades.

Each new release produces a multitude of failures and requires I manually uninstall first.

Don

Tuesday, 18 September 2012 12:36:59 UTC

...including the fact that this post appears twice in Google Reader

Jeremy Hadden

Tuesday, 18 September 2012 13:19:05 UTC

Do you all know what impresses me most on Star Trek? Not the unlikely physics or the high level of technology.

It is the level of quality in their products. Have you ever seen a Tricorder reboot, or one of the many great UIs refresh too slowly?

I believe that we still have a way to go, until we have function and quality on the same equal level.

Matthias

Matthias

Tuesday, 18 September 2012 13:33:44 UTC

Software development has become too complex. A good example is WinRT. With development systems like Visual Studio which weight in at over 2 gigabytes, with API docs which rival an encyclopedia and most programming languages over dependent upon OOP, I do not see how one can create software which is maintainable. While OOP has its place, sadly modern programming languages have allowed OOP to take over, adding complexity to software. Having been a WIN32 developer for nearly 10 years I find good old WIN32 code easier to understand than any of the modern OOP based languages. The easier it is to understand and read the code we write the more likely it will be easier to maintain and debug. Lastly, debugging is an art. The human mind is a far superior debugger than any automated software debugger.

With the likes of Alexander Stepanov refering to OOP as a "hoax" (if the quote is accurate), there is some good evidence that not all are happy with the state of software development. To see other quotes of other developers about OOP I have posted a number of them in a blog post ( http://cwsof.com/blog/?p=425 ).

Are you using the apps / software that works or the one with all the bells, whistles and bugs?

Peter Bindels

Tuesday, 18 September 2012 14:18:16 UTC

Like everybody, I enjoy a well written rant and this one is very well done. However, the question which is apparently put to the reader is mostly rhetorical.

Software is doing incredible things for us. Applications are pushed out to the market all the time, for all popular computing platforms, at a dazzling frequency. This is an age of exploration, pushing the boundaries, redefining information technology. Naturally, there are many quirks and 'oopsies', but the overall experience is far beyond what most of us (computer professionals) anticipated just 15 years ago.

I don't think that it's possible to have this rate of innovation and experimentation, without the kinds of problems you've described. I write "kinds" in plural because the sw industry has many issues - old codebases bogged down by backward compatibility (or simply cases of "Boris no longer works here"), groundbreaking code written by people whose technical skills are not on par with their creativity, the urgency to be "out there" before the idea pops up elsewhere and many other scenarios.

So QA is not sufficient, some developers are not committed to fixing bugs, some companies make calculated decisions to ditch an old user base - sh*t happens. Overall, we're living in an IT heaven, data is unbelievably accessible, social tools make the lives of many people much richer than they'd have been just a decade ago, there's an infinite supply of free entertainment, discussions, creativity tools, art, teaching... really, the odd restart or spinning wait icon are way more than a fair tradeoff.

(David *)Frenkiel

Tuesday, 18 September 2012 14:19:36 UTC

software partly sucks because of the way big tech companies treat their employees. The employees are not able to focus on quality with things like reviews, rankings, manager-ass-kissing come into play.

The other partial reason is that 'developers' and 'engineers' need to think like and for the users who are eventually going to use the product rather than thinking in terms of languages, tools, architecture and elegance - they are important, but user friendliness should be the primary focus.

Third reason could be that technology companies are more interested in business than in technology. Instead of focusing on their strong points and niche products, they are trying to do too much.

Gawd... I've even had Sublime Text 2 crash on me, which is loved by most developers, whence Notepad++ never did so... All of this on an ultrabook with 4G RAM, Core i5, Win 7 and HD3000.

Software is truly broken, as you said. But in my opinion, the true reason is that software is too complex, the number of scenarios increase exponentially with each new feature: o(n)^2. At a certain point it becomes impossible to manually test the program, and automatic testing isn't perfect.

Okay Scott, I care. I am a developer and fix bugs on a regular basis. We triage bugs, schedule fixes, etc. and devs are regularly on the phone with internal and external clients working on issues.

You state you've had a lot of problems with various software, and you also state:

I think it's all of the above. We need to care and we need the collective will to fix it. What do you think?

P.S. If you think I'm just whining, let me just say this. I'm am complaining not because it sucks, but because I KNOW we can do better.

Okay, so you *know* we can do better? How would you make this better? You don't really say.

Daniel F. Van Der Werken, Jr.

Tuesday, 18 September 2012 15:01:24 UTC

First off, this has been an entertaining blog, and the comments so far have been great (despite wasting more than enough of my time!).

However, you've listed around 20 defects from, what, just under 20 products? That's no more than 1-2 defects per product, it's hardly what you would call the end of the software developers world as we know it!

There's also the fact that a 'lot' of the problems (as touched on by previous commentary) are down to the amazing number of combinations of running software/hardware, there are probably hundreds of potential things that could go wrong given those combinations.

I guess what I'm saying is that it's not strictly true that standards and testing have dropped across the board, some scenarios are either unreasonable to test (or too expensive to cover) to warrant such an effort.

I would hazard a guess that most software companies either lack the capacity/money or willingness to handle these edge cases, and to be honest I don't blame them, the software I use works 99% of the time, the 1% that doesn't is usually something I can live without or can forgive them for that hiccup.

Writing software today is more difficult than 10, 20 years ago, there's so many platforms, devices and potential pitfalls. In the grand scheme of things I would say alot of the time things work pretty damn well given the circumstances.

Mantorok

Tuesday, 18 September 2012 15:15:11 UTC

Makes me laugh to see Skype UI in your list. I keep thinking that if I just look at it in the right way, it will click and I will "get it". I can't even put my finger on what's so bad about it. Something to do with focus; I can't tell where I'm supposed to find anything. Ah well.

David Dawkins

Tuesday, 18 September 2012 15:32:42 UTC

I have a mysterious electromagnetic force that follows me around and turns traffic lights red on approach, and things like that. Sounds like you have one that affects your hard drives (even solid state ones). That'll cover at least half your list.

Levi

Tuesday, 18 September 2012 15:37:03 UTC

It is a result of Capitalism where products and design are centered around bringing in the most profit. Product and customer issues are irrelevant to the few organizations dominate the markets.

There just needs to be a culture focus on developing the *right* way and sticking to it all the way through to a real product.

Joel

Tuesday, 18 September 2012 15:40:59 UTC

I asked him what he thought of the term 'fraud', and he didn't understand what I meant. I tried to explain to him that if you think a person who has no training at all and you let him 'learn on the job' for a few months, is suddenly able to write any form of software, you're delusional.

Frans, you are my hero of the day. I couldn't have said it better myself. Another related issue I see all the time is when developers, that may even be really good with Java or Win32, are suddenly dumped into .NET and just keep doing it the way they've been doing it. I'm certain it goes the other way as well.

I can always tell when .NET code has been written by a Win32 dev because everything returns bool and has out/ref parameters.

That is the problem, it should not be getting harder because if it continues we will reach a point of intractability and the cost of that will be phenomenal. It is scary when you look at the cost in complexity that just adding one option introduces. Anybody that is allowed to define an API or is responsible for new feature analysis should probably be made to sit through an optimization course before they are let lose :) if nothing else that would slow things down and buy us some time to really sort the problem just by the attrition rate alone.

Paul

Tuesday, 18 September 2012 16:17:08 UTC

"I work for Microsoft, have my personal life in Google, use Apple devices to access it and it all sucks."

hummm so work for MS sucks too , he he, are you sure you are not going to far with this post ?

As pointed out by other readers, embrace open source with a healthy bug reporting and bug fix contribution model.

Godfrey Lee

Tuesday, 18 September 2012 16:31:51 UTC

Great post. Just in case anyone didn't know, you do have to keep making new iPhoto libraries. It's easy. Hold down the option button while opening iPhoto and you can make new ones, switch, etc.

Using smaller libraries makes iMovie work better too...if You also put videos in iPhoto and then pull them into iMovie. If you have ever had your SOUND disappear in iMovie, that's why ~ it happens when the iPhoto library you are connecting it to gets too large.

We're too busy writing code for the 80% of features users don't need, for lack of good specs or just because it's more fun to write. We don't have time to finish/polish and test the other 20% really used...

Marc

Tuesday, 18 September 2012 18:34:31 UTC

We're in a world of get it done fast and get it working later. It's sad. This culture of be first or be no one seems to have cropped up, so we end up with perpetual beta testing and no final product.

If one is diligent enough to get it done right first time, one probably lost any market share that was there to someone who got it to the market first with bugs and then started fixing them.

Your first iPhone problem is cached data. In general, programs do not self-limit working set size for caches. You can identify where the data is living in the settings tab on a per application basis; fixing it depends on whether the application supports constraints/throwing away cache. In general, you probably need to be using a different App or report it to the vendor.

Your second problem occurs when you are using different versions of the Apple Contacts data formats between devices. The most common case comes down to two machines with different versions of the OS sharing a common home directory, but you can also see an interaction with iPhone / iPod / iPad / laptop / desktop for similar reasons. This comes down to the use of SQLite, which is not a real database, and so in general is not arranged to use subschema. Apple has a data-centric model, unlike the Microsoft library-centric model, and so when you need to talk to data, you are talking to an app. In other parlance, it's a lack of separations between model and controller. This is the same reason you can't annotate a song in your iTunes library to say "from 1:35 to 1:55 of this song is a ringtone" without iTunes coming unglued and rebuilding your data indices. Basically there's no graceful upgrade/downgrade for the local copies of the database in the cloud.

Your iMessage problem is a side effect of the duplicate contact information. Resolve that and you've resolved the iMessage problem.

The Outlook problem is specific to the model Outlook uses. Instead of fully validating container objects, which would require downloading the full container, it starts assigning meaning to the data while it's in flight. This has the effect of immediate gratification, since it can start rendering the messages immediately. For content-transfer encoded MIME data, that means two things: (1) Malformed data can crash Outlook, and (2) Security is poor: malformed data can be easily used to attack your system with local code execution exploits. While a lot of work has gone into patching exploits, there are always new plugins and MIME types which result in more problems. External renderers are the solution the iPhone chose; there are other equally valid solutions that would prevent problems, intentional or otherwise, but which are not implemented. Most companies tend to rely on their mail servers to massage the data to avoid the problem, but that's just a spackle-it-over solution.

The iPhoto Photo Stream issue is, I think, a misunderstanding on your part. No photos will be kept past 30 days unless you save them to your local camera roll. What that means is that if you take photos on an iPhone, and then go back and look at them on some other device, there's going to be more photos on your iPhone after the 30 day limit because they are in the local camera roll, but the other devices which only access them via the Photo Stream will only have the last 30 days. This appears to be a confusing point for a lot of people who expect that their photos will instead be replicated to all of their devices ("Synced") instead of merely streamed (Photo _Stream_, not Photo _Sync_).

The Outlook outbox is all about Outlooks broken offline model. Mail.App does both better on this, and worse on other things. Frankly, most mail programs these days are underwhelming unless you are willing to run older programs. If you use Mail.App, for example, you'll definitely want to disable presence notification, especially if you have a lot of mail, since it will be blinking the green dot on and off for all the messages, not just the ones in your viewable scrolling area.

For GMail slowness, all I can say is that it has major assumptions about two things: (1) JavaScript is fast, and (2) Flash is available. The second is there for a relatively stupid reason: It's a hack to work around the copy-to-pasteboard, which for security reasons is not permitted to JavaScript. So they route around the problem by having some things written in Flash. At a guess you are accessing GMail via IE9 rather than using Chrome with the VP8 JavaScript acceleration. FWIW, it's possible to kill off the slow components by telling GMail to use "HTML Only", which will restore a lot of speed. I'd recommend avoiding using offline GMail.

Can't help you with Lync.

The Final Cut Pro issue is running UI in a plugin thread which is not the main thread. You need to seriously consider not running the plugin. Meanwhile you should report this to Apple, since there will be CrashReporter logs. They may not do anything about it (when I was on the kernel team at Apple it took moving Heaven and Earth to get them to stop using a deprecated API), but then again, they may surprise you. These people generally care about good user experience and stable product, when they are made aware of issues.

No idea on your Calendar. Typically this type of thing follows from a Corporate LDAP server that puts up iCal records for everyone in the companies birthday, but couldn't tell you for sure.

iPhoto being unusable with a lot of photos probably ties back to your address book issue: I expect that you are using an older version of the OS on one of your machines. My understanding was this was fixed in a more recent version by doing cell-based rendering so as to not try to render everything, even if it's not user visible in a scrolling region.

The Word documents are probably a version mismatch; the easiest thing to do, if they are not confidential, is to use http://www.zamzar.com/conversionTypes.php to convert them to an older version of .doc. This may not work for you, it really depends on the root cause of the failure. The typical response when you have this issue, if it's in fact the machine you used to write them in the first place, is to do a "Repair Install" of Word, which will fix any plugins and will fix and doc type associations.

Web site browser lockups are a common side effect of adblocking software and of URL rewriting software; make sure you are not using a proxy you did not expect to be using in your browser. The adblock tends to fail if they use an onLoad clause to verify their ad has loaded, and you've blocked it. This is typically a coding error in the adblock software.

It is a tax for the "Deliver In Time" approach. The developers are forced to release the stuff in time, because the time and budget is restricted and the management gets nervous as there is already some other work waiting behind the door.And moreover, the whole bugfixing chain is broken:1) Users have no easy way to report bugs.2) When they get such a way, they do not use it.3) When they already report some bugs, these bug reports get lost in some big pool. It is not uncommon to see several years old reports, in both open source and proprietary applications.

I don't see peoples obsession with turning on every setting and customising every detail. People always seem to want more than what something is capable of, just be happy with what something does well! (These people I refer to are family and friends btw)

Also, common sense.. so what if Final Cut Pro crashes while saving if you scroll too fast - scroll slower, then!

Adrian

Tuesday, 18 September 2012 21:23:35 UTC

I completely agree with all points made.

Last time I discussed this publicly, I was laughed at, insulted and dutifully trolled out of the discussion...

Christian Sciberras

Tuesday, 18 September 2012 21:28:45 UTC

Software development today is harder only because we let it become harder. Programming languages have become cryptic. Rather than make coding syntax easier or libraries easier to use, they are more complex. Having been first exposed to programming in the late 1970's and then really getting deep into it in the mid 1980's, I have seen how we have grown from the early home computers, to CPM, to DOS, to 16 bit Windows, 32 bit and now 64 bit Windows. Writing full blow complex UI's in DOS , limited to text only, now that was not easy. We had to build our own menuing systems, windowing systems, printer engines from scratch.

Now I thought Visual Basic was great and it was easy compared to programming in DOS. I moved on to pure Windows API programming, while the world went crazy about dot.net. Didn't work with another Microsoft language for a decade (I use a non-Microsoft language). Recently tried to play with the latest Visual Studio so I could try out building Metro apps. It was an absolute shock to the system. Definitely not easier ! The minimal OOP in VB for GUI stuff was great. Now everything is an object and coding is a nightmare. Can't see how anyone can write maintainable code anymore. I think the development tools are broken.

You pay your money to buy a piece of software and install it on your machine only to find that you need to update it every so often so that the company who released the buggy product gets a chance to cover their faults and you say "Thank You" for that.

How would you feel if you have to take your car to fix its issues to the dealer every month? Unlike software, whenever there is an engineering problem in a car design it becomes a major news headline. You stop buying that car or even that brand.

NB: Myself is a software developer and I believe that software can also be just as perfect if we get enough time to finish it up to our satisfaction just like other facets of engineering.

TPMonkey

Tuesday, 18 September 2012 21:47:26 UTC

The answer is simple: No one cares about quality, since quality is invisible - thus development time is spent on quickly introduced fancy new features and glossy (dis-)improvements rather than taking time for profound development.

Interestingly, the bare-to-the-metal software is way better in this respect (e.g., file systems or memory/process management are hardly flawed). But since all the user actually sees is the broken chrome sitting on top of it the overall experience is spoiled nevertheless.

I have not been able to successfully run the DevFabric emulator from the Azure SDK 1.7 in order to debug my apps. Used to work ok in 1.6, then started breaking, so we upgraded to 1.7, still no good, so I upgraded to Win 8 clean install...still no dice.

It keeps thinking my web roles are not running in an initialized role environment, so calls to get cloud settings don't work - e.g. can't get a storage account to retrieve blobs.

Software is broken because the fundamental abstractions (files, processes, text, etc) are not that helpful in creating good software fast.

Most of the code in a modern application is about how to manipulate those fundamental abatractions into something that can be used by the program; tons of code for parsing raw text, xml, json, etc into objects, tons of code for making programs talk to each other, tons of code for persisting data into organized data stores, tons of code for presenting the data to the user....and within all that, a little bit of code that is actually the application's features.

Steve Jobs said, when asked what was his goal with NextStep, something along these lines: 80% of what each application does is the same from application to application, and he wanted to move that to the O/S, so as that writing applications would become much easier and shorter.

Achilleas Margaritis

Wednesday, 19 September 2012 10:29:38 UTC

Sounds like most of your problems point towards Microsoft or Apple.Ditch those and life will be a whole lot simpler.It's a shame having things you don't "own"...

I've been told that hen you contact Autodesk support because of problems, they always ask "When did you last reinstall Windows?". If it's more than 6 months ago, they recommend reinstalling your system.

My own experience is the same - Windows become more and more broken over time. Therefore I restore my system completely every 3-4 months from an image made from a freshly installed system. Sometimes earlier if something seem to me messed up.

Which I believe is why I generally have very few problems with anything, despite my system is over 60 GB with hundreds of programs installed.

rado

Wednesday, 19 September 2012 14:15:26 UTC

I love this post. Sometimes I feel like virtual machines were invented for this very reason, isolating problems from one program affecting the whole system, and allowing snapshoting so you can restore back to a working program. Unfortunaly half of everything is a service in the cloud now, so no such luck.

I'm looking for a pattern in all these issues. It seems like cumulative data entry has failed. Duplicate contacts, missing space, and failing connections, are all settings and data that became problematic from some other "helpful" data entry system. Maybe you upgraded the program, or ran an import wizard, or whatever, but over time, the data become valid to a schema but not logical to it's intent. I have the Birthday calendar problem too. The issue isn't that it has automatically imported all the facebook birthdays, the issue is I can't remove them easily.

We need more Admin modes or Admin-type cleanup tools. This is basically why we've been mucking around in the registry for the last fifteen years. And as far as doing something about these issues... We have blogs where we can point them out and hope that others have already found the answers. Now we just need to make sure the vendors read our blogs and all answer their emails.

Ben L

Wednesday, 19 September 2012 14:47:47 UTC

Scott,

I believe that this issue is timeless: If I own a cow, the cow owns me. You'll find analogies to this very issue since people started keeping a history.

I know we can do better, too. But we have so many cows today... and where shall we spend our time?

Regards,Jonathan

Jonathan

Wednesday, 19 September 2012 15:20:04 UTC

Here is another story from something that might be closer to you: Windows Azure. I had an account with my Live ID (ah, excuse me, Microsoft Account ID, whatever). That ID is a Live Custom Domain Id, it is my main ID I use for all MS service. Overnight, I couldn't login anymore. I contacted support, and they tell me that they will not be able to fix this because apparently custom domain live ids don't work with Azure, from now on. Seriously??

Crazy, crazy, these things.

davidacoder

Wednesday, 19 September 2012 15:37:24 UTC

Scott you need to get a grip and stop being hysterical. Your basic problem is that you are using poorly designed propriety software. As such you are making yourself dependant upon the help-desks of the companies who produce this technology, but which act rather as the first line of defence. My advice would be to research technology options further a field where large and helpful communities await your applications for assistance in troubled times. Good luck.

Felicity

Wednesday, 19 September 2012 16:48:05 UTC

I think the problem with software development is multi facetted, there are many reasons. However, I think we have ended up with an evolving too complex system based on too many pieces not under the developers control. To make it worse the fragmentation of the industry and OS creators including Microsoft has pushed development into the Web sphere where one has to spend 3 times as much time on average developing software using too many complex tools. Just think of it: HTML, Java Script, jQuery, various security API's, C# or VB, Webservices, AJAX, SQL, Database Access, the list goes on. What we need is one common development platform and new OS platform that is greatly simplified. Then we can get back to creating clean code. Ofcourse this is not going to happen.

Phone:Palm Pre 3 - Didn't install anything, since I bought it. Just works. Had a Samsung Galaxy before and tuned it for weeks - heck, I even compiled the arm kernel once, in the silent hope to squeeze out some more performance to persuade that laggy system to speed.

Laptop w/ LinuxMint12:(a Dell Vostro (2years old)) Connected Thunderbird and Evolution as a front-end to my google-addiction. Works and is fast. However, meanwhile I prefer to run a single firefox window as frontend for gcal. I have to admit, that I love linux and tuned many parts (tmux+vim+zsh+many more) to my needs and pushed every single config file to github so I meet a similar work environment at my actual work.

Sidenote Browser:For browsing I use Opera. Breaks at some sites using the "Turbo-mode", while tethering. Tolerable considering the quality and stack of stuff.

Sidenote Work:At work we have iMacs, which I degraded basically to a terminal to log into our Linux-Cluster and work there (terminal/rarely KDE), where the environment is almost identical to my home env, thanks to git-dotfile-repo. Nevertheless, there is one thing I really envy: iTerm2. I wish someone created such a terminal for the *nix community...

Scott, fix it yourself! You got the brains for it tenfold and this blog-post is a great catalyst. No point in blaming others or the system. There is a lot of trash outside, but there are also diamonds hidden, which sometimes need to be ground by hand though.

If there is interest, I'll create a blog post on my work environment another day.

I think one of the key underlying reasons for this is that organisations do not value technical people these days. The industry has changed in a way when skills are more and more specialised but development projects think they will get a developer who will be an expert in everything when the reality is they are likely to be competent in a small number of technologies and can just about get by in others but the project will expect them to do everything.Would you expect a brick layer to do the plumming on a house?

A lot of the comments about management are things i see regularly and it is frightening sometimes.

I also think outsourcing has a contributed to this problem a lot too.

Its a simple idea really, good teams with good people and reasonable processes tend to write decent software. Bad teams with poor quality people and poor development processes will write rubbish software. Most companies cant measure the difference between these two scenarios so tend to go for the second because its cheaper on paper and easier to sell to their equally out of their depth manager.

joe bloggs

Wednesday, 19 September 2012 18:08:37 UTC

I agree that complexity and amplitude are good reasons that it is happening, however, not why it is happening.

In my humble opinion, the cause is corruption. When profits and bribes dominate the system we get the crap we are getting now, and not just electronics. Planned Obsolescence, it has crap built in. We all know that piece of shit is likely to die two days after the warranty runs out.

I think they could figure out where the "twiddle bits" go to make a stable system if not for all the status quo bullshit. …Angus

Angus

Wednesday, 19 September 2012 21:51:04 UTC

Hey, since this is 2012, why don't you give a shot at free(dom) software?

I'm not saying that is works 100% correctly all the time. But at least, when it breaks, there will be lots of people who do care. And if you are willing and have some programming skills, you can even help fixing it.

Cheers

Luis

Wednesday, 19 September 2012 23:26:43 UTC

I am not trolling. I swear. I really think the only solution is to kill yourself. That way you won't have to worry about the milliseconds of your life that have been wasted by technological inefficiencies.

Seriously

Wednesday, 19 September 2012 23:46:23 UTC

Its ALL about he lack of work ethic. Boomers started out good, got rich and slacked. Now we have 2 generations behind us of entitlement slackers who want to be paid for everything they touch. No work ethic= a half assed world. Software...hahaa, tried to get your car fixed recently?....or how about some monkey at the grocery store trying to get your "rewards " points correct.crappy software, slack attitudes, all because of NO discipline and no real punishment for failure.....I rule my world with discipline and work. Everything I own works or I don't own it anymore......get smart STOP BUYING CRAP...vote with your wallet not your ego.

tetonguy

Thursday, 20 September 2012 02:21:39 UTC

If you were using open source, at least you could look at the source code or debug the issues:

http://martinsandsmark.wordpress.com/2012/09/19/why-am-i-a-freetard/

”I like using open source because I like having the assurance that I can always fix it if I just learn enough, and that there’s nothing blocking my path toward learning it other than time constraints”.

someone

Thursday, 20 September 2012 03:46:29 UTC

I blame it all on hard deadlines and Agile programming. Everything about it is geared to spitting out code as fast as possible and QA be damned the closer to release you get. You end up with an endless cycle of releases that come a little bit closer to the actual planned and QAed release.

For a rough example; Windows 8 is 'mostly' what Microsoft planned as the next OS after XP but what we got was years of getting incrementally closer: XP sp1, sp2, sp3, Windows Vista, Vista sp1, Windows 7, SP1. While all the releases are being planned by the project managers all the quality code gets shoved aside, luckily some slips through.

It's true that if you held the release for code the programmer was completely happy with nothing would ever be released, all this Agile has to be done right now, work 18 hour days just ends up with code where none of the corner cases ever get tested.

There is a guy named Xah Lee. He has a ton of writings on software quality (and many more topics) on his website. Here is a search result on his website about this topic.I suggest for reading:- Responsibilities of Licensing- Software Quality & Programer Quality

KCs

Thursday, 20 September 2012 08:04:41 UTC

Regarding your gripe about the iPhone.

I noticed that my iPhone was filled with old data that I simply could not see or delete. The only way I went around it was to install PhoneDisk by Macroplant.

Now I can see all the files on my iPhone and delete and move files without having to use iTunes.

Anami

Thursday, 20 September 2012 13:15:41 UTC

@rado

Reinstalling Windows masks the other crap software you have installed. If reinstalling fixes it, something is breaking it.

Do you replace the engine on your car every time you need an oil change?

K

Thursday, 20 September 2012 13:28:03 UTC

It is cheaper to have support people help you "flip the switches" to fix the minor issues then it is to dedicate the time of the engineers to fix that one problem when they are tasked with building the next application for you to call support about.

I feel your pain

Thursday, 20 September 2012 16:04:09 UTC

I've been moaning about these issues for years. No one listens.

Sachin Kainth

Thursday, 20 September 2012 19:04:13 UTC

I had the issue with contacts a while back too until I discovered Google Sync. I think the issue was caused by what @Terry Lambert was saying in reagrds to the different SQLight db's. I have a Google Voice account and a Gmail account so many of my contacts were already there, along with all of its duplicates. The ugly and hard part was linking all the dupes and deleting whatever I didn't want, but once complete I completly removed my Gmail account from my iPhone, and then re-added it as an Microsoft Exchange account following these instructions: http://support.google.com/mobile/bin/answer.py?hl=en&answer=138740.... and now the problem is gone and has never come back.

The best thing is I can create a new contact from the phone and it immediately shows up in Google Contacts... and vice versa.

I also have my calendaring setup to sync through Google too, and everything stays in sync in iCal of my Mac, my iPhone, and through Google Calendar. I believe much of this can be achieved through iCloud now, but meanwhile I'm sticking with Google... it works very reliably and has been for along time now.

By far the predominant reason is the first you stated: "feeling we have to develop too fast and loose". Why? Because companies (here we're referring specifically to non-IT execs) are NEVER willing to take the time and $$ that it takes to produce high-quality software. All they're concerned with is next quarter's bottom line and pumping out software in the quickest/dirtiest way possible, in order to meet THEIR arbitrary, ludicrously unrealistic deadlines, so that they can puff their exec chests out and crow to THEIR big boss about how much they got done (read: how much they were able to slave-drive their software developers to get done), so that they can get their big freakin' exec bonuses. (Same short-term bottom line at the expense of everything else (even the long-term health of the company) mentality that ALL American business has developed over the last 30 years or so, which is why our country is failing.)

Warren

Thursday, 20 September 2012 23:15:22 UTC

You and everyone else keeps buying and using outlook no matter how buggy it is. You and everyone else keeps buying and using Word no matter how buggy it is. You and everyone else keeps buying and using <insert software here> no matter how buggy it is.

Address the common part of the problem -- "You and everyone else keeps buying and using ... no matter how buggy it is". Anything else is just pointless whining.

Pat

Friday, 21 September 2012 16:49:22 UTC

Scott, I think that's is the nature of Software, is not because of the problems you wrote above. Software differs from civil engineering. Civil engineering uses continuous math to pick the best approximations possible results (between 0 and 1), software use discrete math where we have all the natural numbers, we don't have the same approach we use in civil engineering to get the same solid engineering. I thinks is one of the most fundamental reasons. Is where things get very very complicated and we are human beings, we don't have a brain capable to deal with all this complexity.

> I work for Microsoft, have my personal life in Google, use Apple devices to access it and it all sucks.

Man, please. You are working for a company doing crap from the beginning (and especially in the mail domain), you trust your life to a big shady company, and want some interoperability with Apple.

I'm sorry, but it's obvious you are getting into trouble, your choices are completely braindead.

pkh

Friday, 21 September 2012 22:25:26 UTC

Is there any difference between “folks just not passionate about their software enough” and folks who are passionate about their software but they are not perfect? Who doesn’t make mistakes?

good good study

Friday, 21 September 2012 22:36:59 UTC

Something that often happen in a poor environment is some software is built badly. Then the rest of the features end up getting stacked on top of a poor "base" The rest then becomes to expensive to fix so the bean counters demand it be shipped "as is"

Something that tends to contribute to this badly is the fact that it is almost impossible to gather decent requirements for software which are not going to change significantly after its been built.

I don't see too many bridges designed and built for 4 lanes of traffic having a railway stuck onto the side after it has been completed. But software engineers have to put up with this because quite often people who making the decisions cannot understand what they cannot see.

My 6-year old on evaluating iPad software to teach him how to tell time:

"I like this one. The other one was full of disappointment, and made me cry."

That perfectly describes how I feel about a lot of software these days.

Todd Hensley

Monday, 24 September 2012 18:49:44 UTC

There is much to like in many of the comments.Foremost, though has to be these:1. software development is REALLY HARD. There are a lot of people doing it who aren't really up to it (though they are JUST good enough to produce working code in the minimal sense).2. our computation model is binary, brittle, and unable to spontaneously adapt to new conditions. This won't change until a revolution occurs. As a result, even well-written and -tested code breaks when it encounters something unexpected, which is guaranteed to happen eventually.and 3. the pressure to get to market quickly, and hopefully avoid irrelevance, is just tremendous right now, during this period of rapid, disruptive change. Others have covered this topic very well already.

I believe you misunderestimate the amount of cash most of this "Free" stuff brings in, through ads and monitoring.

K

Tuesday, 25 September 2012 18:29:24 UTC

@Pat:

Alternatives? There are bugs in all of the alternatives I can think of. It depends on how the bugs affect you on a daily basis, but there's no escaping terrible software.

S'like going to a restaurant and having them screw up your order by putting pickles on when you ask for them to be removed, then switching to the restaurant across the street - where they do the exact same thing, only this time with olives.

K

Tuesday, 25 September 2012 18:59:29 UTC

Late to the game again. And with so many comments and such a passionate topic, I'm not sure why I am even typing.

@Frans Bouma: Great comment!

My application development experience has mostly been for various departments within the State of California. In that experience I've worked on many teams and many applications and nearly all of them have sucked painfully.

At the pace the state workforce moves, we can't even blame time to market like the fast moving private sector might. There are even occasions when a project is stretched across a fiscal year for budget protection, because with the State money unspent is clipped from next year’s allowance.

We simply ignore quality, even security, because most of state staff are the pseudo-devs you speak of. In fact, because I've worked here so long, when I compare myself to the skill levels of my peers and mentors, I often feel like I am one myself.

The State cannot retain truly legit developers because their projects are often lame and driven by back-pocket friendships or legislature, rather than by business use or duty to the public as we've been charged.

It's sad really; and I'm sad for the same reason... because I know we can... and more because our duty is to serve California, because we should.

Trey White

Wednesday, 26 September 2012 13:21:15 UTC

@Trey:

Replace "legislature" with "Board of Directors," and everything you just said applies to private companies equally.

K

Wednesday, 26 September 2012 14:00:28 UTC

There are only so many pitchers good enough to make the major leagues. There are only so many violin players good enough to play for the London Symphony etc. There are only so many programmers good enough to produce quality software. I'm being generous to say that 60% of the programmers in the world couldn't write quality software if their life depended upon it.

When you compare the number of people who can with the number in the field you quickly become amazed that anything ever works rather than wondering why nothing does.

Rick

Thursday, 27 September 2012 03:18:59 UTC

Can do better in so many ways. Software has always had many, many problems. Over the long run, it's getting better. It's just that more and more people rely on software for more and more of their lives. And we have software from more and more companies and individuals running on our devices.

We are overrun by complexity. Products are shipped with many, many bugs. They're is no way to fix them all and ship, especially when talking about interaction with other products from other companies. Some bugs are low priority. For others, the mantra is "there's a work around", although its not clear how anyone is supposed to figure out the work around.

At least these days, we can do a search to find others that have had the same problem. Only problem is that we cannot tell which solution will work or which solutions have really worked for individuals. And it's unlikely that a company will admit to a bug that they have no desire to fix.

We need to keep improving the state and tools of software development. And in the meantime, we need to have better testing and better feedback loops between developers and their users.

Stacker

Thursday, 27 September 2012 08:27:23 UTC

In my previous company there was a quote.."give client such a software that they can not swallow or vomit" meaning buggy software and fix those bugs in next version and take money from client ..lolz =D

Re: Alternatives. Not buying is only one alternative. There are others.

You could write your own, start a company and hire some people to write your own, fix bugs yourself, or pay someone else, to fix bugs in an open source equivalant, get a bunch of users to petition a vendor to fix a bug, and so on. And that's just the ones there's already a mechanisms for.We could invent new mechanisms for other ways that don't exist yet. Want to encourage someone to take on the task of developing an app you need? Eliminate their ROI risk by offering an "X" prize with funds collected from presales. Want to make commercial SW fix their bugs? Get laws passed that force them to accept returns of their SW, one justifiable reason being that it was too buggy to be useable.

Like I said, address the problem -- that people accept buying broken SW. As long as people are willing to buy broken SW, other will continue to sell such to them.

Pat

Friday, 28 September 2012 07:01:40 UTC

Regarding the use of the word "literally", most dictionaries now recognize the now-previously-incorrect usage of the word.

So, when you use the word "literally" to describe something for which you are not literally being literal, you're still literally correct.

Such is the nature of the evolution of language.

Chad

Friday, 28 September 2012 17:18:39 UTC

Problem is quite simple: greedy idiots who own companies. They are greedy (TAG) to hire proper programmers. TAG to wait until product will be properly tested. TAG even to hire these testers! TAG to buy proper H/W and S/W. TAG to pay enough so you not only sit from 9 till 18, but also enjoy additional profit when feature is sold. TAG to organise proper workplaces - mostly people sit like cows in ONE BIG ROOM - what a stupid!!Well, I can count indefinitely, you got the point - greedy monkeys is a root of evil.

Vincent

Friday, 28 September 2012 22:56:56 UTC

Speaking as someone who does QA for a living - quality is secondary to shoveling crap out the door. I log three times as many bugs as actually get fixed, and no one seems concerned about it.

That's not going to change until customers start demanding quality. I don't expect to see that any time soon.

Orville

Saturday, 29 September 2012 04:27:15 UTC

I feel pretty much the same way. I'm afraid the problem is: we customers put up with it. Only until we refuse to buy buggy crap will it get any better.

Eric H

Wednesday, 03 October 2012 00:59:48 UTC

I tried to tell Microsoft their "Install .NET 4.5" link is bad at http://www.microsoft.com/net/download . I challenge anyone to find a way to report it on the web site.

myyr

Friday, 05 October 2012 14:46:17 UTC

Forwarding email from my multiple accounts to Outlook.com and using its calendar and contacts works best for me. I can access it from a web browser on any Windows, Mac, iOS, or Android device rather than put up with the shortcomings of most mail client software.

Ian

Friday, 05 October 2012 14:59:07 UTC

SMS is under-utilized in North America, I'd love to be able to do more over SMS based on what I read over at textually.org. For example, there's Twitter, I prefer sending and receiving tweets through SMS instead of on the web or with apps. I know a few SMS commands for basic Twitter account management. I only actually visit Twitter.com for tasks like curating my lists and updating my profile.

Ian

Monday, 08 October 2012 08:14:52 UTC

How many years did it take Microsoft to add a shortcut key to create a new folder in Windows?

Why can't I see the folder sizes in Windows Explorer in the same place as the file size is displayed, I need to right click and select Properties.

People have been complaining about this on http://www.annoyances.org/ for many years... but no one is listening. They are just adding animation to the GUI.

Snæbjörn

Monday, 08 October 2012 16:55:52 UTC

1. Apple: Don't buy devices because they are beautiful. Buy devices that work.2. Microsoft: you don't need the index service - disable anything that you do not need.3. Apple: See 1. Apple software doesn't work. They only make beautiful devices.4. Apple: Again see 1.5. Microsoft: Don't use expensive bloatet software - try Thunderbird (by example) for a change.6. Apple: Again, see 1.7. Microsoft: See 5.8. Google: Why use gmail if you have a normal email client? - Don't use what you do not need.9. Microsoft: File a bug report - you work for them remember?10. Apple: Again apple product. See 1.11. Microsoft: Buy an agenda. 12. Apple: Again, see 1.13. Apple: Again, see 1.14. Microsoft / Apple: Doesn't it look good or doesn't it work? - and again the biggest problems on the Apple, so see 1.15. Google: So don't use it - browsers enough in the world.16: Apple: See 1.17: Microsoft: See 9.18: Microsoft / Google: See 15.19: Google: See 8.

So, to sum it up:Apple: 8.5 out of 19Microsoft: 7.5 out of 19Google: 3 out of 19

Throw away your apple devices and your life is twice as good. Quit Microsoft and it becomes almost perfect.And as soon as you get your personal/social life at home instead of in Google, your life will be perfect.

Theo

Monday, 08 October 2012 23:56:23 UTC

I don't think the problem with big organizations is that non-developers get involed with the process. I think its that simply too many hands are in the pot. As soon as "merging" code becomes a risk or as soon as a bad merge occurs and management tries to control it for future builds, that's when developers feel they got their hand's slapped.

I in no way want to slam you Scott, but lets take this "oops": "I'm am complaining not because it sucks, but because I KNOW we can do better." As soon as it becomes troublesome for that "I'm am" to be corrected it won't get corrected. The business feels the meaning is still there, the functionality is there, the business decides that the risk to correct that is too high... So it doesn't get corrected. I see the same thing happen on a daily and/or weekly basis.

This is why I enjoy working with small development teams with often 1 developer, sure he will make mistakes -- we all do, but we need the lowest possible hurtle to correct those errors. Facebook seems to have gone too extreme the other way; a victim of its own success.

Dane Watson

Friday, 19 October 2012 11:00:08 UTC

Perhaps if it was illegal to have disclaimers about suitablity of purpose / consequential damages for all software and software publishers were legally liable for any failings in their product we would see a substantial increase in software quality and reliability. It would need to be treated as a serious engineering issue and a critical part of a system. Operating systems especially so.

Would you expect to buy a new washing machine/ fridge that had a suitability for purpose disclaimer? Breaks down on third day - "Sorry, mate. No refund or repair. You've been using it for its intended purpose."

I suspect it's part of the old "engineering" attitude.. Better to spend 10 X as much fixing the problem than 2 X as much getting it right to start with.

I've been writing software since the late 1970's so would probably have been sued to extinction if my first suggestion had been in force!

James T

Saturday, 20 October 2012 06:58:27 UTC

I agree, it all sucks. I went to Apple a couple of years ago - for the 1st time - with the promise of seamless integration, it all works. Bullshit. Apple could care less, Microsoft would respond to you, Apple won't, just feeds you bullshit about next releases, and the poor Appleites are completely brainwashed - they'll fix it in the next update - whatever it is, latest OS is slowing the browser into unuseability, the great iPhoto doesn't work - facial recognition is a joke, what a mess. Time to start shorting stock, need to find some Apple LEAPs, their day is coming, Microsoft's is here.

Bruce Sands

Saturday, 20 October 2012 07:02:19 UTC

Apple is a joke, you can't even change the font size on some applications, you're sitting in front of a $2000 toy need your reading glasses to read the font, what a joke company, their day is coming, too much money and too much arrogance.

The iMessage bug you're mentioning is sooo annoying! ..and it is NOT a side effect of the duplicate contacts as someone else suggested. My contacts are all in perfect order and I have the same thing going on except that in my case it's mostly in group chats.

Marcus

Thursday, 17 January 2013 04:01:36 UTC

@"Nobody's upset":

I'm upset! Have been for years!

But you can change your thinking and realize what you've described is an opportunity. To create new, well-crafted systems that really work, all the time, without the pain. It's not easy, and takes a mix of logic, art and intuition. But the result is something that truly differentiates itself in a way that marketing veneer just can't match.

In the grand scheme of things, software development is still a relatively nascent field compared to other areas of engineering. Just look at the wealth of formal validation techniques used in Electrical Engineering. Our tools are just getting there.

So while I can't give you back your 3 gigs of iPhone space, hopefully I can provide 770 bytes of inspiration.

Richard Kagerer

Tuesday, 05 February 2013 12:02:17 UTC

I very much agree - most of the software out there is more or less crap.

I think another reason why so many software is erroneous is because changes of all kind always introduce usability issues: Usability is all about meeting the user expectations. Every change you do requires the long time expert users of your software to adjust to the new application behavior, so even if you greatly enhance the usability when looking from a new user's point of view, old users might get confused and feel distracted by the change. Hence it's much easier to introduce new features than to correct design flaws done years ago.

My solution? Continue to sell what you have, while re-implementing it in the background from the scratch, as Apple did with OS X. Just don't be afraid to break with the old conventions and principles - people who don't like the new approach can stay with the old one!

And remember what Einstein said: "We cannot solve our problems with the same thinking we used when we created them."

Daniel

Daniel

Tuesday, 07 May 2013 01:56:29 UTC

Yes, I care and, have a few friends who do too. Of course, we work in software. I find it amazing the diversity of views on this issue. This tells me we do not have a grip on it. I actually think that the industry is so overwhelmed by itself that we are heading for some form of cascading failures when the collective quality gets bad enough and somebody forces an automatic upgrade upon us that sets off the cascade. I am working at a place that is progressively loosing the quality battle. And we all know it but cannot seem to get a grip on it. Recently, I read Jared Diamonds book 'Collapse' and find it notable that when I society is loosing it, that they cannot take enough risk to act on their problems and seem to resort to superstitious behavior. Companies do that too. Bug scrubbing becomes like a religion or like trench warfare, and we cant break out of the loop. I also think that products have life cycles, that entropy rules , and that every code base has a point where the company should just stop, because dinking it is just gonna make it worse.

CodeMole

Monday, 15 July 2013 08:45:54 UTC

Couldn't agree more than that. I think Software developers are pretty lucky that they live with those notions.

i notice that the words "microsoft" and "windows" keep popping up in your list of complaints. sleep with dogs and get fleas.

tom arnall

Tuesday, 15 October 2013 07:50:28 UTC

well, seriously. the system (the computers, the communications hardware, the software, and all of us who use and tend the stuff) has taken on a life of its own and has been growing rapidly. But, almost by definition, the amount of competence among users and technical folk has been growing at a human pace, i.e., slowly. The resulting spectacle has become very entertaining if you just sit back and relax a little and, yes, make as simple as possible the technology you really depend on.

tom arnall

Comments are closed.

Disclaimer: The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.