If you are a programmer or software developer, you should be very serious about software architecture and design.
When i was learning software development, most people teach me that coding , the sweet spot comme only at the end of the design and may be the shortest part.
I personnaly hated it because , coding and see your app coming to life give a lot of satisfaction and accomplissement feeling.
It was like that for a very long even if , i eventually do some design and architecture to understand what some client really want.
It was like that until recently i watch this youtube video.
Learn how to think and design like a Software Architect at Silicon – This video will blow your mind
This video open my mind and completly increase my interest in software architecture. Most programmer like me, do software architecture and design without really go deeper in solving design problem.
I end up solving lot of design problem during code. With this video, i realise that designing software architecture is also, a kind of programming.
Watch this video below to understand what i am saying:
If you don’t have one hour to watch this, you can read the sections below. I write about what you will learn in this video.
Please be aware that it is my personal understanding about the topic and i may missed some important detail that can help you in troubleshooting your app architecture.
Build software is actually like building a new home. They have similar phases that can be resume in 4 steps :
- Customer : someone who actually want a product in home building case, it is the buyer
- Planning documents : Blueprints and project management documents that help in building product. In our context, it is an architect who produce these.
- Physical system decisions : System or people who can actually design and build component of a project. In building home project, it is a general contractor.
- Physical installations: The focus here is in realisation. Skilled worker are needed in this phases.
To build new software application, the phases may look like this :
- Domain expert
- Software architect : build UML Artifacts
- Software architect or designer : focus on data store and security context of the application
- Software developer or programmer : who focus on coding. The sweet part!
Now we have general view of how work is organized, let learn how software architect think to design a solution.
How software architect think and design solution ?
In this section , we will describe the process software architecture design explained in the video. We will start from a functional specification document to product programming and testing.
The first phase in fonctionnal specification is to define Abstraction of the system. One of the way to do it is to select a name for each element of the functional specification who will become the class name of the application.
This is a basic exemple of selected name that will help to model how the software will work. Then you will take some time to refine the design by created new operation name and relation between each other.
In the video, the presentator show by exemple in detail how it is done by using some design pattern and UML principe for relationship between objects.
One of the way to design this kind of abstraction is to use Conceptual class diagram. It is very similar to class diagram.
The difference is, class diagram is more detailed and is design to map and code implementation but conceptual class diagram focus in the relationship between classes.
In the video, the author dive deep in how objects relationship are designed to make sense of the architecture.
In software design, performance is never a concern. Don’t focus on performance, only focus to give sense between component relationship and make your software work.
When performance is too low, the software will simply do not work.
So find better machine or just make it work… I am just paraphrasing the presentator !
After succeeded in designing conceptual class diagram, it will be easy to do other diagram like use case or state diagram and see how objects behave in each use cases.
Conceptual class diagram is the very starting point to proper understand the functionnal specification and derive other type of diagram.
I personaly use to start with Use case diagram, look like there is a better way.
How code are implemented based on Use case diagram
Each command between application backend interface and client are use cases defined obviously in use cases diagram.
The focus on the architecture design is only in backend development. Most of the time, app should rely on other apps to work in enterprise environment.
The image below show how De Anza Software Applications is designed .
Before going there, the author explain the importance of message broker pattern between app services.
If you feel hyped like me and very excited about design aspect of the software development, you should ask yourself how to go there.
We will enter this topic in the next section .
How to become software architect
To become software architect, you should :
- start by learning and mastering object oriented programming and become a software developer. I think you are already there.
- Get knowledge about design patterns and object-oriented design. For the later aspect, just learn UML. With those, you will become a software designer.
- Now get to Software architect will oriented-object analysis and …. a specific domain knowledge.
A software architect is an expert in one industry. If you want to become software architect, pick an industry and work on it until you achieve it.
Speaker Biography for Ron Kleinman
Ron most recently served as CTO of the SIF Association, an XML standard organization in the K-12 area.
A 20 year veteran of Sun Microsystems, he co-founded the JavaPOS initiative, and has taught an evening section of Object Oriented Analysis and Design at De Anza College for the last 10 years, is the somewhat sheepish holder of several software patents and has been keynote speaker at multiple partner conferences and selected industry events. His current technology focus is on design patterns and application (rather than module) integration.
Happy designing !