As we explore the technologies that form the basis of IT modernization, we cannot ignore the importance of modern application development. Let's explore what a modern application is and what it takes to deliver its full potential.
What Is a Modern Application?
Architect Louis Sullivan coined the concept of "form follows function" in the late 19th century and early 20th century to essentially mean the design of any object should largely relate to its intended function. We can also apply this concept to 21st century software design. Modern applications are a result of the need for four key characteristics and functionality: scalability, portability, resiliency and agility.
- Scalability: Today we need applications that can scale to millions of users on demand across the world.
- Portability: Modern apps need to be designed to run across multiple cloud and on premises environments, with the flexibility for enterprises to choose cloud providers, draw from a wider skills base for managing their applications and increase platform reliability.
- Resilience: Modern apps set the bar for resiliency higher than for traditional applications. In a world that is increasingly reliant on networks for medical connectivity, disaster management, financial transactions and weather predictions, there is an imminent need for more-resilient apps that customers can depend on.
- Agility: Agility in the modern software world is no longer a nice to have, agility is now the need of the day for organizations to survive and thrive. Our software needs to imbibe this in process as well as product.
So what does it mean when we say we are building applications that support these four characteristics?
Related Article: Modernizing Legacy Tech: Big Bang or Piecemeal?
Essential Elements of Modern Application Development
Now that we understand the characteristics of modern applications, we need to understand the development process and essential elements that can get us there. Some of the basic principles of modern application delivery include:
Support for Continuous Deployment
In a decoupled architecture, teams are organized around smaller incremental builds that can be deployed faster and progressively. The concept of large releases that require immense planning and large-scale documentation is a construct of the monolith architecture. Continuous integration and continuous deployment (CI/CD) pipelines enable organizations to rapidly test and release smaller code increments. The benefit is the ability to launch a large number of small code releases with fewer defects rather than one huge code release a year which might take even longer to fix defects on. Building applications that utilize and work on the concept of continuous deployment is essential for building a modern software enterprise.
Another important element in developing modern applications is the concept of continuous collaboration. Unlike a traditional monolith approach, where requirements gathering with the business and users happened at the beginning of the software development cycle, the agile incremental nature of modern software development requires continuous conversations with users who are part of the agile development teams.
Modern apps cannot be developed in segregated forums. They require smaller agile teams, which include users, developers, testers and operations teams working in tandem to develop code that is nimble and easy to deploy in small manageable chunks.
Integrated Security Through DevSecOps
Shift left security and DevSecOps are the cornerstone of building resilient and secure modern applications. The power of DevSecOps lies in designing for security rather than adding security as an afterthought. This not only reduces testing time and defect resolution toward the end but also reduces vulnerabilities. Modern software development needs to evolve processes such that security is introduced into the design and code is scanned for vulnerabilities as it is checked into the repository.
Building Services and APIs
One of the most important elements of modern software is building software in small chunks that can be incrementally pushed through to testing and deployment. In addition to promoting reusability, the concept of microservices is based on building reusable chunks of functionality. In addition, standards-based application programming interfaces (APIs) to expose legacy code have also gained popularity to get access to legacy data.
Both APIs and microservices are instrumental in reusing existing code, thus reducing work and increasing throughput.
Related Article: What Microservices Bring to the Digital Workplace
One of the benefits of app modernization is that adoption of the underlying technologies force application developers to abstract the app from the underlying hardware. This increases portability and opens up the possibility to transition software from on premises to multi-cloud and hybrid environments. This not only adds flexibility, it also provides the ability to use cross-cloud management tools for governance and monitoring. Modern apps don’t care where they are running on bare metal, in a container or in a virtual machine (VM). VMs, containers and serverless functions all provide ways of packaging an app into an environment on which it can run.
Use of Automation
Last but not least, modernizing an application portfolio is akin to opening up the enterprise to an entire suite of automation technologies, ranging from the use of orchestration tools like Kubernetes to using practices like infrastructure as code (IaC) to provision the entire technology stack for an application. Traditional infrastructure was hardware, and traditional source code was websites, apps and back-end services. Using IaC technologies anything can be source code — servers, firewalls, routers, load balancers, identity permissions or all of it. Using the power of cloud and AI, modern software development can be used to scale on demand and be provisioned and de-provisioned automatically.
The Backbone of IT Modernization
Modern application development is the backbone of enterprise IT modernization. Modern applications introduce operational efficiencies, upsurge resiliency and increase competitive differentiation by enabling agile and rapid innovation. By altering architectural patterns, operational models, making use of cloud and automation technologies and using the best practices of modern application development, organizations can experiment more and turn ideas into reality at a much faster pace.