Oskar Dudycz

Pragmatycznie o programowaniu

How money in Cloud impacts Architectural decisions?

2021-03-17 oskar dudyczCloud

cover

It’s intriguing how our perspective on software development changed in the last few years. We transformed from the on-premise age to the cloud era. Cloud is no longer a “buzz word”. When someone says “I use Azure”, “I use AWS”, we acknowledge it with a shrug. When the solution matures, we stop seeing it in black and white. We notice different shades of grey and begin to understand better features, characteristics. In “A Wizard of Earthsea”, Ursula Le Guin wrote that we gain control over someone when we find out their real name. Did that happen already with Cloud?

The cloud has several names, one of which is money. We pay for every second of computing and data transfer. Nothing comes for free. We know perfectly well that the more we use Cloud, the more we’ll pay. Apart from this obvious fact, others are not visible at the beginning. We may miss the impact of those continuous costs on our architecture. Some time ago, life was simpler. We didn’t have too much choice. We were usually selecting out of a few databases. Most of them were relational. If we were a .NET shop, we were using MSSQL. If we had a lot of money, then we could use Oracle. If we wanted something for free, we used MySQL or Postgres. If we were brave enough and progressive to use a document database, we used Mongo or RavenDB.

The main cost was made when the project was kicked off. We were buying the licence, server machine and then we forgot about the cost. If the database was Open Source, the programmer could be a decision-maker. Now, in the cloud, even for Open Source technologies, we have to pay. We have more options, but that makes a choice more difficult.

An example from my previous project. We used AWS. We’d like to use DynamoDB extensively for everything in the write model. However, we weren’t using it everywhere. We used it mainly for configuration data and operations that had to be fast. We used AuroraDB for business data - a distributed relational database. Why? Because it is cheaper and it is good enough for our problem. Therefore, architectural decisions can no longer be made at the convenience of developers. They also have to be made based on Excel calculations.

Another aspect is performance. We quite often relegate considerations about that at the very end of the project. Let’s say that 1 second for a reply from our endpoint is “good enough”. Assume that we didn’t focus on that, and our request takes 10 seconds. We may not be paying attention, but we may realise that we are paying 10 times more for our services than we should. For a SASS startup, this can often turn out to be an important issue - to be or not to be. Those considerations should impact our strategy of dealing with performance.

Yet another curiosity. It is worth being good at math. In serverless, we can select the size of resources for lambda/function. The more resources we allocate, the more we will pay for the processing time. But! It turns out that it might be more profitable to allocate more resources because they will process the request faster and ultimately pay less.

I bet that soon a consultant with an abacus will be a well-paid profession. This person will come with the Cloud catalogue. We will tell what we need in our system, and the consultant will spit out a cost-optimal set of cloud services.

What are your experiences in this area?

Cheers!

Oskar

p.s. I also wrote my thoughts on the Cloud security in article “Form a wall! And other concerns about security”. Have a look!

👋 If you found this article helpful and want to get notification about the next one, subscribe to Architecture Weekly.

✉️ Join over 11500 subscribers, get the best resources to boost your skills, and stay updated with Software Architecture trends!

Loading...
Event-Driven by Oskar Dudycz

cover

Through my window, I see the result of good plans but poor execution. Opposite my flat, there is a partially completed construction place. Buildings were supposed to be eye-catching Mediterranean style apartments. Delivery date? Two years ago. Actual? More and more unknown.

Some time ago, I heard that using Event Sourcing makes creating Event-Driven Architecture easier. The arguments were correct, that if we’re already publishing events to trigger business workflows, then at some point, we may want to also store events to not lose information. Agreed. However, I also heard that keeping the state as events will simplify things. We’ll have a source of truth with a record of the system behaviour. This will allow, e.g. to confront the results of the operations with the recorded state. I’d agree with that, with one distinction. It’s easier as long as you already know Event Sourcing.

Many people in the DDD community claim that the essential is to properly break down the system into autonomous parts called bounded contexts. Once we have it, the rest is secondary and will sort itself out. For sure.

Many seasoned programmers speak similarly about new technologies. They claim that they can translate past experience into new technologies. That’s true that by analogy, they can catch the big picture quicker. But isn’t it a bold assumption to say that Win.Forms specialist will learn Angular quickly?

The end result may differ a lot from the initial ideas. I saw the plan of those buildings next to me. Now I can see the effects of the execution. Or actually, the lack.

I believe that we should carefully acknowledge not only the point of view of our authorities but also their seating point. If we want to find out how to form a wall, do we ask an architect or a foreman? An architect may know the theory, but the practice is what we’re looking for. On the other hand, if you want to know where to put the wall, you prefer the architect to do measurements. At least if you don’t want to have the roof falling to your head.

After I had torn a ligament in my knee, I went to two qualified orthopedists. One said I should have surgery and do a reconstruction. The second stated that there is no need for that; rehabilitation should be enough. Guess which one had a specialization in surgery and which in rehabilitation?

People usually give us advice from the point where they’re currently standing. They are entitled to a biased view. An architect who rarely does programming will tend to downplay the value of implementation and tactical patterns. Midlevel developers will focus on technicalities instead of the global system impact. The team manager or consultant will emphasize the importance of soft skills (or esoteric techniques known only to them).

The truth is that we need all of them. The excellent plan will fall on the bad execution. The best execution for the wrong case will be just a waste of time. We should carefully evaluate the advice considering what we need and what an expert can give us.

Therefore, when we’re reading an article, watching a talk, let’s also pay attention to the place where the person is standing. The perspective from there may be much different from where we are right now. That can be good, as it may push us in the right direction. But it may also be misleading, as we accidentally take biases of this person without understanding the tradeoffs. Personally, I prefer to follow not only people from pedestal but also those that are closer to my position. A bit further in the journey, but not too far. That helps me to calibrate my view as those people are more relative to my daily struggles.

Polish historical leader Józef Piłsudzki reportedly used to say: “Right is like an ass, everyone has its own”.

Cheers!

Oskar