In this article we’re going to talk about the difference between software architecture and software design.
First let’s talk about software architecture. Software architecture is the big picture. It is the what and where of the software design process. This is where you decide what it is that you’re going to be doing, how you’re going to be implementing the business requirements at that high level. The way that servers are arranged, OK, the where of it. Where’s data going to get stored? Which components are we going to be needing? We’re talking boxes and lines. We’re talking about the big picture. There are architectural patterns. So architectural patterns are going to be whether it’s an n-Tier Architecture, MVC, cloud-based. All of the way that software can be designed, you’re making these decisions at this stage. You’re also making certain tradeoffs. When we’re dealing with the non-functional requirements, the way that the system has to perform, the availability requirements. We’re starting to see that we’re going to need to have more servers. We’re going to need to have backups. The database is going to have to be running in a cluster. Examples like that. We’re making decisions based on non-functional requirements as well as business requirements. It’s important to note that the software architect does almost all of this work before the coding begins. So you’re not going to be making decisions about whether to run MVC, or cloud, or other model in the middle of the development process. Those decisions have to be made well up front because they impact software design.
And what is Software design?
Software design is the how of the software development process. Now you’ve got the business requirements. They’ve gone through the architecture step. And now it’s up to the software designer to think about classes, functions, ok? This is that level of detail below the high-level view of how we’re going to be doing certain things. So this is fairly low level stuff. If you’re going to need to create an API… Let’s say you go for a services model of the implementation.
Well if you’re going to have to create back-end API’s, the design level is where you write the API specs. This is the contract, the interface, between the front and the back end. And so this is done during the design phase. Therefore when they get into the coding phase, the front end developers can work to that spec and the backend developers can work to that spec. And just like the chunnel, they meet in the middle.
So that is the fundamental difference between architecture and design. Architecture concerns itself with the big picture. It’s the what we’re doing and where that’s going to live. And the design phase has got to do with the how of what you’re doing. So now you have the requirements that come to you and you have to figure out now exactly how we going to do this? How does A talk to B? Where’s the data being stored? All the table names, things like that. So that’s the difference between architecture and design. I hope that’s clear. If it’s not leave a comment! I’m always open to respond to you.