Unfortunately, I’ve seen quite a few people use Azure Event Hubs, when what they really wanted was a queue.

Event Hubs are great for large-scale data ingestion, but if you just need to pass messages between your services — use something else. Here’s a few reasons why.

Messages Block The Queue

Event Hubs uses a partitioning model where messages sent to it are distributed among partitions.
Each partition has one reader that can read from concurrently, and the messages are always processed in order.

This means that if you have a message that’s taking a while to process, the rest of the messages on that partition are delayed.
It means that if you have a message that’s causing your application to crash, you can’t process anything else on that partition until you somehow deal with that message. …


At my current job with SCADA MINDS I work with several different teams at the same time. That means I get to answer many questions. I’ve noticed that some teams are much, much better at asking questions and communicating than others.

Let’s take a look at two real interactions I’ve had that effectively illustrate the difference between good and bad communication in a remote setting. First, the example of bad communication. This was a question asked to me in private:

Image for post
Image for post

Next up — the better one. This was a question asked by an intern in a public development channel:


Twitter recently announced that they’re beginning to change many of the words they use, to “more inclusive” variants. They announced this on twitter. Which of course meant everyone wanted to fight about it.
How much of this is just white silicon valley folks changing words they think are offensive? Is this cancel culture just with words? Does this actually matter or is it just virtue signalling?

Image for post
Image for post

The words twitter are changing, and what they’re changing them to.

Honestly I’m not sure how much the inclusive language matters in regards to minorities. I haven’t heard many members of actual minority groups say that this matters to them. …


Microsoft Teams seems like it’s trying to be the one-stop tool for all your organisational needs. I think it works fine for chat and calls, but for knowledge management it is extremely unimpressive, often making things much harder than they need to be. Here’s four ways Teams is killing your knowledge management.

Important and Irrelevant files are mixed

Teams has a “Files” tab where you can save files that are relevant for a channel.
The concept is good, but unfortunately it’s plagued by an unfortunate decision: If anyone posts a file inside a conversation it’s uploaded to the Files tab.

This makes it impossible to distinguish between these two…


Recently I’ve been thinking a lot about what I call Death Spirals. The name might be a bit much but I like the dramatic flair.

A Death Spiral is a special kind of positive feedback loop. A positive feedback loop is something that’s self-reinforcing. Examples of positive feedback loops:

  • When you have a lot of followers on social media, more people view and share your content. When more people share it, more people see it and follow you. The more followers you have, the easier it is to get new ones.
  • When you’re out of shape, exercise is harder so you’re less likely to do it. The less likely you are to exercise, the more you become out of shape, the less likely you are to exercise, and so it goes. …


When I was first introduced to Observables in C#, they sounded pretty damn good. “They just model streams of data”, “It’s just data over time” and “It’s just the push equivalent of an IEnumerable”. After working with them for a little while, I don’t think they’re as good as I was told.

The statements above might be true. Observables might be simple from a birds-eye perspective. Unfortunately simple doesn’t always mean easy and there’s are some things that will end up biting you in the ass. Here’s five of them.

The Framework Has No Consistent Name

When searching for documentation and solutions to problems with Observables, I always felt like I didn’t know what to search for. Previously I’ve always known the terms to use, django {your-problem-here}, serilog {how-to-do-x} {framework}-{problem description}
However with Observables I had a lot of problems finding people encountering similar issues, and I was never really sure what to put for the{framework} part of my queries. …


Not too long ago I was working on an unfamiliar project, with a technology stack I didn’t really know. I had a short deadline, and (what I thought was) a pretty short assignment. Turns out it wasn’t. Every time I thought I was done the requirements shifted slightly and every time I thought I had solved the last bug a new one appeared.

Because I was pressed for time, I did two things:

  • I cut corners. I didn’t refactor things I should have and I should have tested things I didn’t. I didn’t feel like I had time to do those things — but I also didn’t always know exactly how. …


At my employer SCADA MINDS we’re currently working on implementing a data pipeline for one of the larger wind companies in the world. Wind turbines have a lot of sensors, that generate a lot of time-series data. For the amount of turbines we need to support, we need to be able to process upwards of 1GB/sec.

This is a blog post about how, using Azure Block blobs, we’ve made a performant API that can handle that amount of data, and still maintain a respectable latency when queried (<500ms for most cases)

When considering solutions we had a few criteria that needed to…


New technology often comes along with a lot of promises. All the hard things? They’re easy now. All of your troubles? Shh, they’re all better now.

The reality is, of course different. New technology sometimes solve problems in wonderful ways, but just as often it doesn’t live up to the hype. It can be hard to determine whether something looks great because it solves a real problem or just because it’s new and shiny.

I work at SCADA MINDS, a consultancy company primarily doing green-energy software projects. We’re in the process of streamlining how we evaluate when to adopt new technology. …


Recently while pair programming with a colleague, we got into discussing the best way to initialize new objects in C#. I’ve always just implemented constructors and left it at that, while he tended to favour static factory methods. This led to a lot of discussion and back-and-forth about the pros and cons of each type.

Just to clarify what I’m talking about, here’s an example of both

// Using the constructor
SqlConnection myConnection = new SqlConnection(connectionString);

// Using a static factory method
IDbConnection myConnection = SqlConnection.FromConnectionString(connectionString);

I’ve never considered implementing these static factory methods before and I naturally scorned what I didn’t understand. …

About

Gustav Wengel

Software Developer at SCADA Minds

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store