This is part one of a three-part series on Codeship that delves into how we can move faster in the software industry, what we need to focus on to move faster and changes in our industry that can help us improve our speed. You can find part 2, where I talk about cloud services, here and part 3, where I talk about maximizing team output, not individual output, here.
The idea that "software is eating the world" has become one of the guiding principles of the software industry. We’re moving into markets that have been low-tech to no-tech to provide better services for the endlessly growing number of people using always-connected devices.
Netflix, Amazon and Uber are just some of the most prominent examples of companies using software to gain an advantage over incumbents. And the many startups popping up under the umbrella of the “sharing economy” are the next wave of technology-enabled, everyday services that will continue to change how we work and live.
This creates a massively competitive market where software companies aren’t just competing with incumbents but also with other software companies going after the same market. There is constant pressure on your company from competition as well as customers, not to mention internal pressure on your product to move faster and ship more.
So how do you move quickly, keep up with that pressure and stay ahead of your competitors?
Speed wins the marketplace
Adrian Cockcroft, one of the leading people behind the success of Netflix in the cloud, has said repeatedly that “speed wins the marketplace."
Moving fast, learning from your customers and iterating on your product quickly are things that many teams try to do but fail to execute due to limitations in their infrastructure. They might be able to talk to their customers and get feedback, but they fail to push that feedback into new iterations of their software. The result is that these companies lose to competitors that have infrastructure in place for such updates. Companies that want to make best use of product feedback need to start working on their software development, not just their software.
Differentiate through software development, not software
Simply having great software at one point in time will not help you win your market. Only when you’re able to build a team and practices that allow you to consistently and repeatedly build great software will you be able to stay in front of your competitors.
Netflix and Amazon are two of the best examples of great software engineering being used to drive market expansion. Investing in and learning about the latest practices in software development are the cornerstones of building such a successful team. For example, continuous delivery is definitely one of the core principles your team should understand and work toward.
One of the best resources I’ve found so far for learning how to bring speed into your company is the book The Phoenix Project by Gene Kim, Kevin Behr and George Spafford. It delves into the issue of creating a productive team that can ship, even in large companies.
Don’t forget video resources. Henrik Kniberg has done an amazing job presenting the engineering culture at Spotify in the following two videos, sure to inspire productivity:
The Netflix engineering blog is also a great resource to learn about their specific engineering challenges and how they solve them.
You will never have enough developers
Another constant bottleneck for any team is hiring. You will absolutely never have enough people to sustain the workload while you are in growth mode. Hiring will be a constant pain because the number of people who fit your specific job description is very limited.
Obviously, improving your hiring is one of the most important factors to your company’s success. You still need to live with the realization that you will never have enough people for everything you want to do. Therefore, you need to make everyone on your team as productive as possible to even stand a chance in the market.
Productivity and focus are your first priorities
So we know that software conquers every industry, talent is really hard to come by and competition moves incredibly fast. Building a team that can focus on the right things and solve them with as much productivity as possible needs to be your goal. This sounds like something that every team would be doing, but many aren’t.
To make sure that you’re building a productive team, focus on a few next steps immediately after your product has started getting some small traction. For example, set up an automated continuous delivery pipeline, write automated tests and build an infrastructure that makes automation and deployment easy.
If you don’t focus on your speed and productivity, you’ll open yourself up to attacks from other companies that see your success but can move much faster than you can to win your market. You need to stay ahead of the pack at all times.
Let’s be honest: a lot of the tasks that are done by your development team are a huge waste of time. Updating running instances, scaling your infrastructure or even removing faulty servers from circulation shouldn’t be something your team worries about. The best way to optimise any task performed by your team is to not have them do it anymore. Moving work away from your team and into services as aggressively as you can will free them up to provide the biggest value to your customers. You’ll also be building a successful and scalable infrastructure.
The revolution has happened. The cloud is here to stay
Over the last years we’ve seen a revolution in how we build applications. In fact, the latest earning numbers of AWS and others suggest that it’s only just begun. This revolution hasn’t been introduced through virtualization or separating application from infrastructure development. Both have been around for decades. The real revolution is the accessibility the cloud gives to teams of any size.
Teams of any size are now able to build hugely complex infrastructures while keeping expenses manageable. Factor in a smaller team size and the additional speed your team gets from cloud providers, and you can see how expenses can scale well with the growth of the business.
Decouple infrastructure growth from team growth
Remember when I said that you’ll always struggle to have enough people on your team? That means you need to find a way to grow your infrastructure and customer base without having to hire at the same rate. Decoupling infrastructure from team growth is one of the major challenges teams face today when they grow.
Engineers should be dedicated to building your product, not maintaining your infrastructure. Infrastructure should be treated as software, so it can be automated in terms of scaling but also self-healing. Plus, infrastructure that detects anomalies in itself and corrects them will free your team to focus on building a better product for your customers.
The following graph shows the movement in terms of time distribution that you want to see as you grow your team:
By automating most of your infrastructure from the beginning and investing into it over time, you’ll be able to reduce the time you have to spend on maintaining and building it. You can take advantage of the cloud and higher level cloud-services and focus on building your product as you grow your engineering team.
For a great first-hand example, check out this post about Netflix engineering on the Nginx blog. Netflix has reduced their need for a storage team down to one person:
“Netflix, for example, stores data on Amazon Web Services (AWS) servers with SSDs and manages it with Apache Cassandra. A single specialist in Java distributed systems is managing the entire configuration without any commercial storage tools or help from engineers specializing in storage, SAN, or backup.” -Tony Mauro, “Adopting Microservices at Netflix”
Obviously, we’ve got to make sure our teams move faster and are more productive. Obviously, we’ve got the tools now to make that a reality. Next week, let’s talk about the future of the cloud -- how it’s in its next evolutionary stage of becoming even more service-oriented and how we can take advantage of that.