“The best part of building software is the job is never done. Since starting Box, I don’t think I’ve ever left a customer conversation where this [sic] isn’t something new left to go do. Build the future, listen to your customers, repeat.” Those words come from Aaron Levie, the CEO of Box (via Twitter).
Levie’s words resonate strongly with me. For some years now, I’ve posited that every company must think like a software company. It’s what I have described as Leading with Code. Over that time, it has become increasingly clear that for all firms, more and more value creating opportunities derive from own-account software, or the software that a company builds for itself. Executives at firms that lead with code–both incumbents and startups—view software as a source of economic value creation and the differentiating asset that it is. Many others, even those that have recognized the strategic importance of software, still have a very different mindset.
What hasn’t been totally clear is what it really means to think like a software business. I recently conducted research with executives at both established companies and younger tech firms operating in physical world businesses—so as to maintain a level of equivalence—in order to learn more. These companies were in a wide range of industry sectors, including consumer packaged goods, financial services, insurance, manufacturing, medical devices, pharmaceuticals, restaurants, retail, technology services, and transportation and travel.
Here’s the key takeaways for companies who want to make the leap to truly thinking like software businesses:
1. Assemble and develop in-house talent
Companies that lead with code, whether startups or long-established businesses, all rely on in-house and highly capable talent to build distinctive software. They don’t routinely consider hiring external services firms to build key software. They see software developers as creators and problem solvers, not just coders. Their developers engage in important open-source communities, learning continually about the latest developments in software products and practices.
2. Implement a modular architecture
Leading companies feature software stacks that are modular, facilitating rapid innovation. Their developers frequently build in-house software products or platforms by leveraging free, but valuable, open-source software, as well as licensed components for routine functionality. This allows them to create applications faster. One executive stressed the importance of designing components with change in mind, because reconfiguring is always better than rewriting code. Another executive told me that every line of code within this decentralized architecture has a clear owner so that there is specific responsibility for each and every software component. To be clear, commercial solutions have an important role to play and should be a part of the software stack. But it’s the own-account software that matters most.
3. Embrace experimental innovation
Once you have plenty of in-house talent, new pathways to superior software products become available. A popular traditional approach is to license commercial packages with wide scope, and then to configure or customize them for your company. In contrast, firms that lead with code typically begin by aiming to solve a focused business problem. They build and iterate on new features and products. Executives at these firms told me that until you try something out and see how your customers, suppliers, or employees react, and whether your business improves as a result, you can’t be sure of what to build. The learning must influence what you choose to do next.
4. Start small, then build scope and scale
One consequence of experimental innovation is a willingness to build systems that aren’t initially always highly accurate or resilient. One leader I spoke with shared how they are observing the rollout of a new machine learning-based system and quickly reverting back to a default and tested algorithm if the new predictions seem unreliable. They build for scalability and resilience only after they have figured out the algorithmic logic and the functionality. As machine learning applications account for a growing share of software applications, with knowhow from the learning systems incorporated into run-time systems, this is even more relevant. While this tenet is important, a caveat is also in order. There are many environments in which reliability and resilience are paramount and approaches will differ in these.
5. Balance the risk of error against its benefits
CIOs, for obvious reasons, are generally risk averse when it comes to software development. But a greater willingness to accept initial errors can reap significant dividends in terms of increased efficiencies. For example, one of the companies I interviewed had a leased strategic application that was not only expensive, but unsuited to its business model, often recommending inefficient solutions. The company assigned a couple of talented developers to build an “adequate” working replacement quickly.
Executives recognized that the system would make mistakes and they would have to reimburse customers when things went wrong. However, they were willing to take the risk because the savings in license fees gave them a margin for error. In time, they iterated and continually enhanced the system, ultimately getting them to a solution that was distinctive.
In a digital world, distinctiveness often results from codifying unique knowhow, something a firm knows how to do better than its competitors, in software and applying it at scale. Fundamentally, it’s about continually offering a superior value proposition and doing so more productively than before.
It’s particularly important to keep in mind that as digital technologies keep evolving, the ability to continue to enhance your products, services, and operations is unending. And as Box’s Levie points out, the journey is never done.