How do you design a new system? What order do you develop things?
One common approach is using separate layers to define what the system should do. Let's try it!
A user interface layer at the top. Then the server side with a business model layer coordinated by a controller layer. At the bottom is the data access layer and the actual database itself. This "separation of concerns" makes it possible for each technical expert to work on their specific layer.
Next, we continue by fleshing out each layer. For each layer, a solution is designed according to customers demands. This means we plan for all known requirements and maybe a few extra, because, as we all know, the customer may change her mind in the future.
Great! Next up is building it. With the design completed, experts run off to implement their specific layer. They know their TDD and write automated tests all the time to ensure each layer works as expected.
Once all are completed, we just have to put them together like a stack of pancakes and deliver the whole system. Sirup's optional!
Can you spot any problems with this approach?