Our Approach to Web Application Software Architecture
When software architecture is well designed, the application is robust, scalable, accessible, and successful. When a web application and the underlying architecture is poorly designed, your site can be unstable and perhaps more importantly, unusable.
The preceding statement sounds interesting, right? But what does it really mean? Far too often clients building a website or other custom software solution are left feeling confused and at the mercy of the team building the software. We feel it is important that you are empowered and a part of the design process. After all, it is your product and your business that we are talking about.
Most web applications are not standalone. Software as a Service (SaaS) is usually comprised of multiple applications within the context of a transaction. A transaction might mean returning stock prices, completing a payment via merchant gateway, or some other useful service spread across web services or micro services.
Your application may include a database. This is where our focus initially begins. This is inline with a design concept called Domain Driven Design (DDD). The database (or model) and business logic are developed first, followed by the user interface. A well-designed database can provide very fast transactions and be cost effective when hosted on a pay per use platform, such as Microsoft Azure. When a database is incorrectly designed, the implementation could conversely be much slower and exponentially more expensive. We recommend Microsoft SQL Server for all database implementations.
A well-built application consists of many logical layers. These layers, comprised of software objects, communicate with each other. The interfacing of these components (groups of software objects), should be done using best practices of software design principles. At a high-level, you want a software object to communicate with the definition of another object, but not with the object itself. This is called programming to interfaces and allows for components to be interchangeable using dependency injection (DI) and inversion of control (IoC). Our Integrated Development Environment (IDE) of choice is Microsoft Visual Studio .Net. Take a deeper dive into IoC by reading our proof of concept article here.
Your custom web application may include the ability to conduct merchant payments, such as using PayPal or Authorize.Net. In this case, and other external application programmable interface (API) calls, it is important that the communication is done asynchronously so as not to lock up your system (which keeps it from processing subsequent requests until completed). When done incorrectly, API calls can decrease availability and hurt the user experience.
When it is time to deploy to the cloud, experience developing and deploying Docker containers to an Azure Kubernetes Service (AKS) Cluster is important. Read more about experience developing and deploying to AKS here.
In summary, we want to empower you with some basic understanding of high quality software design principles and how they relate to your project. We are more than happy to dive into the details with you regarding the patterns, features, and processes that go into building a successful software product. Contact us to discuss your web application development needs and get answers to any questions you may have.