Amido turned ten years old last year. Ten years in technology is a very long time and while innovations have come and gone over this period, the founding principles of the company have remained as important today as they were when Amido was conceived.
Like all businesses, successful technology companies are built on the foundations of a compelling value proposition. For some, this is simply to say, “our product solves these problems” and for others it’s, “we have the best software craftsmanship”.
Amido has always looked at things a little differently. Products, frameworks and craftsmanship are all important ingredients for successful technology solutions, but these items alone cannot deliver digital transformations.
We believe in the power of collaboration to create the best outcomes for our clients, using whichever technologies are most appropriate. It is teams of people with a blend of the right expertise who build a better future, using the right products and frameworks combined with the best possible engineering practices.
The problem our industry faces is a shortage of appropriate talent. Everyone in our sector will tell you that hiring the right people is one of their biggest challenges today, and it’s having a direct impact on the outcomes of many digital transformations.
What do I mean by the term “appropriate talent”? Our industry needs people with aptitude in an increasingly diverse set of skills, coupled with experience of delivering with those skills. Both aptitude and experience are equally important; you need people to be capable of innovating in their field, and at the same time rely on previous successful work so that an initiative is not derailed by common complexity experienced in most digital transformations.
Around seventy percent of digital transformations fail, and one of the causes of failure is complexity. Complexity kills because it is time consuming to deliver. Being slow to deliver value is the enemy of success.
We use lean software development practices to eliminate it. However, some problems are inherently complicated, meaning some solutions cannot avoid complexity. Moreover, much of the technical complexity we see is non-functional, which compounds the risk of failure, because much of this complexity is not visible to key stakeholders. It is all too common for a project to be delayed, because towards the latter stages of project delivery, a security issue was uncovered, or it was realised the solution could not scale. Worse still, these issues were not spotted at all and would get discovered after the solution was “tested” by the general public.
So, when a solution is necessarily complex, what strategies do we adopt to avoid failure? At Amido, we have always employed three common strategies that perform distinct roles in reducing risk:
Despite this, we still face a crisis in our sector around a shortage of appropriate talent. While we are “coding less” than we used to, we are faced with a different, yet equally challenging, problem of technology diversity.
Adopting a mentality of applying “the right tool for the right job” has contributed to the rise of polyglot programming . The benefits of coding less are traded off against requiring developers who have experience in coding in multiple and varied languages across different paradigms, such as object oriented and functional programming .
Like many other companies, we address issues of technology diversity by assembling teams of people with a diverse set of skills; delivering in a cloud-native world with a full stack of skills is a team pursuit. This approach enables us to position people with the appropriate talent to contribute productively for our clients at scale. But like so many solutions, more problems are created. As we scale our delivery capability, how do we maintain quality in our engineering practices? How do we harvest the learning from one project to ensure that its successes are replicated and its failures are not repeated?
Amido Stacks was conceived to ensure that learnings by people on project teams were not lost; we wanted to ensure that the company as a whole benefitted from “muscle memory”. Repeatability of good practices, while avoiding previous failed experiments, breeds success for our clients. We aimed to move from software development being purely a craft to an industrialised process based on the best crafting our collective brains could manage.
The aim of industrialising software delivery is not a new concept. The first thing we looked at when considering how to address this challenge was to look back at previous ideas and thinking in this area. In 2004, Jack Greenfield et al published a book called “Software Factories”, which is based on theory that can be traced back to the mid 1970s . In the early 2000s, software factories were seen as an answer to a “capacity crisis” in developers, by industrialising software development. Software factories focus on “assembling” new software from previously created assets, similar to a manufacturing process. It goes beyond the concept of design patterns because we are building software to create software proven to work.
Amido Stacks is a cloud-native software factory. It uses software factory theory against modern tooling to deliver more predictable outcomes in cloud-native solutions. It addresses the challenges of technology diversity by supporting the clouds, services, frameworks and languages Amido work with most frequently. We often refer to Stacks as being a menu of “options with opinions”, where the options are limited set of proven solutions, and the opinionated code is the output of the software factory.
The software factory approach delivers two key benefits for our clients. Firstly, we are able to incrementally deliver value to our clients more quickly (through automation). Secondly, we are able to reduce the risks of delivering software that is unnecessarily complex. These two benefits will reduce the seventy percent failure rate of digital transformations. And for Amido, Stacks enables us to scale our own engineering capability without compromising quality.
Building a software factory is not a small undertaking and Amido is committed to continually investing in Amido Stacks. Yet Amido Stacks is not a product; a factory is an assembly line of relevant automation for the specific (client) problem you are solving. Amido is not a product vendor; we are a consultancy. We focus on delivering better business outcomes for our clients through the use of cloud-native technology. We were founded on the principle that to provide good advice to our clients, we must remain vendor agnostic.
Therefore, we did not want to create a software factory that locked our clients into a product. So we decided that Amido Stacks needed to be an open source initiative. We have created a contribution model that enables everyone to contribute to the factory, while we continue to invest in it.
Ten years on from starting Amido, we see Amido Stacks as the manifestation of many of the principles we hold dear. It tackles the complexity of delivering at scale using cloud-native technology without vendor lock-in, giving our clients more confidence to take on their most challenging digital transformation challenges.