1. 程式人生 > >Move Slowly, and Don’t Break Things

Move Slowly, and Don’t Break Things

So how should we approach software development in the future?

Ironically, the answer might be found in industries that have been criticised for being slow and old fashioned. Engineers can’t afford to build bridges with design flaws. Doctors can’t prescribe the wrong medicines and then fix their mistake a few days later. Airlines can’t launch a product with 90% assurance. Digital technologists would do well to take a leaf from their book.

Aviation is a particularly good example. In 2017, commercial aviation flew over 4 billion passengers on 38 million flights without a single fatality in a scheduled jet airliner. It’s a remarkable example of what can be accomplished when political will, resources and expertise become focused on reducing accidents and injury.

It happened because the industry realised that individual efforts were never going to be good enough. Because real lives were at stake, ever-rising expectations forced airlines to constantly improve. Don’t be evil didn’t cut it, only zero fatalities would do. The standard wasn’t do better, it was be perfect

.

Manufacturers had to build better, safer planes with improved design and performance. Pilots improved their skills. Regulators provided improved oversight, and accident investigators generated better analysis of the decreasing number of accidents. Flight attendants improved evacuations, and dispatchers built new tools to make better decisions. Maintenance technicians improved procedures to enhance reliability and safety.

This stuff isn’t sexy. Technicians and pilots, for example, are forced to step through an exhaustive, boring and very predictable set of instructions before every flight. You certainly won’t see that in the decks of thought leaders at expensive conferences on innovation. But a boring checklist is effective. As Zach Holman points out in his excellent 2014 talk, it removes ambiguity. All the debate happens before something gets added, not at the end. That means when you’re about to launch a product (or take off from a runway) you need to worry less about implementation and more about process.

Good dev shops of course, do this as a matter of course. At Apple, they have an internal checklist that goes into great detail about the process of releasing a product from beginning to end, from who’s responsible to who needs to be looped into the process before it goes live. Even before a team starts working on something, they make a checklist to prep for it. Do we have appropriate access to development and staging servers? Do we have the correct people on the team? When you’re done, you check it off. Easy to collaborate on, and easy to understand.

At Github, they approach it slightly differently. While moving fast and breaking things is fine for some features, for others it’s not. Their first step is identifying what they cannot afford to break, for example, things like billing code, upgrades and data migrations. Once they’ve identified these areas the challenge becomes how to leave them untouched, or at least, get 100% assurance on any changes, while still making fast and small edits in other areas. It’s like changing an engine while a car is running (and just as tricky). Upon deployment they then run simultaneous versions of the software. In a nutshell, the idea is running both the old and the new code, and only switching to the new code if it performs at least as well as the old version over a significant period of time.

Ultimately though, these solutions don’t fix the underlying problem. Facebook for example, changed its motto in 2014 to “Move Fast With Stable Infra” (catchy right?) implementing more automated tests, better monitoring and extra infrastructure to help identify bugs as early as possible. None of that helped them when fake news, election hacking and data privacy blew up in their faces.

The problem wasn’t technical — it was cultural. Engineers at the company simply weren’t able to conceive of use cases where their product could be abused by people who didn’t share their worldview.

That’s why the next generation of technology people needs better training. Medical students spend a lot of their undergraduate years been taught to think critically about the ethical implications of their decisions.

The same should be true of software engineers.

And the good news is that this does seem to be slowly happening. Microsoft researchers have written a Hippocratic Oath for artificial intelligence, and Stanford University, the academic heart of Silicon Valley, is developing a computer science ethics course to train new technologists and policymakers to consider the ramifications of innovations like autonomous weapons or self-driving cars before they go on sale. As Mehran Sahami, one of the course’s conveners says, “Technology is not neutral. The choices that get made have social ramifications.

Ultimately, the safest bulwark against baking bad ideas and flaws into code is diversity. Groupthink is a deadly enemy in a world of hyper connectivity, exponential technologies, and unintended consequences. Diversity mitigates it. The ability to draw on contrasting worldviews, and to run ideas through teams that differ across gender, age, political affiliation, race, neurology, class, profession and cultural background ends up building far more robust products that are do less harm once unleashed upon the world.

We know these are aims shared by the vast majority of people working in tech. It’s an industry that’s united by a belief that digital technologies are a remarkable tool for improving human lives in a truly transformational manner. The question is: can we, as tech people, be better stewards of what we’ve built? Can we learn to move a little slower, and stop breaking as many things, in the interests of building a society that works for everyone?

We’re all going to find out, one way or another.

We help people understand what’s on the frontiers of science, technology and human progress, and what it means for humanity.

Our free, fortnightly email newsletteris filledwith stories about people from around the planet who are using science and technology to make the world a better place.

You can also catch us on Facebook | Twitter