Software Architecture and Design

Home » Software Architecture and Design » Software Architecture and Design
Illustration of a software system architecture (cloud computing)

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:

  1. Software Architecture
  2. 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:

  1. The software design process, leads to:
  2. High level architecture, leads to:
  3. More detailed design of individual components into layers and individual classes and methods
  4. 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:

  1. Layered Architecture Examples in .NET – taking the reader through the thought process and trade-offs involved in making a layered system design
  2. 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!

About Phil

I have been working as a software developer since 1983. This blog could have been called "From Fortran 77, C and Cobol to C# in 20 (not so) easy years", but it doesn't sound quite right somehow. Besides I'm talking about what's happened since 2003, not before!

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Top Posts & Pages


Recent Posts

Recent Comments



  • Mike Cohn's Blog
  • Scott Hanselman's Blog



As useful as user stories can be, they’ve never been right for every team. An exciting alternative f [...]


Being a great product owner is hard. Here are the things your team wants from you to help them do th [...]


Want to learn about Kanban? Here’s a complete guide to introducing Kanban into your organization. [...]

- Scott Hanselman

I had a lovely interaction on Twitter recently where a young person reached out to me over Twitter D [...]

- Scott Hanselman

With Visual Studio Code and WSL (Windows Subsystem for Linux) you can be in a real Linux environment [...]

- Scott Hanselman

It's a double-meeting that! Get it? "Outlook?" Seriously, though, sometimes folks com [...]

- Scott Hanselman

I blogged about NancyFX 6 years ago and since then lots of ASP.NET open source frameworks that build [...]

- Scott Hanselman

My colleague Tara and I were working on prepping a system for Azure IoT development and were using W [...]