Software architecture

Definition of solutions

The definition of solutions is what you need if you're willing to construct something new, with uncertainty. You need to define tools, services, components, softwares and patterns required.

The definition of a solution is an important step in your project, since it conditions the rest of it. It's harder to define the solution, because the possibilities are endless:

  • Relational databases: the usual database system, dot not scale very well.
  • NoSQL databases: new solutions on the market, with the promise of high performance.
  • Messaging: backbone for asynchronous treatment, introduces lot of new concepts.
  • Search engines: whereas RDMS are pretty good at organizing data and keeping it consistent, they're really bad when it comes to search something. Search engines are good at it.
  • Monitoring and alerting: measurement of performance and realtime alerting requires a strong monitoring and alerting stack.
  • Performance and scalability: application performance must grow faster than the business' performance. Otherwise, the application becomes the bottleneck for business. Having horizontal performance is a must when you need scalability. When you have it from scratch, it's great. When you need to onboard performance later, you usually need architecture work to define the solution or to make sure the implementation.
  • Other topics: bundles, components, virtualization, docker, security, quality, continous integration, ...

All those tools and specificities require you to have a strong experience and make sure the decisions taken for the project are the good ones.

Software progressive migration

The migration of an application involves many steps and can quickly affect the whole organization.

The challenges of a progressive migration are:

  • Introduce new technologies and onboard your whole team or a part on it.
  • Synchronize new and legacy applications to keep using legacy applications during the migration, without loosing performance or degrading the users' experience.
  • Adjust efforts on legacy code to take the most valuable from it.
  • Keep the projects cost and time on track during the whole migrations.

Defining a new architecture, a target for the whole organization is great. Having the path and information on how to do so is better.