Understanding High CPU and Memory Usage: When to Act and When to Relax

Modern applications, especially cloud applications running on right-sized infrastructure, rely heavily on efficient resource management, but “efficiency” doesn’t always mean “low usage.” High CPU or memory consumption can be either a red flag or a sign of optimal performance, depending on the context. In this post, we’ll explore when to celebrate high resource usage—and when to panic—with a focus on .NET applications.

Continue reading “Understanding High CPU and Memory Usage: When to Act and When to Relax”

From Layers to Rings – Hexagonal Architectures Explained (by Silas Graffy)

This article is a proper English translation of Von Schichten zu Ringen – Hexagonale Architekturen erklärt by Silas Graffy. I found it to be one of the best explanations and motivations for the architecture style, but the ‘Chrome Autotranslation’ was severely lacking.

In summary:

  1. Classical layered architectures do not work: they put the database as a foundation and they tend to evolve into ‘everything talks to everything spaghetti’.
  2. In the mid-90’s, building on the Dependency Inversion Principle, Alistair Cockburn coined the hexagonal architecture: it decouples the core application logic from external concerns (such as databases).
  3. Because six sides was rather random, the name was changed in 2005 to Ports and Adapters.
  4. If we add the internal/external notion, we arrive at the Onion Architecture (Jeffrey Palermo in 2008).
  5. This inspired Clean Architecture (Robert C. Martin in 2012), as a more generalized form of the Onion Architecture.

Enjoy the read.

Continue reading “From Layers to Rings – Hexagonal Architectures Explained (by Silas Graffy)”

Exploring options for building REST APIs with C# and deploying to Azure

Somebody asked me, what is the difference between a C# REST API running as a Web App on an App Service as a container and a C# REST API running as a HTTP Function on an App Service or a Consumption Plan?

There are lots of aspects in this question, so let’s unpack this a bit first.

First, let’s talk about the various ways we can build REST APIs in .NET.
Then, we’ll talk about how you can deploy these, either as code or as a container.
Last, we’ll explore – if you end up with a container – which Azure service best fits your needs.

Continue reading “Exploring options for building REST APIs with C# and deploying to Azure”

Getting Non-Functional Requirements from Business People

As an architect in the world of software development, I’ve often encountered business stakeholders who, despite their expertise in their respective domains, find themselves out of depth when discussing the nitty-gritty of software requirements. The challenge isn’t their lack of understanding; it’s about bridging the gap between their business needs and the technical solutions we can provide.

In this blog post, I’ll share a couple of conversations starters for each of the ISO 25010 quality attributes (also known as non-functional requirements), which will eventually drive a lot of the software architecture and associated cost.

Continue reading “Getting Non-Functional Requirements from Business People”