How to Distribute Roslyn Analyzers via NuGet

11 Jan 2024

How to Distribute Roslyn Analyzers via NuGet

Towards the end of 2023 I had some rare downtime and decided to use it to develop a new skill I’ve wanted to learn: leveraging .NET’s impressive Roslyn Compiler Platform to help Akka.NET users be more productive at compile-time.

Roslyn Platform Logo

That interest propelled me to release Akka.Analyzers, a new set of Roslyn Analyzers + Code Fix Providers that we’ve incorporated directly into the core Akka NuGet package as a transitive dependency going forward, so all Akka.NET users and all packages built on top of Akka.NET will benefit directly from our efforts there in perpetuity.

In this blog post I want to discuss one tricky and important obstacle that was not explained very well in any of the literature I found online: how to actually format the Roslyn-enabled NuGet package correctly. This is non-obvious.

Read More

Internal vs. External Accountabilities

18 Sep 2023

Internal vs. External Accountabilities

One of the concepts that’s commonplace on software development Twitter / Reddit et al is the notion that management is ultimately responsible for everything that’s done by their employees - i.e. the captain is responsible for the behavior of the crew.

And in a sense this is true - from...

Read More

We're Rewriting Sdkbin

10 Aug 2023

We're Rewriting Sdkbin

In light of the recent drama with the Moq project’s decision to try to solicit donations through the use of SponsorLink, I’ve decided to share some updates on Sdkbin - our NuGet marketplace for .NET developers that we launched in October, 2020.

The last update I shared on Sdkbin was February 2021 - Sdkbin has continued to be a major driver of revenue growth for us with our Phobos product and handles about 33% of our total revenue.

However, as I shared on Twitter yesterday - we are embarking on a project to rewrite Sdkbin in order to fulfill our mission of becoming the marketplace for OSS developers to build businesses around their technology.

Read More

DRY Gone Bad: Bespoke Company Frameworks

08 Mar 2023

DRY Gone Bad: Bespoke Company Frameworks

There are some software development best practices out there that are universally and unambiguously true outside of any specific business context - “use source control” is a great example. These are rare.

The lion’s share of software industry “best practices” - SOLID principles, “Clean Code,” DRY, and so on -...

Read More

Why Self-Fulfilling Prophecies Come True

23 Dec 2022

Why Self-Fulfilling Prophecies Come True

In the aftermath of the 2022 midterm elections in the United States many conservative leaders, disappointed with the election results, blamed their poor showing on mail-in voting laws in key states:

“We will never win elections in states like Pennsylvania, Nevada, or Michigan so long as there’s mass mail-in...

Read More

Beware the Long 'YAGNI'

06 Dec 2022

Beware the Long 'YAGNI'

One of my favorite regularly occurring Twitter arguments is over what should be a simple and uncontroversial question: have you ever had to migrate to a different database in a production application before?

I wrote about our adventures migrating databases for MarkedUp analytics here thus I answer this question accordingly. But the group of developers who fascinate me are the ones who answer along the lines of “no and YAGNI - You Ain’t Gonna Need It.”

The reason for the “controversy” around this question is the “YAGNI” - the attitude that you should never need to migrate databases unless you’re incompetent, I guess.

Read More

Reflections on a Decade of Self-Employment

17 Aug 2022

Reflections on a Decade of Self-Employment

Ten years ago on August 10th, 2012 I wrote “Today I am Leaving Microsoft and Starting my Own Company” and cap-stoned my final day of working for someone else. Since then, I founded two companies:

I’ve learned a lot over ten years and I’m learning more every year, but I thought I’d take this milestone as an opportunity to reflect on the journey so far.

Read More

Professional Open Source: Extend-Only Design

27 Dec 2021

Professional Open Source: Extend-Only Design

This post marks the third one I’ve written this year about versioning problems in open source software development, although they apply to anyone who develops shared software components:

In this post I’m...

Read More

An Overview of Distributed Tracing with OpenTelemetry in .NET 6

21 Dec 2021

An Overview of Distributed Tracing with OpenTelemetry in .NET 6

I’ve given multiple talks and written posts about distributed tracing, a still relatively novel concept in the field of application performance monitoring (APM,) and how distributed tracing gives us observability into the dynamic run-time behavior of networked applications. I’ve also previously written about OpenTelemetry, “OTel” for short, an emerging industry-wide standard that combines distributed tracing with traditional metrics-based application performance monitoring into a single consumable standard that all APM vendors will eventually support.

In this blog post we’ll explore OpenTelemetry tracing in .NET 6.

OpenTelemetry logo

Read More

The Future of the .NET Foundation and .NET OSS

12 Oct 2021

The Future of the .NET Foundation and .NET OSS

.NET Foundation Logo

The last time I wrote about the .NET Foundation was in the context of the “Project Maturity Ladder” proposal in late 2019 - a well-intentioned, but ultimately not really appropriate measure aimed at trying to increase the adoption of best practices among member projects.

The .NET Foundation has its heart in the right place - widening the range of “acceptable” OSS beyond what is produced in Redmond. I want that too. Everyone does, most of all the developers who aren’t able to use that OSS today because of the historical conservatism of the .NET ecosystem as a whole when it comes to OSS.

The current proposal puts the .NET Foundation as a centralized certification authority for the entire .NET ecosystem. That’s heavy-handed and will ultimately undermine the .NET ecosystem’s ability to become “bigger than Microsoft.”

The key takeaways from that saga, which is still recent in the minds of many maintainers who are participating in this week’s public outrage against the Foundation:

  • The .NET Foundation did not build any agreement with member projects before introducing the maturity ladder proposal, so it came as a surprise to its member projects;
  • The .NET Foundation appeared to be pursuing some different priorities than those of the member projects itself, the former pursuing continuity of business and professionalism of the projects whereas the projects themselves are much more focused on supporting themselves and reducing costs; and
  • In general, the .NET Foundation’s top-down approach to trying to manage the ecosystem wasn’t really aligned with maintainer’s expectations (set by the Foundation itself years earlier) of a bottom-up, collaborative federation of projects. Too much Cathedral, not enough Bazaar.

I issued a warning at the time that going down this road of treating member projects like they’ve automatically agreed to whatever the Foundation leadership decides to do by the virtue of joining it will lead to misalignment between the two groups of stakeholders. In other words, agreements have to be constantly renewed among the members - otherwise there will be less cooperation, less trust, and a lot more public pushback.

Two years later and it’s clear that the .NET Foundation did not learn these lessons.

I’m going to address this in three parts:

  1. Summary of the current kerfuffle;
  2. Paths forward for the .NET Foundation and its projects; and
  3. Aspirations for the .NET OSS movement.

Read More