From Zero to Something

Several students have asked me how you develop when you start from scratch: How do I go from 0 lines of code to the killer system?

Of course this is a big question, and numerous books have been written on this subject---many of which provide terribly wrong techniques!

My focus is on architecture, design, and software engineering, so please consider the following resources as recommendations in this field. A usable system also requires work in good user interfaces, security, optimized databases, etc., that I have little experience with.


The skeleton of any well designed and robust system is a strong software architecture. I teach several software architecture courses, but geared towards industy people in context of part-time education. You are welcome at these courses, but they cost money and run at irregular intervals. However, there are many really good resources and recommended literature to be found.

  1. Software Architecture in Practice is a core software architecture course consisting of three 5 ECTS modules that cover core architecture work and techniques.
  2. Reliable Software and Software Architecture is a more specialed course aiming at availability and reliability techinques, the most relevant course is the 'Course 2' link.

Recommended literature

Designing a robust software architecture is helped by several techniques. First of all, it is important that you have a good working knowledge of different archtectural styles/patterns. A classic style is 'client-server' but not all systems are best designed as client-server systems...

You can find descriptions of architectural patterns in several books. For classic architectural patterns, consult [Buschmann et al., 1996]. Information system is a central type of system today (store and query large amounts of data type systems) and many relevant patterns are described in [Buschmann et al., 2007]. Both are part of a series called the POSA books, and include also books on patterns for distribution and concurrency.

For enterprise messaging systems, the [Hohpe and Woolf., 2004] is the classic resource. Message queue systems have a lot of advantages when it comes to providing high availability, throughput, and integration between legacy systems.

A central resource which I also mentioned in my presentation on quality attributes is [Bass et al., 2012]. It provide a very strong framework and techniques for discussing and balancing the qualities you want from your architecture. The chapter on Tactics sort of covers all the architectural patterns at a more code near level and is a must-read for any software architect.

Finally, I do believe very much in testing, also at the architectural level, and can recommend reading [Meszaros, 2007] and [Buschmann, 2011].

And... If you run into issues, drop by my office :-)


Please visit the Literature page.