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

Categories

Recent Posts

Recent Comments

Archives

Blogroll

  • Mike Cohn's Blog
  • Scott Hanselman's Blog
- mike@mountaingoatsoftware.com

In an ideal world, a Scrum team could perform the work of its sprints entirely uninterrupted. Produc [...]

- mike@mountaingoatsoftware.com

Do Scrum long enough and someone will suggest stopping the daily scrums. Here’s how to reply. [...]

- mike@mountaingoatsoftware.com

When estimating in story points, teams should think in terms of ranges and rounding up. Here’s why. [...]

- mike@mountaingoatsoftware.com

Batman would make the perfect Scrum Master. Once he eliminates crime in Gotham City, I plan on offer [...]

- mike@mountaingoatsoftware.com

It can sometimes be a challenge to get people to attend and then participate in sprint reviews. Here [...]

- Scott Hanselman

I love everything about PICO-8. It's a fantasy gaming console that wants you - and the kids in [...]

- Scott Hanselman

I've been a remote worker and an occasional YouTuber for well over a decade. I'm always lo [...]

- Scott Hanselman

I love me some text mode. ASCII, ANSI, VT100. Keep your 3D accelerated ray traced graphics and give [...]

- Scott Hanselman

Being able to seamlessly run Linux on Windows is making a bunch of common development tasks easier. [...]

- Scott Hanselman

I've been trying on and off to enjoy Ruby on Rails development on Windows for many years. I was [...]

Meta