What is modern software development?

Modern software development is not just about using the latest tools and frameworks, it's more about how and why use them. It has become about following best practices to produce high quality code, resulting in high quality applications which means happy users and customers. It's a change to prioritize the customers and users experience with the product.

The latest tools and frameworks for software development truly ease the follow up of those best practices and facilitate the establishment of processes that once were complex to use. But which are those best practices and processes? Best practices are mentioned in The twelve-factor app and they are:

  • Use declarative formats for setup automation, to minimize time and cost for new developers joining the project;
  • Have a clean contract with the underlying operating system, offering maximum portability between execution environments;
  • Are suitable for deployment on modern cloud platforms, obviating the need for servers and systems administration;
  • Minimize divergence between development and production, enabling continuous deployment for maximum agility;
  • And can scale up without significant changes to tooling, architecture, or development practices.

Thanks to cloud computing and open source projects modern software development has become much easier to do than a couple of years back. Let's use as an example the third point mentioned above about modern applications:

"Are suitable for deployment on modern cloud platforms, obviating the need for servers and systems administration" - The twelve-factor app

This sentence is key thinking for modern architectures on cloud platforms, especially for serverless computing (a great definition given by AWS can be found here). With serverless architectures you can focus on the product under development. And what matters the most to your clients? exactly! the end product. By delegating to cloud providers the administration of servers, you end up using your precious time and resources on what matters most to your clients, allowing you to deliver awesome products and then brag about your long list of happy clients.

Another example would be modern web applications or Single Page web Applications (SPA). These kind of applications are built by packaging all components of the application as static files, serving it as prebuilt files and then requesting only the dynamic data with no need to reload the application on every request. The most mentioned benefit of SPAs is making a web app feel like a native app, improving the User Experience (to know more about UX and it's importance go here). Another benefit is the ability to use various strategies for caching static files that further enhance the UX.

Let's talk about release processes taking into consideration the fourth point mentioned above:

"Minimize divergence between development and production, enabling continuous deployment for maximum agility" - The twelve-factor app

Minimizing the divergence between environments gives you the opportunity to fully take advantage of automated tests and releases of versions or new features by using continuous integration and continuous delivery/deployment (great content about CI/CD here). Reducing or in some cases eliminating the need for manual tests and manual release processes allows a development team to frequently integrate and release changes, meaning less impact when deploying to production and better code coverage by the automated tests. Just think about companies that integrate or release changes daily without using the mentioned above... what a nightmare!

Why modern software development?

Today, app users are quite demanding and have big expectations for all software they use. This user behavior is due to the fact that on a daily basis they interact with software built leveraging the great advances that software development has had in recent years. Three important components of this progress are open source development, cloud computing, which has made accessible incredible technology to businesses of all sizes, and lastly the practices and processes used to guarantee product quality such as automation of tests, continuous integration, continuous delivery/deployment, source code repository workflows, etc. Make these three components part of your project and you will be able to deliver up to the user expectations.

If you have an idea, need a software solution or additional hands on your development team then we can help, feel free to contact us.

References:

Feature photo by Max Nelson on Unsplash