Software Runs the World: How Scared Should We Be That So Much of It Is So Bad?
theatlantic.com
theatlantic.com
I think that's the distinction James Kwak is trying to make. He isn't saying that the business processes (in this case, buying and selling stocks) was especially clean before software. He is saying that software makes the system faster (amplifying the effects of a poor business process, as you say) while removing a human buffer. When a human order-taker sees an unexpected zero on an order sheet he or she has enough common sense to ask the person handing it to him or her whether the figure is correct. Most financial software doesn't have that "common sense", so it's easy for inadvertent slip-ups or programming errors to cascade into firm-ending chain reactions.
Obviously, the solution to this isn't to go back to slow and inefficient human processes. I think the solution is to continue doing what we're starting to see today - software that asks whether we're sure we know what we're doing when it sees a variable that's out of line. In addition, I think that many software systems are way too monolithic. That is, every component of the system implicitly trusts every other component. I would like to see software broken up into smaller communicating components, where each component can make assertions about the input and output of other components, and components can fail without bringing down the whole system. The system I've seen come closest to this is Erlang's OTP, but there's no particular reason for that model to be limited to Erlang.
Tell this to Mizuho Securities, where a human sold 620,000 shares at 1 yen instead of 1 share at 620,000 yen. ~$300 million loss in a single botched trade. Humans at both Mizuho and the Tokyo Stock Exchange saw the trade and all declined to intervene because they assumed they had insufficient authority to countermand the trader.
There's a very good reason why the enterprise software industry sells billions. Because they save 10s, 100s or 1000s of billions.
For custom software, that's what a good consultant/PM is actually for, to translate 'what we thought we were doing' into 'what we're actually doing' into the final product of 'what it should actually do'.
I once worked for a company that sold project and document management software. The strangest call I ever got was from a small 20 person company phoning us up and saying 'What is Sue supposed to do now, she doesn't have anything to do'. That's what you bought the software for, to save money. Added bonus, management gets massive strategic oversight. But in the end it's up to them to use it.
Not just one company. IM apps alone may have saved trillions.
Compare to the water cooler, where it might take me a whole minute just to walk down there. Then we sit around and shoot the shit for maybe five minutes. Total time spent, let's call it seven minutes during which nothing got done except some simian grooming.
This is an incredibly shoddy article, it even closes with an absolutely brain-dead "what if"... the way average high school students close their essays.
I'm a huge believer in the free market, but the economics of journalism really do seem to be pushing a lot of serious periodicals into a crappy direction. Salon was never excellent, but it was good at times. Now it's utter crap. Slate was pretty good, now it's sliding fast. The Atlantic? Yep, just as you say.
Most of these places are ditching the "serious researched journalism" and even the "serious political opinion pieces" and going with fluffy bloggy chit-chatty crap.
"Round tables" are getting more an more popular, especially round tables that are just emotional reactions to lifestyle news. Four women discussing birth control. Five guys talking about Breaking Bad (Slate: I'm looking at you for BOTH of these).
And now the Atlantic is headed down the huffpo route.
All markets "clear" at some price and some volume. It may just be an unfortunate fact that in the Internet age the market for real journalism clears at $0 for 0 volume.
Again, my philosophical / political inclination is to deny this, to say that there's never a market failure, that everyone can always buy the magical pony they want at a price that sounds fair...but journalism seems to be giving me really good reasons to not say that.
To throw out a glib generalization, it seems that the free market is best at producing things people want, not necessarily things people need.
Really? I don't even consider the stock market software as mission critical. I mean, Jane Street's software is written in OCaml...
Mission critical is software that controls lives. Airplane, spaceship, heart pacer, ...
Critical software leads to people's death when it goes wrong.
Mission critical software leads to the mission's death when it goes wrong.
Where the mission is usually "make money".
In some ways the article title is misleading as it touches on only a fraction of the software that actually runs the world - there is a shit load of software actually running the world (incl. making physical stuff go) and from what I can see most of it does a decent job, in general (of course there is always room for improvement). Disclosure: I'm a process control programmer so am biased in my view as to what actually 'runs the world' :). Taking nothing away from the money processing side of the business.
Intersect("Critical","Mission Critical") == "Critical"
One recurring pattern I've seen in enterprise software projects is separation between users and the developers. Often, there is this game of "telephone" where the user's managers talk to a manager above them, then there might be another layer above before information can start heading back down to the devs. Often, one is strictly forbidden to talk to users, except in exceptional situations. This is because the project is largely about control, so restrictions on communication with the users is necessary, since many of the unstated goals have to do with the frustration of the user's wishes.
What's even worse is when this power of control is used in political infighting.
Mine is: ...will vote for war and more spending.
> The only real solution is to acknowledge that computer programs are going to fail and try to minimize the damage they can cause in advance. [the best way to do this is to not use the software in question at all]
No, the only real solution is to provide a meaningful warranty with software (rather than typical "no warranty" clauses). Regulation can enforce this and the price will have to be paid by the customer. We have put up with these crappy licenses for decades and the result is the buggy mess we have now and no way for customers to demand a working product. Mistakes will still be made, but they shouldn't harm the customer more than the vendor.
http://mil-embedded.com/articles/software-warranties-new-era...
No way for customers to demand a working product? Which products don't work? How does consumer choice and refunds for completely broken software not take care of this?
The software referenced in this article was mostly built in house, perhaps some with enterprise licensing which you can be sure included negotiations covering reliability.
Regulation is not the answer. Software is just fine.
Software is just as "fine" as any other product where no accountability exists.
Doors don't have guarantees against someone kicking them in. Cars aren't covered against someone putting sugar in the gas tank.
What counts as a vulnerability?
How can a regulatory body possibly decide what was a "vulnerability" they should have known about and what was something unforeseeable? I guarantee you there isn't always clear line between the two.
What about when the vulnerability is exploited by a government who has greater resources than the software vendor?
Does Microsoft have to pay out on a claim when damage is caused because a certificate is forged by the US government?
You provide a warranty that states exactly what is covered and what not (and suitability for a particular purpose, which software licenses often deny completely).
> Doors don't have guarantees against someone kicking them in
They do, at least here in the EU you get differently rated safety doors at different prices. You know exactly what kind of minimum resistance they offer.
> How can a regulatory body possibly decide what was a "vulnerability" they should have known about and what was something unforeseeable? I guarantee you there isn't always clear line between the two.
Stupid Word macro and buffer exploits are very obviously grave mistakes made by the manufacturer, who should be held accountable.
> What about when the vulnerability is exploited by a government who has greater resources than the software vendor?
Why should that make a difference? If you cannot handle the responsibility you have as a vendor, then don't be one.
> Does Microsoft have to pay out on a claim when damage is caused because a certificate is forged by the US government?
No, because Microsoft's stuff works as intended in that case, the CA should be held liable.
So software vendors state in their warranties that running this software on an internet connected device voids the warranty, and they stop offering patches and support. All support moves to unofficial third parties.
>They do, at least here in the EU you get differently rated safety doors at different prices. You know exactly what kind of minimum resistance they offer.
And that's an objective quantifiable measurement. Levels of software vulnerability are not.
>Why should that make a difference? If you cannot handle the responsibility you have as a vendor, then don't be one.
That is stupid, no software vendor can harden consumer software meant to run on a desktop internet connected computer to the point that a large government agency can't find a vulnerability.
I don't buy this. If the vulnerability is in the OS or some other program, those parts are to blame. But it's perfectly possible to avoid the mistakes that are typically employed for such intrusions (usually they are in the OS anyway - you know, the OS with no warranty, no accountability, but a monopolist price). When they aren't, it was usually some mediocre C programmer's sloppy coding (there are safer languages for mediocre programmers). The whole point of such regulations would be to put some pressure on developers so they must choose proper tools, languages, methodologies to keep customers from harm, whereas now they simply do what they like with no consequences.
Opening software vendors to unlimited liability for flaws would certainly push me out of the software business. Particularly in the fast moving entrepreneurial word, pushing improvements that sometimes are flawed is better for consumers than perfect software.
Remember that motto at Facebook?
Here's just a brief list of the problems I can think of off the top of my head.
What about paid beta software?
What small part-time software developer is ever going to release anything if he is legally obligated to provide support for x number of years.
Does some kid who bangs out a lolcats viewer for iPhone need to provide a warranty?
Who's going to make up the regulatory body that governs this? Ex industry people like in every other regulatory body? Guess who this favors --big companies like Microsoft who can easily afford regulatory compliance.
Software is inherently more complex than physical products, the vastly different hardware configurations of consumer PCs make it impossible to test everything. Manufacturers will only guarantee that the software works on x model Dell Desktop, and stop offering support for anything else to avoid regulatory problems.
Software is much faster moving than hardware, lack of regulations is one of the reasons.
The biggest problems consumers have with software is malware? Do you warranty against active destruction by a third party (like a car manufacturer providing a warranty against someone keying your car)?
There's nothing wrong with allowing exceptions for software clearly described (and sold) as "beta".
> What small part-time software developer is ever going to release anything if he is legally obligated to provide support for x number of years.
One who is careful enough to use a safe language, skilled programmers and possibly insurance. I fail to see how this is any different from a small vendor of electronic devices, who needs to comply with safety regulations and bear the risk of a recall due to a design problem.
> Does some kid who bangs out a lolcats viewer for iPhone need to provide a warranty?
Yes, just like he is accountable if he fits the lolcats viewer with a trojan on purpose.
> Who's going to make up the regulatory body that governs this? Ex industry people like in every other regulatory body? Guess who this favors --big companies like Microsoft who can easily afford regulatory compliance.
How is this different in other industries where regulations that demand sufficient quality and warranties exist?
> Software is inherently more complex than physical products
So you're saying that complex products should not come with a suitable warranty? How is an image viewer for the PC (no warranty, possibly vulnerable to specially crafted images due to buffer overflows etc.) more complex than a car (comes with warranty)?.
> Software is much faster moving than hardware, lack of regulations is one of the reasons.
I disagree. The software industry keeps reinventing and breaking things and hardware has progressed to a much greater degree in the past 20 years.
> Do you warranty against active destruction by a third party (like a car manufacturer providing a warranty against someone keying your car)?
Active destruction requires physical access. If you provide physical access through a stupid vulnerability (that can be 100% avoided using safe languages e.g.), then yes, you should be held liable. If the user provides the physical access through his own neglect, it's his own fault.
Then all software will be sold as beta.
>Yes, just like he is accountable if he fits the lolcats viewer with a trojan on purpose.
One of those things is a criminal violation, the other is not--"just like" doesn't work here.
>One who is careful enough to use a safe language, skilled programmers and possibly insurance. I fail to see how this is any different from a small vendor of electronic devices, who needs to comply with safety regulations and bear the risk of a recall due to a design problem.
I've developed and sold small electronic devices before--regulatory compliance is a huge burden if you're only selling a few units. Paying the cost of compliance testing when you're niche products with a small number of sales is very difficult. In addition, it greatly increases the amount of capital needed to get going.
Whenever someone proposes regulatory solutions like this, I assume he has only worked for (or owns) established companies and has recently tried to start one himself.
How many small electronic vendors are there vs. small software vendors? Software that can cause death (like electronic devices can) already has to comply with safety regulations.
>How is this different in other industries where regulations that demand sufficient quality and warranties exist?
It's not, that's the point. The regulations in these industries are heavily skewed towards large companies, that can afford to pay entire regulatory compliance divisions and the divide the cost amongst their comparatively much larger sales--complying with regulations is much easier if you are selling a millions copies of something than if you are selling 100.
>So you're saying that complex products should not come with a suitable warranty? How is an image viewer for the PC (no warranty, possibly vulnerable to specially crafted images due to buffer overflows etc.) more complex than a car (comes with warranty)?.
How many car companies are there? Do you really want to live in a world where the software industry works like the car industry?
Embedded critical systems running real time software are much more reliable than desktop software because failures can kill people. But there is a huge trade off--do you want to run a desktop graphics program that is designed by engineers at Boeing?
I like the freedom of choice that I'm currently offered--I'm willing to accept a few bugs in exchange for more a better user experience.
That is what happens right now, only that they get away without labeling it that way. When beta software (known as such) is used in production environments, at least you can fire whoever made the decision to use it when it causes massive damage. But when a software vendor gets away with selling you a shrink-wrapped product that actually "does nothing" (as the legalese in the EULA claims), there's something very wrong.
> I've developed and sold small electronic devices before--regulatory compliance is a huge burden if you're only selling a few units.
Not a show-stopper then, thanks for proving my point. ;-)
> Whenever someone proposes regulatory solutions like this, I assume he has only worked for (or owns) established companies and has recently tried to start one himself.
Interesting assumption, out of the blue. I started my own (vc-funded) company in 2000 and am still working there as CEO. Now what was the ad-hominem-ish point you were making?
> It's not, that's the point
So why does software deserve special treatment, resulting in the buggy mess we have now?
> How many car companies are there?
Lots.
> Do you really want to live in a world where the software industry works like the car industry?
It would be great if software was as carefully crafted as typical cars. There's also plenty of humorous spins at that comparison out there (you don't have to drive cars with a completely different UI every 2 years) ...
> But there is a huge trade off--do you want to run a desktop graphics program that is designed by engineers at Boeing?
What exactly is so bad about engineers at Boeing that you expect me to answer with "no"? Is Microsoft a somehow much smaller, cooler and more flexible company than Boeing so I should feel like I'm getting a better deal now?
> I like the freedom of choice that I'm currently offered
Noone wants to take the freedom of choice away from you, just the freedom of vendors to sell junk ("no fitness for a particular purpose") disguised as software.
>Not a show-stopper then, thanks for proving my point. ;-)
You have no idea how many products I've shelved at the prototype stage because I didn't think I could recoup the regulatory costs.
>Interesting assumption, out of the blue. I started my own (vc-funded) company in 2000 and am still working there as CEO. Now what was the ad-hominem-ish point you were making?
Turns out it was correct, you haven't recently tried to start a company--you did so 12 years ago. Now you're an entrenched player with something to gain from additional regulation.
>Lots.
That's just absurd. Compare the number of software makers to auto makers. There's at least 2 orders of magnitude more software companies, probably many more.
>What exactly is so bad about engineers at Boeing that you expect me to answer with "no"? Is Microsoft a somehow much smaller, cooler and more flexible company than Boeing so I should feel like I'm getting a better deal now?
You seem to want desktop software to be as reliable as embedded real time software, that's what I mean by manufactured by Boeing. There is a huge trade off for that reliability, in the form of performance.
>Noone wants to take the freedom of choice away from you, just the freedom of vendors to sell junk ("no fitness for a particular purpose") disguised as software.
That's exactly what you're trying to do. Right now I have a huge choice of available software. You want to restrict what manufactures can produce, thus limiting my choice.
You don't like the current state of software--fine make better software, use BSD--don't tell me what I can and cannot buy and sell.
Good Day.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For example, just to take a random example of Java or Python, what would it look like to create a strict subset of language features which allowed for formally provable code and to create a static analysis tool which could achieve it. I realize that this sort of thing isn't for many developers or many sorts of projects. However, I would like to see more folks taking the best parts of High Integrity Software development and bringing it out to the wider world.
https://en.wikipedia.org/wiki/SPARK_%28programming_language%...
They do this all the time. There are quite a few pre and post-trade checks enforced by the exchanges. The net result is that if things go wildly wrong, trading will most likely stop.
This is part of the reason why Knight Capital's implosion had such a minimal effect on anything besides Knight's shareholders.
First, complexity. Bridges aren't doing several million operations per second. They either bear the weight or they don't. They handle a known temperature range. If it can function at -50 F and 120 F, then it can handle the typical 65 F day. With a bridge, people put a lot of work into solving a simple problem extremely well and reliably. Software can be developed this way (Unix philosophy) but most software isn't. Small programs are written to solve problems well, but often invisibly; large-program methodologies exist to get promotions for higher-ups.
There are few things in the world like software, which is pure logic. We don't have the tools to understand the complexity, and what tools we do have are often used to write more complex software, not understand the software we have (see: IDEs and their "four wheel drive problem" of getting people stuck in more inaccessible places.)
Second, a lot of "software engineers" aren't very good and don't have the incentives and leeway to get better. That requires lifelong learning and professionalism in the true sense of the word. We're not a profession. Many things define a profession, but some salient traits of professions are: (1) an ethical ruleset that supersedes managerial authority-- not only are you allowed to refuse your manager on ethical grounds, but you have to do so; "I was just following orders" is not an excuse-- and (2) an expectation and allowance that the professional will dedicate half (~20 hours per week) her working time to continuing education, networking, and other varieties of "off-meter" work that will never occur in a typical manager/subordinate context because they benefit the professional's long-term development rather than the manager's parochial goals, (3) a very high degree of autonomy in work regarding social-bullshit protocols, but with very strong restrictions on the things that matter (i.e. no one sets working hours or vacation limits over a research professor, but if he steals another's work or publishes results he knows to be false, it's career-ending). None of these apply to software engineering. (1) If you disagree with your boss about how things should be done on ethical grounds related to software quality or intellectual honesty, you don't have an appeal process. You just get fired. (2) Most software engineers, if they want to keep learning, have to do it on their own time; hence, the stagnation that sets in for all but the most energetic and ambitious. (3) Nope. Here, the software industry looks more like middle-middle class white-collar culture (show up at certain times, take orders) than upper-middle-class professionalism. The salaries are often professional level, but work conditions are merely white-collar.
In a truly professional environment, manager-as-SPOF is avoided like the plague and people have genuine incentives to do good work, not just enough work to appease the manager. The manager still has some power and influence, but the role is more like a graduate advisor than an overseer. Also, professionals are encouraged to build lifelong reputations and seek visibility. (In a typical software company, trying to do this gets you the smear of a careerist and a "socialite".) Professional environments motivate people to do their best work. Merely white-collar environments don't.
The third issue is that we simply don't have a good understanding of software. This may be derived from the two above: complexity and lack of professionalism. Or it may result from something else entirely.
We know that, theoretically speaking, "it's impossible to reason about code" (cf. Halting Problem). Well, my response invariably is that that's correct: it's impossible to reason about arbitrary code. But we shouldn't be writing arbitrary code. Ever. We should write simple code that doesn't rely on extremely high-level mathematical or conceptual insight (which we model as non-computational "genius", though I have no interest in getting sidetracked into the debate of whether we are or are not computers) to understand.
I think individual people are good at writing software. People don't usually set out to write "arbitrary code". There are many individual software engineers who (1) use only as much complexity as they can handle, and (2) act professionally in spite of the lack of incentives or requirements ensuring it. Which means that small software can be good. What I like about the Unix philosophy and small-program philosophy is that it enables islands of quality to exist, and eventually bridges between those islands, which can lead to generally decent systems even though it's GRAI (generally recognized as impossible) to have high quality in an entire codebase. Systems design is all about accepting the possibility of failure amid complexity. It's about using small components that do one thing really well and interchangeable parts, not single-program mudballs. Engineers get this. Managers, who conflate bigness (cf. interview questions like "what's the largest team you've ever managed?" and metrics like kLoC) with success, generally don't.
The problem is that, once a program has a certain number of hands pass over it, it turns to shit. Even if the original code was good, entropy sets in at some point. One bad apple spoils the barrel, and a "bad apple" doesn't have to be a bad programmer. It could be a skilled programmer who hasn't had a promotion in 4 years and no longer gives a shit. The reason why big-program methodologies generally produce legacy mudballs is that it's just impossible to prevent the "one bad apple" problem from corrupting the whole program.