- What is software architecture? The answer is multitiered.
- Architecture patterns: define the overall shape and structure of software applications. (MVC, REST, P2P, Layer…)
- Design Principles: (SOLID) high level guidelines to design better software.
- Design Patterns: low-level solutions related to implementation (Gang of Four patterns: Abstract Factory, Factory, Singleton, Command, etc.)
What goes wrong with software?
At first stage, all software are often clean, elegant, and compelling. But somethings begins to happen in long run. The software starts to rot and everyone blame for other’s false.
- Everyone with different skills, and all have their own code standards. (Some of them believe they’re often right about their design). Time will prove it. I don’t know
- Business change all the time, but customers don’t give time for developer to implement new change. (Customers have their own problem, work under their upper manager, or their investor who expect software deploy ASAP)
- Under tight budget, deadline, and over-expectation of customers. Developers’re often code under high pressure. They start to break code stardards, skip the best practice guilines to speed up and meet dealine.
- Technique debt grows everyday. It accumulates and creates great blocker for development progress.