The Necessity of Systematic Thinking

I spend a lot of my professional time training other software developers on how to build next-generation applications. Distributed and concurrent systems; stream processing; stateful web applications; soft real-time applications; and so forth. Cutting edge stuff for the majority of my industry.

One of the huge advantages of inexperience, such as when you first graduate from school, is your default state of being with the world is one of perpetually learning and adopting new skills and techniques. You’re not intimidated by taking on a project with lots of unknowns because… every project feels that way during the beginning of your career. But once you’ve been in your industry for a few years you pick up a few things: tools, tricks of the trade, techniques, pitfalls, preferences, methodologies, and so forth.

Fast forward to your five, ten, or fifteen year mark in your career you’ll run into what is an existential...

Read More

The Coming .NET Renaissance

There’s been ample grumbling about various changes in the .NET ecosystem of late, but I’m more excited about .NET than ever.

First, the decoupling of .NET from Windows. Mono started this work in earnest 15 years ago, and .NET Core + UWP is the next step. Turning .NET into a universal and lightweight runtime introduces many possibilities that haven’t been feasible for many before. Particularly in areas like HA systems, IOT, embedded computing, and mobile. And maybe even inside the browser with WebAssembly.

This is going to create new jobs, new types of applications that weren’t possible in .NET before, and broaden the .NET OSS ecosystem into new directions and areas.

Second, the newfound focus on CLR performance has been a long time coming. It’s not just Microsoft doing this either; read Matt Warren’s blog if you want an amazing third-party example. The improvements coming from this area...

Read More

.NET Core is Probably Fine

So, BUILD 2017 has come and gone and lots of new exciting updates have been announced or made available for preview in .NET-land, most notably the preview release of .NET Core 2.0.

TL;DR; 2022

However, the issue that grabbed the attention of many of the developers in the .NET OSS space was this small change that snuck its way into ASP.NET Core 2.0 preview , wherein the ASP.NET team dropped support for NETFX (the full .NET framework) without any discussion beforehand. That thread is massive - sitting at well over 500 comments at the time of writing this, but the issue was resolved and clarified during a panel discussion with the ASP.NET leadership at BUILD this week and well as an earlier, official blog post:

This preview version of ASP.NET Core 2.0 ships with support for the .NET Core 2.0 SDK only. Our goal...

Read More

Writing Better Tests Than Humans Can Part 2: Model-based Tests with FsCheck in C#

This is the second post in a 3-part series on property-and-model based testing in FsCheck in C#.

  1. Writing Better Tests Than Humans Can Part 1: FsCheck Property Tests in C#
  2. Writing Better Tests Than Humans Can Part 2: Model-based Tests with FsCheck in C#

Subscribe to get the next as they’re published!

Testing Richer & Multi-Feature Scenarios with Model-Based Testing

A property test is meant to be fairly succinct and verify that simple properties hold true for all possible inputs given a set of preconditions. But what if you need to test a more complicated scenario, like one where the state of a given object is influenced by the previous operations that might have occurred?

Our previous example of the FixedSizedList<T> or really any type of collection is a good example of an object. The state of that object will be determined...

Read More

Writing Better Tests Than Humans Can Part 1: FsCheck Property Tests in C#

This is the first post in a 3-part series on property-and-model based testing in FsCheck in C#.

  1. Writing Better Tests Than Humans Can Part 1: FsCheck Property Tests in C#
  2. Writing Better Tests Than Humans Can Part 2: Model-based Tests with FsCheck in C#

Subscribe to get the next as they’re published!

During my work on developing Akka.NET 1.1 I took a long look at the history of various bug reports over the lifespan of Akka.Remote, Akka.Cluster, and Helios over the past two years or so. The thing that I wanted to make sure we absolutely nailed in this release was ensuring the stability of the underlying transport and so-called “endpoint management” system.

If these sub-systems aren’t robust then Akka.Cluster can’t fulfill any of its behavior guarantees to end users.

For instance, I found that in the previous stable version of Helios we were using...

Read More

.NET Core is Boiling the Ocean

I get asked regularly in the Akka.NET Gitter Chat and elsewhere about “when will Akka.NET support .NET Core?”

TL;DR; .NET Core

Part of the issue I’ll address here is that .NET Core means different things to different people and there hasn’t been clear messaging on that from Microsoft as far as I know, so I’ll summarize how it’s relevant to me, Petabridge, and Akka.NET.

.NET Core is about decoupling .NET from Windows. Allowing it to run in non-Windows environments without having to install a giant 400mb set of binaries.

This will allow .NET to run in containers on Linux and lots of other places it can’t today and presents a very exciting opportunity for those of us in the server-side .NET development space to start taking advantage of modern DevOps and deployment tools.

Because let’s face it: deployment tooling built specifically for Windows is...

Read More

Introducing the New .NET Stack

I’ve been a .NET developer for roughly 10 years now - since the summer after my freshman year in college in 2005 I’ve been developing in Visual Studio and .NET. I’ve founded three startups on .NET, worked for Microsoft, and founded multiple successful OSS projects in .NET - I say all of this in evidence to the depth of my commitment and investment in the .NET ecosystem.

But it’s time we, the .NET community, address a major elephant in the room - .NET is, and often has been, way behind in other ecosystems in terms of overall innovation, openness to new ideas, and flexibility.

And you know what - we are addressing it! And this has created some exciting new possibilities for .NET developers that were never available to us before, to a point where we may actually be competing with platforms like Node.JS, Java, and others for mindshare...

Read More

Broken Windows: How Bad Software Releases Happen to Good Teams

One of my primary responsibilities with the Akka.NET project is release manager - I put together the release notes, press the big green button when we’re ready to deploy, and make sure that each contributor signs off on the release.

The thing I take most seriously about my job is quality control - trying to ensure that no release ever does any of the following:

  1. Introduces a breaking change to a public interface;
  2. Introduces a game-changing bug that forces users to roll-back to a previous version;
  3. Causes a major degradation in performance or stability; or
  4. Never significantly alters the behavior of a component in a manner that falls out of alignment with previous behavior without giving the users sufficient advanced notice.

Unfortunately, within the past few months we’ve had all of the above happen at least once each. Akka.NET is an open source project that has seen...

Read More

Introducing NBench - an Automated Performance Testing Framework for .NET Applications

I originally posted this to the Petabridge blog earlier today. See the original here.

Not long ago in Akka.NET-land we had an issue occur where users noticed a dramatic drop in throughput in Akka.Remote’s message processing pipeline - and to make matters worse, this occurred in a production release of AKka.NET!

Yikes, how did that happen?

The answer is that although you can use unit tests and code reviews to detect functional problems with code changes and pull requests, using those same mechanisms to detect performance problems with code is utterly ineffective. Even skilled developers who have detailed knowledge about the internals of the .NET framework and CLR are unable to correctly predict how changes to code will impact its performance.

Hence why I developed NBench - a .NET performance-testing, stress-testing, and benchmarking framework for .NET applications that works and feels a lot like a unit test.

Read More

The Beginner's Reference Guide to Startups

I was asked by a close friend earlier this week about whether or not I have any references, books, or recommended reading for anyone wanting to get into startups. I don’t have a single source that I can point to, so I thought I’d write one!

Let’s start from the beginning.

Getting Acquainted with Startups

Before you get into trying to do your own business, it’s a great idea to see what all of the other entrepreneurs are up to across the world. Learn from their experiences, successes and failures both.

Start with Paul Graham’s essays. Paul’s one of the founders of Y Combinator, one of the most successful early stage startup investment vehicles on the planet. He’s worked closely with hundreds of startups, met thousands of founders, and seen deals of...

Read More

P.S. Get the latest from Aaronontheweb

Have my most recent essays and articles delivered directly to your mailbox.