My friend and I are building an app together, and we want to become well-rounded enough to handle more than just writing code. We have been looking into software architecture, system design, networking and HTTP, databases and SQL, testing, deployment, and DevOps. We are also wondering how important design patterns, operating systems, Linux, Git, and communication skills are. What fundamentals should we prioritize, and which books, courses, or other resources would you recommend?
5 Answers
The best approach is to start building the simplest usable version of the app instead of trying to study every topic first. Put something in front of real users quickly, then learn whatever you need to solve the problems you actually encounter. Otherwise, it is very easy to spend months studying architecture and never ship anything. Keep learning on the side, but let the project guide your priorities.
Do not overfocus on design patterns at the beginning. Patterns are useful vocabulary for recurring problems, but applying them everywhere can make a small project harder to understand. Start with simple, clear code and improve the structure when real problems appear. Books on clean code, refactoring, and practical software architecture can help once you have enough experience to recognize the problems they describe.
For a web or mobile app, understand the basics of networking, especially HTTP, DNS, TCP, TLS, proxies, routing, and authentication versus authorization. You will also benefit from Linux, Docker, and Git. Docker Compose can be enough for local development, while more advanced cloud and production operations can wait until the project actually requires them.
Learn how to solve problems, not just how to express solutions in a particular language. Algorithms and data structures, debugging, validation, complexity, and understanding how the computer works underneath are all useful. You do not need to master every advanced topic before starting, but learning these fundamentals will make it easier to reason about performance and correctness.
I agree that thinking in terms of problems and solutions instead of syntax is a major step. I’ll try to connect the theory directly to problems in the app.
The nontechnical skills matter a lot when two people are developing together: Git workflows, code reviews, task planning, documentation, communicating tradeoffs, and listening to users. You should also gradually learn how operating systems work—processes, threads, system calls, files, memory, terminals, and basic monitoring. You probably will not need all of that immediately, but it becomes extremely valuable when something fails outside the development environment.

That makes sense. I was worried about learning everything up front and getting stuck in an endless preparation loop, so I’ll focus on building a small version first.