Nature: A way to think!

Thats a very interesting thing to think about it. As a software architect i`m always trying to understand the nature of the things.

For a system, you could have some systems that are more sensible to latency or CPU BOUND or Memory Bound or could have other dimensions.

They could be Data Driven or Domain / Behavior Centric or event event centric. If you think about what goes on the system like cars the are driven in a specific road, if you think thought this properties you can think as tickets and them you could have very slow care like trucks or fast sport cars, i would call this ticket profile so you could have fast running jobs or long running jobs.

Solutions / frameworks / libraries are made for specifics natures. Like a sea fish or river fish or urban fish :-)  All same fix but at the same time all diferent ones.

People tend to just see software are BEST at the very moment and often dont think about the properties of the system they are dealing with. If you can understand they system you are dealing with you can be in a better spot the make a call or make a architecture thats really scale out.

The Dimensions

I`m still working through this but i see some things we could use to classify systems or modules or SOA Services. IMHO would be something like this:

* Centric Nature: Data, Behavior/Rules, Process/Task, IO
* Ticket: Short Running Job, Long Running Job
* Mode: Online, Off Line
* Profile: CPU Bound, IO Bound, Latency Driven, Memory Driven
* Main Architecture: Request Driven, EDA, Pub/Sub, SEDA, Actors, Stream, Batch
* Distribution: Standalone, Cluster, P2P

And much and much more, but if you think about this you will be in a way better spot to realize what to do. Software architecture is just a mirror of the real business thats why requirements are so important. You need to understand where you are going and what could happen next so you will cover the aspect to make sure that your development scales(more team) and also your number of user or requests.

Architecture or Signal Repeater?

A Real software architecture will compose components, ideias, principles and libraries/frameworks in a very specific way to make sure you do the right FIT solution for you problem domain. Unfortunately people just go to the infoq shop and get the latest buzzword and start apply on they system and they call this update or technical improvement,

The main problem with that is that you dont tackle the real problems. Potentially you could burn lots of hours, energy and money on the wrong things the problem in that in the future you night not have they money(you may regret it).

Think about the Problem domain

As more as you think about the problem domain in sense of understand how it behaves, what are they boundaries, what are the constraints, what are the real limitations more you will be able to pick the right architecture set. This is all about decision making, to make better decisions you need to have a great idea about the problem but also about the options for the solution landscape.

Cheers,

Popular posts from this blog

Kafka Streams with Java 15

Rust and Java Interoperability

HMAC in Java