System Architecture
System Architecture is something that looks less important especially in startups or in developing ideas like POC’s.
From my experience this is not less important because at the end if the idea is a good one and probably is because if it was not a good one it didn’t come to the stage of implementing it making the next step to a real working product is a very short one. After people saw the “first version” they are really very happy to see very soon the next one. A bad architecture can lead us to a place where you definitely don’t want to be: rewriting of the system. It’s never easy and it’s a very consuming task.
Don’t understand me wrong. There is always time to refactor something that we write before in a way and we want to improve performance , quality or any other things. Sometimes we also need to refactor because features we want to add to the system. This is something else.
To be able to “refactor” we have to stick to basic concepts. Now everybody is talking about all the different kind of patterns. We have patterns for almost anything in any language and environment. The basic concepts are very old and are just written and explained here (SOLID). Always when we write code we have to take this in consideration.
Is not always simple and probably we will “fail” in finding all the small details that we have to take in consideration but if we work based on 80-20 rule, finding 80% of them will save us most of the time and it will only take 20% of time that we could need to make a “perfect product”.
I will go just for one simple example but I’m sure that much more can be easy found.
We are developing an Android application that requires push notification. It’s so common. Very easy to say : let’s implement GCM. It’s stable, plenty of examples, it’s from Google. It’s even working for iOs and Chrome. What else ? But we can try to ask “who is our geographical target ?” We can discover that some of them are located in places where the devices are coming without “GooglePlayService” library. So GCM will not work at all. Other options have to be taken in consideration. Plenty of them are available there outside, with a lot of different specification.
This is a simple example why do you need someone that really knows how to build an architecture so your product will make the next step easy.