# 3. Design the App & Choose a Tech Stack 📐 %%(...or is it the other way around?)%% Designing an app involves defining its architecture, features, and user interfaces, while choosing a tech stack entails selecting the right set of technologies, frameworks, and tools that will be used to build the app. Designing the app and choosing a tech stack are interdependent processes, but it's generally more efficient to start with a rough design, as it helps in choosing the most suitable tech stack Try not to rush the design. We'll never get all our decisions right the first time, but we can give ourselves a better foundation and hopefully avoid code debt later. Furthermore, you'll likely finish the project sooner if you're not constantly battling problems you can't easily fix because of poor architecture. We want projects that get easier with time, not harder. You want a [[Loosely Coupled and Highly Cohesive Codebase]] Take a look at the following: - [[Design Methodologies]] - [[Architectural Patterns]] - [[Best Practices]] - [[Cloud Computing Service Types]] Write a [[Software Design Document (SDD)]] Choose your tech stack: - [[Choosing a Web Framework]] - [[Choosing a Database]] - [[Deployment & Hosting]] - [[Containerization & Orchestration]] - [[Continuous Integration and Deployment (CI-CD)]] - [[Version Control]] - [[Environment & Dependency Management]] - [[Testing Technologies]] - [[Documenting]] #dev #python