The Software Industry Is Still the Problem
queue.acm.org
queue.acm.org
The RBQ which is the agency in charge of making sure the rules are respected for construction, removed all their licenses yesterday.
It took years, but finally people will no longer suffer from crooked builders.
Here is the news. It's in french. https://ici.radio-canada.ca/nouvelle/1828502/construction-re...
I wish there was some kind of agency in charge of penalizing crooked software companies which are known for years to screw businesses. It will take time, but we will get there.
Software? Decisions are often made without either knowledge or a plan. Agile is a thing. Deadlines are shorter than ever. Also: ideally it needs to be for free. Just pick up that package from Github, it should be good enough (maybe it even has Tests, but who cares, really).
The software projects that are heavily regulated? Take forever to plan and complete. Massive budgets. And still usually are not able to manage to be bug free.
Also: software is really, really complex. And: it is easy to attack. Let's be real: other engineering projects are really easy to break as well - some well placed C4 usually does the trick. But it is hard to get C4. Hard to get access. Also, hopefully, there's an ethical barrier to doing it. Software on the other hand? From home. And once there is an angle of attack, it can attack millions of targets at once. And there are no visible victims, at least not right away, so the ethical barrier is lower as well.
Ok I'm rambling. Anyway. This, as is software, is a complex issue. And liability could totally be a thing, but that means an end to ad-financed applications or 2$/user/month services. You get what you pay for (well, sometimes not even then, but you definitely do not get anything for cheap any more). Perfect example: super-cheap IoT devices from China. Well engineered ones doing basically the same thing? 10x, sometimes 100x the price.
Who breaks into anything with C4? You can buy a battery powered drill and angle grinder for $300, and break into anything thats not a military bunker. Or you can learn to use lockpicks, and break into most houses for $20.
However, what we have in software, is customer finding out that the door was a mirage and you could wall right through it, or keys being sold on the black market
(Let this not be read as if I am a zealot for static strong languages -- when you have to prototype stuff, the dynamic languages are a god send!)
Truth is, a lot of us the software devs are divas -- and I've been guilty of that in the far past as well, and I am very ashamed remembering every minute of it.
But you can't just pass wisdom and tell the younger devs: "STFU and listen to experience and follow established good practices". We all walk our own road to wisdom and sadly that takes a while and in the meantime we can ruin some businesses. :( And/or the job of the next person after us.
Software is buggier because: - testing is expensive and takes time so it is a good candidate for cost saving - "atomic requirements" - there is no such thing. As long as your function is part of a program you cannot consider it separately. - "if it compiles ship it" - "let's turn on -Werror and ship it". Let the user fix the bugs. - "All the world is a VAX". ... and other such great ideas which have nothing to do with engineering. If builders build buildings the way programmers build SW: every year the building code will change and you will not be able to connect old buildings to utilities ( or they will be disconnected), nobody will agree on a mean of transportation of building materials and after you build it someone will steal all your belongings because the windows will have no locks.
When was the last time it was "worth it" to tear down a 10 year old building because rebuilding one would save enormous amount of money in a couple of years?
I think there is a balance to find in both, I'm not saying we should rush into everything, but expecting that everything is always super stable, would absolutely end up in the nice features being available later than technically possible.
As I write this, millions of cars have gotten stolen due to vulnerable lock mechanism. A thief can with simple toools just open the door, start the car and drive away. Do we sue the engineer designing the lock for billions in damages? No. It isn't reasonable to blame engineers for everything.
For example, let's say I'm a murderer and kill ever resident of a single street, one household a day. That's way too much of a coincidence to ignore. But if I did the same number across a larger area, maybe you get different police forces that haven't thought to talk to each other and no one spots the connection until much later.
The same applies here. If you personally have faulty software, it's not great, but you probably move on. If your employer buys the same software for all of its employees, then the scale of the problem is much more obvious and the actual cost of the problem is a lot larger to a single entity.
I agree that the blame does not lie on the engineers that created the cars or software though. In the end it's a problem of cost, you could write better software, but it would cost you time, money and shifted focus in the education of software developers and so on. Users are not willing to pay for that cost, they are very upset when reality bites them in the rear though...
First of all, you're comparing unintended software vulnerabilities to physical locks; being able to open a lock with a lockpick is an element of the design! Everyone knows this going in!
That aside, ask yourself what car manufacturers have to do to prove the safety/security of everything in their supply chain down to nuts and bolts, and what the consequences are when they make a mistake.
Now compare that to how modern consumer software projects do dependency management and verification, and what happens when they have a whoopsie because some open source library they pulled from GitHub with a "no warranty" license exposed them to a critical data breach. In my experience they throw their hands up and say "meh sorry, software is hard."
But how did many those laws come to be?
Is it because the state cares about these professions a-priori, or because established players in those industries lobbied to restrict who can enter the profession in order to protect their market position and comparative advantage?
And yes, the latter can be true while also it leading to an outcome that produces higher quality than if thise laws were not there - but quality may not have been the reason the laws were proposed in the firt place.
The larger point is why the software industry has avoided regulatory capture or eschews certification in contrast to other markets.
In other words, more boadly, is it the government that pushes for these laws, or the market that demands/asks for them?
(Also, it might helpful to differentiate B2B vs B2C here).
I would argue that the software industry is not run by software developers but by the cowboys in suits at the Excel and Powerpoint rodeo in the boardroom. It's rife with regulatory capture, but software developers in that environment are considered a liability to be minimized. Tweaking that expense line in your presentation to the shareholders means hiring the cheapest labour possible and spending as little as possible on their development, training, and certification. Your investment in lobbying authorities to keep regulation at bay has an enticing rate of return.
I don't think the claim that software devs are oppressed by management (as if other industries do not have management) and would run things better themselves (they wouldn't) sheds any light on discovering those differences.
But in engineering professions, the standards are well understood, and measurable. Software is not the same at all.
The whole argument appears spurious, and the arguer, sanctimonious.
Not liable:
- The CEO that set infeasible targets and pocketed a big bonus for meeting shareholder expectations.
- The sales person that sold the project for too little money and pocketed a big bonus for bringing it in.
- The manager who allocated too few hours and got a raise for finishing the project in time.
- The designer who drew all the cute boxes on the powerpoint presentation to show how it was going to work.
- The testers who failed to find whatever the problem was.
Liable:
- The poor chap who wrote the code, worked extra unpaid hours to get it done at all within the timescale imposed, didn't have a say in how it was going to be implemented, and didn't even get so much as a thank you.
In industries where software bugs do have large consequences, well they tend to be heavily regulated industries already: finance, aerospace, government systems, automated cars, elevators, medical devices.
Realistically, I’m not sure I’ve ever seen something created by humans that was entirely bug-free.
Developing that kind of software is so different from most non-critical software that it might as well be different industries altogether.
But still, plenty of software development roles are subject to professional liability, particularly where the work is linked to people’s physical safety. As a contractor or director of a company providing software services, I’ve been required to have professional indemnity and public liability insurance, and part of that involves verification that I’m sufficiently educated and experienced to be competent enough to mitigate the risk.
It doesn’t make sense for there to be industry-wide liability standards, as roles and risks vary so much, and certification comes at a huge cost. It’s absurd that the same standards of liability would apply to an aviation software job vs the part time IT guy at said sub-20-person office whose responsibilities are limited to setting up MS ActiveDirectory and keeping the printers running.
This is a rant about a non-problem.
While I agree, the reality is that the part time IT guy is generally far more certified than the high paid software developer, which I find far more absurd.
Hardly. Any software developer working on systems that risk people’s safety - eg avionics, automotive systems, medical devices, traffic control systems - would be required to have advanced university qualifications. Google at least used to require all its software engineers to have masters degrees. Do they still? People I’ve know to work in software dev jobs at Microsoft and even mid-level companies like TripAdvisor and SurveyMonkey have PhDs. Other tech companies like IBM and Accenture sure would require at least bachelor degrees.
But sure, plenty of software developers have no formal qualifications or liability. And they’re not working on stuff that directly risks people’s physical safety.
Some developers have some certifications to cover employer liability. You cannot be a software developer for the US federal government without at least a Security+ certification, but this is rare among developers. In most of my giant corporate employers you didn’t need even a bachelors degree.
Regardless of industry or employer you cannot get hired as a help desk IT guy without a laundry list of certifications. It is a night and day difference.
The OP says: Most organizations seem to hire their first part-time IT person before they reach 20 employees. When that first IT person is replaced, the new IT person bores everybody with complaints about how "totally incompetent" the first person must have been, and, usually, is correct. When you hire somebody's teenage kid, you almost invariably get the competence you pay for.
By "somebody's teenage kid" I gather we're meant to assume this character is not qualified or certified; that's the very point of the article. I've certainly known of such people, and have even been that person. Indeed the first five years of my career were in helpdesk and network design roles, and I had no certifications.
Sure, I know what you mean, that to be serious support professional for products from vendors like Microsoft, Cisco, Oracle, etc, you need certifications. But plenty of small-business networks are set up by young, inexperienced, uncertified people such as family members and friends, and if the business stays small it's often fine.
But sure, among software developers, plenty of highly paid ones don't have qualifications/certifications, where it's not deemed necessary by employers/clients. And plenty do, where it is deemed necessary or legally required.
I guess the real point is that people are paid more for their impact and the uniqueness of their abilities, not their certifications, and it's more common to be high-impact and unique as a developer than as a helpdesk tech.
Every time I buy a 'smart' version of a product, whether its a light or coffee machine, it becomes 10x less reliable.
When your coffee machine is mining bitcoins because it's software is written in javascript and someone paid the author of left pad, that funny. When half the city comes to a hault becauae the same thing happened to traffic lights..
I’ve not heard of a traffic light failure due to the control system mining Bitcoin, and any software engineer who did that or allowed it to happen would find their career over pretty quickly.
https://www.computerweekly.com/news/252496560/Fujitsu-bosses...
"It’s hard to imagine what kind of regulations would further improve things"
1 simple law: for every product, place all firmware source-code in escrow, inspectable by police, MI6 and Courts in case of major hacks, breakdowns, and lawsuits.
You were complaining about coffee machines and lights. Not vast custom-built corporate/government IT platforms. Completely different products and a completely different discussion. And besides, the staff at Fujitsu working on such a system would likely be university qualified and certainly subject to liability insurance and contractual requirements specified by the client – which is exactly what the original article is calling for.
> 1 simple law
It's not simple at all, to completely rewrite every IP law and technology business convention in every country in the world :) And that's not what the article is calling for. It's just saying software developers should be qualified and insured.
'vast custom-built corporate/government IT platforms' are actually worse than most consumer products I had to deal with. The entire industry being infantile and irresponsible in every area it touches, from coffee machines to ATMs running windows XP and vulnerable oil pipelines.
"staff at Fujitsu working on such a system would likely be university qualified"
Traders were qualified in 2008, the crash still happened. You are missing the point.
The system encourages risk and staggering incompetence from leadership, untill the firms are held accountable and subject to real scrutiny, nothing will change. I know, first hand, a payment company which decided to switch from Perl to JS, and fired all Perl developers. Then they realised it's broken and they have no-one to fix it before JS system is ready.
"It's not simple at all, to completely rewrite every IP law"
You don't need to change IP law or anything else, you just need to equip justice system to inspect software and hold irresponsible gamblers accountable. If a Car company is accused of gross negligence, you can take a car apart and check what's going on, this is accomplishing the same for software, and to make sure it's not suddenly lost, deleted, etc. What is the "technology business convention" that we have to change? We already use version control.
We do the same for plans of buildings and aircraft, they don't suddenly belong to the government.
You seem to be arguing for things much more far-reaching than that, which you’re welcome to do, but I’m here to discuss the contents of the article, thanks.
Plumbing certainly involves physical safety and health; poor plumbing work can damage the building leading to collapse, or cause a fire/explosion, water contamination or electrical faults leading to injuries or fatalities.
I suppose the likes of MS could get away with selling a bug free operating system for only 100k/seat. All the other cheap apps with less than millions of customers will simply vanish.
I should always be free to write software to run my model trains, or even somoene else's model trains however I choose. Making the same argument for real trains (which already have lots of regulation) is much harder.
That said, if licensing did happen, there would definitely need to be tiers. Building software in-house is different than one being sold (saas or on-premise). Regulated industries would each end up with their own licenses, probably.
That said, I go back and forth on this. Something as bureaucratic as licensing doesn't seem like a great solution, but the industry is definitely lacking something. I'm not quite sure what that something is exactly. Maybe we need a split between engineering and labor, similar to construction. Liscenced engineers design and inspect the bridge, unlicensed labor builds it. Similarly, I can usually build small structures without a license, small non-life-critical projects wouldn't need liscenced engineers either.
On an individual level, expect to see this: "Our records indicate that you have previously committed (a minor, unrelated change) to a software repository that was later exploited, unfortunately we are not able to offer you a position at this time (due to insurance reasons)"
... I like this idea
And of course there is also a problem of implementation. Even with deadline in 10 years industry will not be able to certify majority of the engineers or develop an engineering process where licensed engineer in USA or EU can take responsibility for the code written by 10 engineers from another country with different standards (they can even be licensed, but those licenses won’t be recognized abroad).
Except that isn’t what software engineers largely do, we aren’t building the nth copy of the same building with a slightly different skin. Those kind of largely canned projects are straightforward and mostly offshored to low cost countries.
The other type of project is complex and unpredictable because no one knows the full scope of the project, the specifications and interactions. Most of the complexity and time in software engineering is getting that sorted, not the coding. Not to say coding something complex and non-trivial is easy, but the main challenges aren’t the code IMHO
That’s exactly what most developers do.
There is far greater variation in boring bridges spanning small streams than most web applications and yet after more than 20 years we still can’t figure it out without some giant framework to do most of it for us.
Except that isn’t what they want, they want the same “except for this, and with this extra, and change that…”. And we are back at the discover the spec stage again
Bridge building is only more predictable because it’s more expensive. The same planning problems are still there but are worked out well in advance by people who aren’t so easily confused.
You never get to 'copy-paste' anything more conplicated than a shed ir a single-story house
Contracts also imply lawyers.
What if we put the liability requirements into the contract, and see how it goes?
Might we discover that legal language is just another programming language as fraught with peril as the software?
Don't take my word for it: make that legalese happen.
On the other hand, the inevitable slowing of technology change and consolidation of libraries, languages, and frameworks would be kinda nice. Hard won, deep knowledge of technology that is 20 years old would be worthwhile. And I could finally stop yelling at JavaScript frameworks to get off my lawn.
While my heart is socialist, my head is market-driven. And I think a market solution is the best option here.
But markets only work with informed buyers.
If my literacy idea is right - then no-one can judge software without being software literate (and having access to the source.) Just imagine a world where people had to buy the best books - but that the literacy rate was under 1%. We would have podcasts on that great book, the CEO would sign off on a purchase after and .... - books would be like software is here. Success based on marketing and yes minimising liability (no one ever got fired for buying microsoft). Linux would be samizisat!
I vastly admire Poul's incredible contributions to FOSS - but software liability is best fixed in contracts (where it usually is).
Edit: The only sane way (#) to build liable software is with some form of proof-based modelling - and this is even after decades of research horribly limited and does not reach into areas we wrote or use most software.
I am afraid software is just an extension of the human technology of speech and writing. It is a way to express ourselves in symbolic form outside our brains. It is probably the second most important development in human history - and we need to adapt all of society to be able to harness its benefits without too much harm. The crap IT surrounding us now is the pollution of the first coal driven factories. We will get better - our problem is to do it faster.
On a different note, most software (hence most bad software) is written in house - so the software that makes a bank a bank or a construction company construct, that is mostly already covered by liability. Your bank sends the wrong amount to the wrong bank account? That's been a liability since before the USA was a thing, and so the onus is on the bank to ensure it writes the software correctly. The fact that this is insanely hard implies to me that we need not just "better training for software developers", but "redesign our entire organisations" and probably our whole societies (let's start here: most things written down are done so openly - published or emailed or sent around. Most software code is closed and "proprietary". Change that first)
(#) I can imagine many companies taking on software liability without caring about the risks - but they don't sound like the people I want building airplanes, power stations etc etc.
Keep in mind books/writing have been around for a long time, and language (which writing is arguably a written form of) has been around even longer and vital to both everyday life, and the human psyche.
It's going to be hard to compete there. I'd say simpler things might be achieved first: e.g. use of word-processors and spreadsheets.
If there isn’t such an example, then perhaps software is a category of its own and thus its problems can’t be solved by legacy regulatory tooling.
Licensing is about compliance. It helps better control who has access to a certain set of skills, and who can make a living off such skills.
License could require you to be certified for certain technologies, which mean whoever has the best lobbying power win (Hint, it's not Freebsd). It's a great way to keep market shares for specific interests. Not sure how this is good for the industry.
Licensing means you can put barriers to entry for specific demographics (ineligible if born in a specific country...)
Licensing means you can create an entire business model just around licensing fees and licensing bodies, which usually mean some people are left off the game.
You want to increase professional liability and overall responsibility, they are other ways.
First, you have certifications. They already exist and can give ad-hoc solutions for some specific niches, and is the closest that we have to a license today. You can create a mechanism for someone to lose their certification if they commit a professional fault (even if this would totally be used in some case for internal politics and pressuring people in doing they don't want, irrelevant of any actual professional issues).
Second, you have transparency. Company can publish internal explanations of any disaster and if people are terminated because of it, they can make this public. Not that I like the idea... but it is a middle ground - where others are given an opportunity to decide if they to take the risk hire people with public failures, while not removing someone from exercising one's profession because some project went to hell and someone made mistakes.
Anyway, overall, I get his point that he want more responsible engineers on the job, but gatekeeping an industry with licensing sounds like a recipe for an even worse shit show.