It takes experience to build a well-thought out platform that a business can grow on.
We have found that the most flexible systems last the longest, because they are the easiest systems to alter as time goes by. We are reminded daily that change is constant. There is always something about a software product that someone wants to enhance, redesign, modify. The trick is to make sure that the underlaying architecture of the system was designed from the ground up to make that as easy as possible. We are very good at doing that.
When we design a system, we first go through the necessary processes required to decide what the system is going to do. We also imagine where it might go in the future. We then set out to design a system architecture with building blocks that are as reusable as possible and in combination provide powerful functionality.
This all may sound kind of cryptic, so let’s discuss it a bit. In general, every system has stakeholders: people that use the system, but play different roles. For example, a web site might have a “customer”, a “company” and a “system administrator”. The customer buys shoes from the company and the system administrator managest the system for the company. Although each of these users play different roles, they are all people, or “users”. A basic building block for each of them would be a “user” building block.
Each of those users do different things. They have different roles. So we create a building block that allows us to assign different roles to different users. Each of the roles allows a user to do something. For example, a system administrator might be allowed to delete companies and customers from the system’s database, but not buy shoes. On the other hand, the customer can buy shoes, but they sure can’t delete companies from the database. This kind of security is provided by the “roles” building block.
Now imagine some of the things that a person in each role can do: buy shoes, delete companies, create financial reports, add new kinds of shoes to the database, refund purchases, answer support questions, etc. Each of these activities is, in essence another building block: a piece of functionality.
So the whole system comes together as a collection of small building blocks. By using this kind of design, it becomes easy to add additional functionality. Want to add a reporting engine for companies to use? Add a reporting building block that uses the already existing user, role, product and purchases building blocks to generate nice looking reports.
This type of design is common in most object oriented systems, but it takes experience to know how to define the most logical building blocks, so that the system can easily be expanded without turning into a hard to manage mess. We are very good at identifying and designing the most logical building blocks so that systems we design can last long into the future without having to endure costly rewrites.
We can easily rattle on about how we architect our solutions, it’s something we love to do. If you’d like more information about how we do this or would like to discuss technical details, please contact us.