I did this presentation in June last year at a conference in India and I really wanted to share it so here we go: from code to data, or how users today are training products like we train dogs to perform specific tasks. It’s a long narrative story so I am going to spread it across a few weeks’ posts. (Read The End of Code Part One here and Part Two here)
The end of code
So, we have talked about the trends we see in the tech marketplace, going from data aggregation to making sense of data in order to enable full personalization of a product that, in a way, self evolves in the hands of the user as they continuously interact with it. We also discussed that these tech product trends are making users evolve rapidly in their relationship and expectations, and with it, the tech business models are rapidly changing from pure user network effects and economies of scale to data network effects and AI-driven systems of intelligence.
Now let’s talk about the implications this may have for the skillsets required to implement and successfully deploy those business models.
Software has already eaten the world and today we’re all surrounded with machines that convert actions, thoughts, and emotions into data - the new raw material (“data is the new oil”) - for armies of coders to manipulate.
Life itself seems to be ruled by a series of instructions that can be discovered, exploited, optimized and perhaps re-written as companies use code to understand us as intimately as possible from sleep patterns to spending habits and everything in between.
As a result, today, the ability to code has become not just a desirable skill but grants insider status to those who speak it fluently: “if coders don’t run the world, they run the things that run the world” (Bloomberg).
However, coders should not get used to it: our machines are today starting to speak a different language, one that even the best coders don’t fully understand.
Indeed, over the past several years, machine learning in Silicon Valley has aggressively become front and center, and for very good reasons. See, in traditional programming, an engineer writes explicit, step-by-step instructions for the computer to follow. But with machine learning, engineers don’t code computers, they train them. Example if you want to teach a neural network to recognize a cat, you don’t tell it to look for whiskers, ears, fur, and eyes. You simply show it thousands and thousands of photos of cats, and eventually it works things out. If it keeps misclassifying foxes as cats, you don’t rewrite the code. You just keep coaching it.
This approach is not new, the math behind it has been around for decades—but it has recently become extremely cheap due to a massive reduction in storage and processing power costs, as discussed previously.
As a result, today, machine learning already powers a lot of apps, example Facebook uses it to determine which stories show up in the News Feed, Google Photos uses it to identify faces, Microsoft’s Skype Translator using machine learning to convert speech to different languages in real time. Self-driving cars use machine learning to avoid accidents.
As machine learning changes drastically user experiences, the world of coders is also definitely changing rapidly: the days of writing linear programs are basically over. Example, after a neural network is trained on speech recognition, as a programmer you can’t go back inside and look and see how the learning happened - because when you look inside a neural network you see a multilayered set of billions of data points that constantly evolve in their relationships and simply generate guesses about the world.
Indeterminacy and un-parsable machine language has direct implications for coders
The current shift is giving users a more rewarding relationship with technology, an experience that is more personal. But this also means that experiences can no longer be reduced to a series of comprehensible instructions, indeed, machine learning basically goes in the exact opposite direction: indeterminacy.
As for the past two decades, learning to code has been one of the surest routes to reliable employment - today the world is increasingly run by neural-networked deep-learning machines, this requires a very different workforce ....
Engineers have to be able to create a combination of handwritten linear code that uses the power of machine learning to adjust it - and to train these systems. This is still a rare combination of skills, because the job requires both a very solid high-level grasp on math and a very good intuition ... In addition to all the “old” programming skills.
Data-centric and inferencing evolutional culture
In previous posts we have discussed that the days of programming systems linearly with predictable outcomes are numbered and that this cultural shift in software engineering is accelerating: machines today are increasingly not “programmed”, they are trained, and data inferencing, not coding, is now the new center of inertia of the DevOps teams.
Today’s software products are being built as systems of intelligence by data scientists who know classic software engineering. In that order… This means that the skillset we are requiring for building our next generation of products is shifting towards data-first designs.
What are the implications for startup software teams structure? First of all, we’re looking at blurring lines between data science and devOps with the addition of machine learning for personalization (as we discussed earlier) and data at the everything center of inertia. It’s almost certain that product managers and traditional marketing are going to disappear, to be replaced by full stack designers who go all the way from design ideation to code and the use of data science techniques towards data marketing science. With the addition of the feedback loop created by usage data, users are directly training their software to perform the way they want, generating inferences at the aggregate of a population of users, which means that no single users will experience the same product identically. This will in turn change the way with qualify and support software. In other words, with Indeterminacy and un-parsable machine language combined with data being the customer (and vice versa) comes a new way of looking at how products are built, maintained and supported.
In order to cope with such a dramatic culture shift, we’re looking at enhancing team skillsets. We discussed this in the first section: lifelong learning today is a given and we believe that we have reached this cross-roads were we must learn new stuff while maintaining our existing technology advantage. Or fall behind very quickly.
Let me know what you think! DM me @philippemora
My name's phil mora and I blog about the things I love: fitness, hacking work, tech and anything holistic.
Head of Product and VP Engineering at Sikka Software.
thinker, doer, designer, coder, leader.