There are two main reasons why I created this blog. I wanted to pass on my experience, and also engage in conversation with other developers about:
- Software Architecture
- Software Design
What is Software Architecture?
By software architecture, I mean the format and layout of physical systems, e.g. Visual Studio Solutions consisting of individual projects, classes, methods and visual components. Higher level architecture, such as the relationship between different component parts of a system, are also covered.
What is Software Design?
By software design, I mean the process and results of this process that make us arrive at a particular architecture.
I do intend to cover detailed design or individual parts of systems, but less so than the above.
So to summarise:
- The software design process, leads to:
- High level architecture, leads to:
- More detailed design of individual components into layers and individual classes and methods
- Not forgetting tests, both of the unit kind and acceptance and regression tests
Upcoming blog posts
I have two series of blog posts planned which I will do this year:
- Layered Architecture Examples in .NET – taking the reader through the thought process and trade-offs involved in making a layered system design
- I have long been a fan of TDD, clean code, DDD (domain driven design) and having the code document itself and show intent as clearly as possible, to me, this results in the best quality software. However on some projects I have worked on, using tools like NCrunch, result in programming teams focussed on ensuring that every possible line of code is tested, and a suite of tests that effectively multiply the size of a system 5 times (needing 5 lines of code to test every line of code in the system) and a project that focusses inwardly on itself rather than outwardly to meeting user requirements. Tests should just be business level – these are the important items that need implementing properly and covered by tests, not every single line of code (in my view). I have recently read a book on BDD (see the section on Software Architecture and Design Books on this blog) that puts testing at the right level in the project, i.e. at the business level, and across all members of the team, not just the developers, from the very start of the project. I would like to review this book and these concepts in a series of blog posts later this year once I have some practical experience of it.
Hopefully this will just be the start. I hope to expand on these two subjects and make them the main core of this blog guided of course, by user feedback via the comments on this blog.
Regarding BDD, a good place to start for a .NET developer is the Spec Flow project. The subject of software design and architecture is clearly a big subject that will take time to cover properly, especially when I consider that there are many other areas that a developer comes across in day to day work, plus the fact I would like to help beginners with this blog and I have a full time job as well. Watch this space!