Architecture Decisions

Deciding on the architecture of a system can be a difficult. This is not going to be an exhaustive look at everything you need to consider when choosing an architecture but these questions can help guide you to an appropriate choice.

How many people will be developing?

If a project has many developers you need to define boundary lines in your application. What is a boundary line it could as complex as a service in isolation that the rest of the system calls to as simple as a line on your diagram where relationships only go one direction. The thing this encourages is being able to work on one piece of an application without impacting the rest.

How long will this project last?

Project lifetimes can vary greatly. Maybe you need to write a app for a one time migration of data or a website for an event that will take place once and then the website will be discarded. On the other end of the spectrum would be software that is planning to be utilized, improved, and updated for decades. The rigor of your architecture would vary greatly based on how long the project lifetime will be. The longer the life and the more volatility the system will have you should focus more on defining an architecture for future development.

What is important to the stakeholder?

In some ways this is the most important question. The priorities for any project should be dictated by the stakeholder. This does not mean that a developer should not clearly communicate the cost of decisions the stakeholder makes. The pros and cons of the decisions should be explained to them but it is their product. This is difficult at times. Perhaps you know this is going to be a multi-year development but they have an aggresive deadline for the minimum viable product release. The stakeholder should be made aware that this will cause extra work later to make up for decisions like this. But if they feel that time to market is more important quicker to develop architectures should be used.

When starting a project or just a phase of a project I like to ask myself these questions to help give me guidance.