by Joel Pascua –
Although user experience may be the key business driver to ensure the success of a system, the inherent benefits of a scalable architecture will provide a consistent backdrop to manage SLAs and provide a seamless user experience. This blog offers some guidance to ensure we provide our product team in the right direction to ensure product quality that will scale from requirements to deployment even from sudden and exponential demand.
Knowing your digital customers and partners
Scalability cannot be an afterthought and must be thought of from the start, and it begins with understanding your user needs. When conceptualizing your application, knowing your digital customers plays an essential part in understanding how to scale your operations.
- Use roles and personas to identify your customer base. This would provide an initial insight of the peaks and troughs of the demand for your system.
- Identifying your target regions and market segments help in narrowing down the placement of cloud infrastructures to bring the service closer to the client.
- Consider your target customer devices to understand the mobile specification boundaries that the application must work within.
- Consider your target customer location while using the app and strike a balance between offline and online content.
Identifying key partners
- Identify third-party dependencies early on in the development lifecycle and craft strategies to mitigate failures and interoperability risks.
- Service providers need to be viewed as partners to be able to rely on an optimized level of support.
- Envision to provide external secure web services not just to support your application but to support partner applications as well.
Designing to scale
While the obvious choice would be to build with micro-services, containerize them and put your application in the cloud, the reality is that some considerations must be taken in to account with real-world complex enterprise systems.
The micro-services service architecture must define the design strategies to ensure the stability of your application. However, applicability must be evaluated against the micro-service use case. A one size fits all solution would be a costly proposition in maintaining these services, as they are not equal in the value they provide to the business.
- Identify and focus on securing micro-services that are highly susceptible to distributed denial of service (ddos) attacks.
- Use automated horizontal scaling for stateless service. Stateless services are easier to maintain that opportunities to define decouple the state from services must be considered in the application design.
- Provide stringent and more robust controls on stateful versus stateless services. Stateful services replication strategies can be applied and adjusted based on demand but must be carefully determined based on data analysis to reduce resource wastage.
- Design with caching in mind. Caching minimizes latency. Caches will allow you the redundancies around legacy data stores to prevent a single source of failure. In addition, look for opportunities to cache at the other layers of your distributed system from the application layer up to the edge.
- Provide client application level default responses for unavailable services.
Going beyond the benefits of virtual machines, containers should be the obvious choice to create a highly distributable network of redundant systems.
- First and foremost, the organization must overcome challenges in adoption. The organization should provide training and address adoption concerns.
- Choose solutions that allow your system environment to grow and shrink with demand automatically.
- Be on the look-out for support for the native runtime environment to improve performance.
- Define reusable configuration scripts that can be run across data centers with initial load parameters externalized to be able to customize geographical demand.
Cloud transformation is needed to bring your applications and services closer to your customers.
- Design redundancies and fail-over strategies that offer high availability of your system. Back-ups need not be consistent in real-time but must provide strategies to ensure data integrity.
- The knowledge of your customer location plays a key role in deciding where to establish back-up systems so that the load balancer would failover to the next nearest region closest to your customer base.
- Opt for a hybrid cloud strategy to ensure sensitive information remain safe and within your organization’s secure environment and, at the same time, provide common workflows to your application deployments.
- Leverage on edge computing services. The edge, the network infrastructure closest to your clients, can offer more than caching. Time-sensitive computing and decision making can be performed at the edge.
The agile development mindset
Whether Scrum, Kanban, or Extreme Programming is your agile development of choice, it is essential to embrace the principles of transparency, inspection, and adaptation to ensure product quality.
- The design and development of application components, especially micro-services, must be decoupled from each other, capable of withstanding changes from another team. These allow the teams to independently innovate and scale their operations without being bogged down by interdependencies.
- Embed processes like peer reviews, test-driven development, code refactoring allow for the discovery of performance bottlenecks and establishes coding best practices.
- Code reviews should ensure that deliverables adhere to standards and principles on scalable patterns and architectures.
- Automate tests for continuous validation and early problem detection.
- Perform load testing to identify mobile application bottlenecks. Even on QA environments, load tests expose issues that could otherwise be coming from real-world traffic.
- Make use of frameworks for contract testing to verify the interoperability of services.
Continuous integration and deployments
Use automated deployments to build, test, and deploy your software to testing or production environments with minimal human intervention.
- Utilize continuous integration tools that periodically take the latest code base of the release branch and run automated tests against it.
- Add quality tools in the CI environment that checks for coding issues and provide recommendations on improving the code to reduce both development time and application run time performance.
- Automated builds must include smoke tests and fail fast once issues with the tests are determined.
- Define and automate the rollback procedures for releases.
- Opt for the phased geographical rollout of releases. A phased rollout would reduce the risks of interoperability issues affecting the entire customer base.
Going full circle: gaining insights in production
Despite the risks, having the capability to test in production allows your development teams to simulate real-world scenarios monitored by your best analytical and performance tools to gain an understanding of application vulnerabilities and the responsiveness of your applications when subjected to high demand.
- Continuously monitor SLAs. For example, throughput changes as more and more features are introduced to the system.
- Design your application with the capability to leverage A/B testing frameworks to gain insights into customer behavior. Determining what leads to successful conversions will also reveal the services to optimize and scale-up.
- Identify vulnerabilities in systems in production through chaos engineering. Chaos Engineering is a disciplined approach to perform experiments on your distributed system.
- Invest in machine learning and automation to minimize the preparation needed to identify the scope of tests and priorities in testing.
Enabling the best mobile application
There is no cut and dry way to design and develop applications to scale, however with the knowledge and insights of your customers, aiming for scalability, applying code development and deployment best practices, machine learning, and automation, you can plan for the flexibility needed to provide consistent performance in your application.