Hi there! This is Scott from SoftwareArchitect.ca. In this video 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.
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. Talk to you guys again. Thank you very much!