As an engineering discipline, software engineering is still in its infancy. We’ve experienced many projects with difficulties, delays, quality or other issues. These projects tend to have common symptoms such as:
Code change paralysis. This is the fear of making changes as a way to prevent failure. Current solutions are hard to maintain or to evolve, or so fragile that the slightest changes can have catastrophic effects on the whole system.
Lack of automation along the delivery lifecycle. This means that lots of manual effort is needed to get new requirements into working software deployed to production.
Test environments which are limited in available time or resources. This causes test efforts to be inefficient or partially wasted. For example, tests that are not executed in environments representative of the production may fail to identify important bugs, impacting the end users.
Brittle, tightly coupled applications that fail often, unpredictably. They require significant effort to be kept up and running.
A few companies, however, are experimenting with new software engineering practices, with great results. Amazon can put new software into production every 11 seconds by making small, independent changes with fully automated processes. These changes can only impact small chunks of the platform at a time. Flipboard optimized their cloud workloads to embrace a cloud-native serverless approach for API design. This saves them $19 million dollars a month. Then there’s Netflix that uses ‘chaos engineering’. This allows Netflix to proactively identify and resolve platform issues in production before they impact their customers. Or, Spotify, whose Agile team’s organization and culture are inspiring others.
These success stories help us define Modern Engineering: the perfect blend of Agile and DevOps with cloud-native architectures.
The benefits from embracing Modern Engineering are huge:
How cool would it be to deliver at the pace of business, transforming new ideas into business value in a matter of days, and not months?
How great would it be to provision new environments dynamically, in a matter of minutes, or to scale existing services automatically in a matter of seconds?
How pleasant would it be to have all common tasks automated, so humans could focus on creative work and problem solving?
How easy would it be to operate solutions that are resilient and easy to observe in case something goes wrong?
To transform and reach that point of "awesomeness", Modern Engineering combines practices from Agile, DevOps and cloud-native into 10 principles:
Have a product- and customer-centric vision for the whole organization.
Agile teams should work in a decentralized manner.
Plan work based on value prioritization.
Cross-functional teams should reduce dependencies on others. This includes all the functions needed in one sympathetic, collaboration-driven unit of work.
Teams must deliver, reflect and improve in a virtuous cycle of continuous improvement.
Automated pipelines should efficiently transform changes in code or configuration into working software.
Establish built-in quality along the pipelines, including all testing activities and security vulnerability checks. This will ensure that software is always built the right way, and with the expected behaviors.
Create decoupled and distributed architecture design that’s highly available out of the box and capable to auto-scale as needed.
Engineering should be resilient by design, capable of self-monitoring and self-healing, and easy to observe in all environments.
Power this all by the infinite (in practice), elastic supply of resources available in the cloud.
In this new world, "it is not the big fish which eats the small fish, but the fast fish which eats the slow fish". Modern Engineering can be a key enabler for business agility, allowing organizations to transform and move faster to compete in this rapidly changing business and technology landscape. It can transform new ideas into value quickly with the highest standards of quality and levels of automation in our industry.
Senior Technology Architect at the Advanced Technology Center in Spain
Global Java practice co-lead, and custom software engineering, architecture & DevOps lead at the Advanced Technology Center in Spain.
Antonio De La Prieta
Managing Director at the Advanced Technology Center in Spain
Lead of custom software engineering, digital, and Salesforce practices at the Advanced Technology Center in Spain.
Subscribe to Accenture's Software Engineering Blog BlogSubscribe to Accenture's Software Engineering Blog Blog