Hi all, sorry for the delay in posting the blog for the series. In my previous post, I discussed the critical first step of gathering software requirements. Today, I’ll delve into what comes next: architecting scalable solutions. Using real-world examples from my projects, I’ll explain how to select the right tech stack and system design to ensure scalability, reliability, and ease of maintenance.
Now that the requirements are in hand, the next step is to analyze and select the right tech stack and system design that offer scalability, reliability, and ease of maintenance. System design is closely connected to the nature of the application. For instance, I built a simple static website for a machinery company using a one-page HTML format, hosted via GitHub Repo and CloudFlare Pages. This setup was cost-effective, as both GitHub and CloudFlare offer free plans. However, the drawback is that any updates require direct code edits. In contrast, for a simple data entry application to maintain vehicle entries, I used Flask (Python) and hosted it on Render.com, which costs 11 SGD per month.


The major differences between these two projects lie in their complexity, scalability, reliability, and ease of maintenance. The static website, being a simple one-page HTML site, offers high scalability and reliability through CloudFlare’s global CDN, but has limited maintainability as updates require direct code edits. It’s cost-effective, leveraging free tiers of GitHub and CloudFlare, and performs excellently due to its static nature. However, it lacks flexibility for adding new features. In contrast, the data entry application built with Flask and hosted on Render.com is more complex, offering greater functionality and flexibility. Its scalability and reliability depend on the application design and hosting infrastructure, potentially requiring more resources as user load increases. It’s more maintainable due to the separation of concerns in the Flask framework, allowing for updates to specific components. However, it incurs a monthly cost and may have varying performance based on server load and optimization. The data entry application also requires more attention to security and involves a more complex development workflow.
These examples illustrate how different project requirements can significantly impact the choice of technology stack and system design. Before finalizing a system design and tech stack, it’s important to discuss several critical factors with the client:
- Cost-Related Matters: Understand the client’s budget constraints, including initial development costs and ongoing operational expenses.
- Project Timelines and Deadlines: Align the system design with project timelines and ensure deadlines are feasible.
- Long-Term Maintenance Requirements: Consider the effort and resources needed for ongoing maintenance.
- Scalability Needs: Assess the application’s potential growth and scalability requirements.
- Integration with Existing Systems: Ensure compatibility and seamless integration with the client’s existing systems.
- Security Requirements: Evaluate the necessary security measures to protect the application and its data.
- Performance Expectations: Set realistic performance benchmarks and ensure the system design can meet them.
- Compliance or Regulatory Considerations: Address any legal or regulatory requirements pertinent to the project.
By thoroughly discussing these aspects with the client, you can make informed decisions about the system design and tech stack that align with the project’s goals, constraints, and long-term vision. This comprehensive approach ensures that the chosen technologies not only meet the immediate project requirements but also provide a sustainable and efficient solution for the client’s long-term needs.