Last Week in .NET #20 – Microsoft reclaiming the “Creepy Spying Company” mantle

In what I can only describe as a “lead magnet”, here’s a copy of my weekly .NET newsletter, creatively titled “Last Week in .NET”. I’m posting it here in the vain hopes that you’ll sign up for the newsletter or subscribe to the podcast. ♥

Welcome to Last week in .NET; and last week was a holiday week so things will be lighter than usual.

📝 Matthew Jones talks about Expressions, Lambda, and Delegates in simple terms. Lambdas were one of the hardest concepts for me to learn; and 12 years later, I’m glad I did.

I still don’t use Func<T> and Action<T> to the extent I’ve seen in other codebases; but that’s because I don’t want the maintenance programmer to hunt me down.

🔎 Why does JavaScript use 0 as January and 11 to denote December? Good @&*#ing question. Good news, is Hillel Wayne dove into old unix systems to find the answer. If you don’t follow Hillel’s work, you should.

🎥 David Fowler Deep Dives into the ASP.NET Core architecture. This is an incredible deep (and I mean deep) dive into the reasons why the ASP.NET Core framework behaves the way it does; provides a nice history of where we came from, and reminds me that we need a good MVC framework for ASP.NET Core but we’re probably not going to get it.

🎁 Do you write nuget packages? If so, you should know about the NuGetPackageExplorer. Also apparently it can help you find incorrect configurations for your packages

📝 Want to use C# 9 for your Xamarin projects? James Montamagno tells you how. For most of us, we’re still waiting for .NET 6 MAUI to unify the runtimes.

📝 Dave A Brock shows you how to isolate and test your service dependencies in Blazor. This addresses one of my chief concerns about blazor; and it’s good that there are people minding the testing store.

📢 Visual Studio for Mac 8.8 now supports NuGet 5.8 The dirty secret about Visual Studio for Mac is that it’s MonoDevelop reskinned; and it has a long way to go to match the power of Visual Studio for Windows; but I’m glad for Microsoft putting effort into a Mac client.

📝 Do you like VB.NET, Winforms, and .NET 5 I’m sorry, I’m sorry, and good! Kidding aside; Winforms is still the way to build a line of business desktop application; and chances are if your business is at least 20 years old you have a lot of internal applications written in at least one of the three. Anyway, this blog post goes into how you can use all three together in .NET 5.

🎁 Versioning your .NET code doesn’t have to suck. How many times have you created a custom build script to versioning your releases? Do you use Git? Do you want to stop writing custom code to do this thing that should be available out of the box? Andrew Arnott has your back with NerdBank.GitVersioning.

🕵️‍♂️ Microsoft wants to make sure your employer knows when you’re working and when you’re slacking off. Microsoft has added a feature to allow you to calculate “productivity scores” for your ‘team members’ in Office 365, and there’s no word whether or not it compensates for Microsoft’s own terrible UI choices.

😂 Immo Landwerth (PM on the .NET Team), makes a funny about Microsoft naming: “People still complain about the .NET Core naming. Just keep in mind that it’s named by Microsoft so it’s a miracle we didn’t call it “.NET Framework without AppDomains, Remoting, and most of WCF but for multiple operating systems as long as you promise to run your cloud on Azure”. Yea, that about sums it up.

📝 How to implement CSS Isolation in .NET 5’s Blazor You now get “CSS Isolation” in blazor. What that really means is that now in Blazor, you can have CSS scoped to a component, just like in Angular (and probably other SPAs). This is a fundamental feature for SPAs, and I’m surprised it wasn’t in 1.0.

🤯 Do you have Assembly version conflicts? Trick question: We all do. Good news is that there’s an in-depth blog post that will help you resolve these issues and restore your sanity.

📝 Andrew Lock has a preview from his new book about how to apply the MVC design pattern to Razor Pages. It’s a bit of shoehorning, but let’s go with it.

📝 There’s an F# newsletter out with what’s new there F# is a great language; but I don’t spend a lot of time in it.

📝 Scott Hanselmen shows you how to create a Self-Contained Deployment with Single file Publish and Winforms on .NET 5 This is crucial for Desktop applications and far overdue. I hope this rekindles interest in desktop applications.

🐛 There’s a breaking bug change with .NET 5 and VB.NET that will cause you problems if you run into it. Be careful if you use VB.NET .? OR GreaterThan, And AndAlso; and my apologies to you if you’re listening to this instead of reading it.

😂 There’s a comic about Debugging tactics and how often we use them For some reason “The Ballmer Peak” wasn’t listed. I consider this an error.

And that’s what happened last week in .NET. It was the American Thanksgiving Holiday, and I hope you and yours enjoyed it. I’ll see you next week.

Last week in .NET #19 – Throwing TFMs at the Wall to see what sticks

In what I can only describe as a “lead magnet”, here’s a copy of my weekly .NET newsletter, creatively titled “Last Week in .NET”. I’m posting it here in the vain hopes that you’ll sign up for the newsletter or subscribe to the podcast. ♥

📢🐛Visual Studio 16.8 has been released; and it might have uninstalled the .NET Core 3.1 SDKs on your behalf.

🎲Random Street View shows you a place in the world randomly. Hopefully this gives you something fun to do during this holiday week while waiting for the clock to hit 5pm.

📢 Do you like the idea of using C# for scripting? dotnet-script provides that. Personally I’m of a mind that they should have modified C# for Scripting a long time ago and not invented Powershell, but we don’t all get what we want.

🛑 Github reverses course and re-enables the youtube-dl repository. The RIAA had issued a takedown notice, since the youtube-dl repository allows for command line accesss to Youtube. Initially Github caved (because they thought they had to?) and removed the repository; but after the Electronic Frontier Foundation (EFF) stepped in with a supporting letter as to why the RIAA was mistaken in their claim, Github re-enabled access to the repository and created safeguards so this “doesn’t happen again”.

💔 If you have a class with a private default constructor in .NET 5; SignalR can’t deserialize it. The author of this blog post suffered so we wouldn’t have to.

📝 AppVeyor has a helpful (short) blog post on Version pinning for .NET 5 and the .NET Core SDK. There’s something valuable here but I fear I’m missing the context to know what it is.

📢 .NET Framework November 2020 Security and Quality Rollup Updates have been released. This is a release of the “Preview” I mentioned a few weeks ago; although the word ‘security’ is in the title, there aren’t any security updates in this release.

🤦‍ Jimmy Bogard released a galaxy brain meme on how to see if a string is null in C# It’s funny and sad. It’s funny because it’s sad.

📝 You can see all the differences between the .NET Standard 2.1 and .NET Core 3.1 APIs vs .NET 5 here. It’s pretty cool to see all the API differences in one place.

📝 Roadmap for WinUI 3 should be out in the first half of 2021. I’ve said this before and I’ll say this again: I have no idea what WinUI is or how it’s different from all the other UI strategies Microsoft has had; but maybe we’ll get lucky and it’ll finally unify everything.

📢 Along the same vein, WinUI 3 Preview 3 has been released.

📝 Julie Lerman shows you how to deploy containerized .NET 5 applications using AWS’s fargate. Also maybe one day AWS will unify its containerization strategy.

🎥 Monsters weekly releases a video on how C# 9’s Pattern Matching can make your job as a developer easier.

🎥 There’s a new Git Experience in Visual Studio 2019 16.8. If you use the UI; let me know how much better it’s gotten.

💡 Exception Filters allow you to pare down what you’re catching, and as the old adage goes, if you can’t handle it, don’t catch it.

💡 Microsoft edge allows you to add ‘notes’ to a PDF document Keep this up, Edge and I may install you on my PC.

📝 Top 5 features of EF Core 5.0 from 4 Entity Framework Experts. While we’re running the numbers, it turns out there were 240 enhancements, 380 bug fixes, and around 200 updates to documentation, and to give you an idea, EF Core 3.1 was released On 3 December 2019; so all those changes were made in the span of 11 months.

📝 The Roslyn team wrote a blog post detailing what’s new in the .NET Productivity Realm If you use Visual Studio 2019, it’s worth your time to check this out since you’re likely to find something to help you out.

📝 Joseph Guadagno shows you how to add .NET 5 support to the Azure App Service I’m not sure why this is a thing we as developers have to do; but here we are.

📢 Microsoft Research released a fuzzing tool for HTTP and REST APIs. A fuzzer is a real life incarnation of the saying “Throwing spaghetti at a wall and see what sticks”.

📢 TypeScript 4.1 has been released. Here’s my periodic reminder to you that TypeScript does not respect SemVer and therefore not pinning to the exact version of TypeScript you’re using (major.minor.patch) is a good way to cause random build breakages whenever typescript releases a new version.

💡 Don’t use the TFM without the SDK, says .NET team. Basically if your TFM is readable, you’re not using the right thing. Include both the TFM and the SDK number so you’re pinned to the exact right thing.

📢 Microsoft.Data.SqlClient 2.1 has been released with lots of bug fixes and performance improvements — and they mean it this time.

📢 Microsoft’s WebView 2 now uses Chromium Edge for when you need an integrated web browser in your .NET application The joke here is that we’re stuck with Desktop UI toolchains but we’d all rather be using web toolchains.

And lastly,

📝 Explaining Chains, Funcs and Actions in C#. Honestly this all sounds a bit like a kink; but I assure you, it’s all SFW.

Did you like what you read? This is a weekly newsletter you can sign up for at If you’d prefer it in audio form (hi, we should be friends), you can subscribe to the podcast version at

Last Week in .NET #17 – EF stands for “Ever Frantically” shipping code

In what I can only describe as a “lead magnet”, here’s a copy of my weekly .NET newsletter, creatively titled “Last Week in .NET”. I’m posting it here in the vain hopes that you’ll sign up for the newsletter or subscribe to the podcast. ♥

📝 Not about .NET, but relevant to our interests: Pintrest Engineering talks about they decreased their build times by 99% by changing one line in their build process. If you use Git and you use Hosted CI, you’re going to want to pay attention to this. Hell, even if you don’t use Hosted CI, taking a look at what tricks may speed up your build time is always a good idea. This post also re-inforces that good API naming is a must. If you’re a git expert, you probably know this trick, but for the rest of us, this stuff comes down to discoverability, and I’m not exaggerating when I say the git API is… opaque at best.

🎁 You can now tell the HttpRepl where to find your OpenAPI files. If you use HttpRepl (Microsoft’s command line version of cURL or Postman) you can now tell it where to find your swagger or other OpenAPI files. This is one of those “I really need to check out HttpRepl” moments. One of the problems with cURL and Postman have been the… well.. generic nature of the tool. Having a tool that is aware of the modern web application stack is helpful. Special thanks to Brady Gaster on Twitter (@bradygaster) for making me aware of this.

🎥 Progress Telerik is hosting a “The State of .NET” Webinar. This is clearly a cash grab for your email address so that they have you on their sales list, but regardless, it should be informative. Since I already have your email address, you can always wait for the podcast episode to drop where I cover everything that Microsoft released during .NET Conf.

📅 .NET Conf is November 10th – November 12th. If you’re listening to the podcast version of this, that means it’s tomorrow. I’ll be live tweeting this from @gortok on twitter and I’ll have a special wrapup afterwards on the podcast… like I just said above.

📝 Scott Hanselman talks about Path.DirectorySeparatorChar gotchas in .NET Core when moving from Windows to Linux This is an informative blog post on what can happen when you hardcode special characters in your application, and it is something that just about every production .NET Framework Application has hiding in it… somewhere. Stay Frosty.

🐞 Not content to ruin everyone’s day with the String.IndexOf linguistic comparison problems in .NET Core we talked about last week, Jimmy Bogard found that a target framework moniker of NET50 and NET5.0 both work in Visual Studio. Both work due to Nuget parsing rules, and it’s going to be interesting to see if this causes a problem come .NET 10.

🎥 Progress Telerik also hosted a “Future of Desktop” webinar on .NET last week, and while I missed the announcement before it happened, the video is available to watch. If you write .NET Desktop applications, check it out.

📝 Are Records in C# 9 immutable by default? Dave Brock asks this question and deep dives into the answer in his blog post: Short answer is: it depends, and somewhere a software architect is basking in the glow of that answer.

🎁 TypeScript 4.1 RC1 is now available Because TypeScript doesn’t support Semver, there are nearly always breaking changes in minor releases, and this one is no different. If you use TypeScript, it’s healthy to be aware of these changes before they break your build because your package.json file wasn’t pinned to the patch version for TypeScript. This oddly specific failure brought to you by my own experiences trusting version numbers.

And lastly,

🎁 The EF Core folks aren’t sleeping at all if this release changelog is any indication. EF Core 5.0 RC2 is out; and the list of changes is too long to mention here. It’s entirely evident that someone said “Look, EF Core is coming on November 10th, so it’d better be ready”. If you know an EF Core team member, slide them a gift card and a socially distanced hug.

Did you like what you read? This is a weekly newsletter you can sign up for at If you’d prefer it in audio form (hi, we should be friends), you can subscribe to the podcast version at

Last Week in .NET Issue #15 – It’s not a Bug, it’s just a feature you didn’t expect!

Mostly community goodies this week. No releases, but that’s not surprising given the impending release on November 10th. Here’s what I found last week in .NET:

📢 Github now supports code navigation for C# repositories. If you’ve ever used OpenGrok, you may have wonder why services like Github never provided navigation between references. Well now they do. This is a phenomenol offering from Github; having the ability to click on a reference for an object and go to that class definition is… long overdue.

📰 Mads Torgerson, designer on the C# team, talks about where C# is going I love C#, and I love that it’s touted as one of the most popular programming languages out there. But, let’s be real here: It’s popular days are still to come. For a long time it was “Windows only” and firmly sucking on the Microsoft Teat. It’s still doing that, but now with a veneer of open source, and actual cross-platform compatibility. Let’s not kid ourselves: C# was good for businesses, but now it’s good for everyone. I just hope it isn’t too late.

📝 Did you know you could add AssemblyInfo attributes dynamically using the AssemblyMetadataAttribute (whew!) … attribute? This is from March 2018 so I’m sure the API has changed a little bit, but a tweet from James Newton-King alerted me to this feature in .NET Core. If you need to modify your AssemblyInfo.cs at build time, this provides a great way of doing that. At least until the Zoomers come and decide that version numbers are passe and we should just deal with CalVer instead. All hail the Zoomers. Also I’m watching way too much TikTok.

🐦 Speaking of TikTok, Microsoft is a little depressed that their acquisition of C# didn’t pan out so they’ve been releasing “One Dev Question, One day” videos, and this week’s ask “What is C#”? My go to answer of “A really fucking awesome programming language that is tainted by its association with Microsoft” was rejected, quite unfairly I might add.

📢 Microsoft Edge now supports Linux. In a “No really, we’ve changed” moment, Microsoft now supports Linux on Microsoft Edge. I don’t have a snarky thing to say about this, except perhaps to question if their marketing department understands who their customer actually is. Hint: It’s not people that use Linux on their desktop. I’d also like to add that the money they put towards the development of Edge on Linux, they could have very well paid off an Open Source author or two. You know, like the guy from Appget?

⛳ In what we will all undoubtedly regret in 5 years, there’s a new course out on how to do full stack development with Blazor and WebAssembly. This is of course a terrible idea, but my support goes out to the gentlemen who are profiting off the popularity of Blazor. I don’t have a dog in this metaphorical fight, but anyone who has worked with ASP.NET webforms knows how this works out: JavaScript does it easier and better, and you end up maintaining something the community has shifted away from. has released a survey asking the community for its thoughts on Nuget. This survey closes soon, so take it now (I have no idea when it closes, but given that this is a weekly newsletter, we can safely assume it’s not long for this world). Microsoft has long ignored Nuget, so please take the survey so its issuers can keep their jobs.

🤚 There’s a github issue open that addresses the “MyMeth” problem in .NET Docs In the .NET Docs, (bless their hearts) they had documentation that referred to a “method”, and they called it “MyMeth” instead of “MyMethod”. It was of course noted and brought up, and sadly for the Breaking Bad fans among us, is going to be fixed.

📝 Apparently OData is still alive In what I will consider a “Holy Shit” moment, apparently OData 8.0.0 preview has been released. If you haven’t already jumped ship to GraphQL and still want a hella-insecure way to query your data, might I recommend OData?

📝 Choose a .NET Game Engine Microsoft is back on a “Tout C# for Game Development” kick and I am here for it. No, I do not forgive them for hurting XNA, but I’m going to give Microsoft their due Kudos: C# is viable to use for game programming, and they’re doing their best to make sure everyone knows it. Special thanks to Abdullah Hamed for the tweet that made me aware of this series.

🌎 The .NET team has released a site that shows their roadmap, pulled directly from their Github issues This is a good look into the Microsoft machine surrounding .NET, and well worth your time if you’re interested in the future of .NET.

📝 Attribute-Based Access Control With Blazor WebAssembly and IdentityServer 4 In what I can only characterize as a bad idea icecream topped with terrible idea sprinkles, there’s a series out on Codemaze on how to develop ABAC with Blazor WebAssembly. Personally, I’d be delighted to know if this fits a usecase you have and whether you’re going to implement it. Also, please send me a ‘before’ email so after your project’s launched we can commiserate over the idea and lost youth.

📝 Rick Strahl takes you into the process of creating .NET Custom project types with the .NET CLI Project Templates (whew!) Long story short, if you create microservices or otherwise want to enforce defaults and standards when creating a new project, this blog post is for you.

🐛 Jimmy Bogard found a bug in the .NET Core runtime, where string indexOf comparison fails or breaks depending on which runtime you use. As it turns out, Microsoft switched to ICU instead of using NLS (what they were using previously), and this change has the side-effect of breaking string comparison code that doesn’t specify a culture or StringComparison.Ordinal. Microsoft views this as the cost of doing business when they switched to ICU instead of NLS, which makes it not a bug, just a feature we didn’t connect the dots on.

🔉 Layla Porter, newly elected .NET Foundation Board Member, talks on .NET Rocks about… The .NET Foundation, specifically, it’s goals and how it needs to evolve.

📝 Jon Skeet takes us through the .NET Functions Framework If you’re trying to develop .NET applications that work on ‘serverless’ architecture, this framework and blog post are for you. It’s not for everyone and all usecases, but for some usecases, serverless functions are just what we need.

And that’s what happened Last Week in .NET. I’m George Stocker, and I help .NET teams build better systems faster, without the crankiness that inevitably comes from just slapping code together. To learn more, visit and I’ll see you next week.

Last Week in .NET – Issue #12 – dotnet and .NET Please don’t do this to us again

This is Last Week in .NET for the week ending 3 October 2020. You know, Last week. There were no releases this week, but a crap-ton of goodies abound.


🔗Ed Charbeneau talks about Blazor vs. MVC on his twitch stream One bad thing about twitch is the videos disappear after 14 days so you have another 4 days to watch this one.

🔗James Newton-King wrote a Blazor WebAssembly app that shows performance benefits of gRPC-Web over JSON. Tl;dr 70% less bandwidth, 10x faster deserialization; all without gzip.

🔗David Ramel focuses on how much faster Blazor is getting Microsoft already fooled me once with Silverlight, but I’m hoping this time will be different so I’ll dump all of my attention onto blazor and cry when they inevitably abandon it.

🔗How to deploy ASP.NET Blazor WEbAssembly to Azure Static Web Apps (translation: using blazor on a static site hosted on Azure)


🔗David Fowler shows the original design principles surrounding ASP.NET Core IT’s frightening to think that at this point the idea of ASP.NET Core is 5 years old.

🔗Michael Shpilt talks about ASP.NET Middleware and stuff you should probably know but have avoided. If you’re like me you’re about 3 months away from completely abusing middleware because you need to hook into the request pipeline for a dangerous reason.

🔗TheDevTalkShow on Twitch talked with Shahed Chowduri about “ASP.NET Core from A to Z” on their twitch show.

🔗That .NET Foundation meetup about Microservices and Containerization happened and I haven’t watched this yet and the reason you know I haven’t is that I would have started this sentence with a curseword. I’m sure it’s a good presentation but I have ethical issues with Microservices. Like developers should be bound by ethics not to use Microservices.

.NET 5

🔗Have you analyzed your .NET Framework project for .NET 5 portability? You may want to do that, and they may want to update that doc to reflect that it’s now called “.NET 5” and “ASP.NET Core on .NET 5” instead of “.NET Core”.

🔗Anthony Giretti Deep Dives into the System.NET.HTTP.JSON Namespace. If you’re going to serialize JSON in .NET 5 (and you will, t least until the cool kids move to gRPC), you’ll want to pay attention to this, especially since JSON.NET is ‘mature’.

🔗Do you want to see all the new Visual Studio templates? Check that box. Also, go vote and check that box.

🔗netstandard2.0 is the most used Target Framework Moniker by far Immo Landwerth showed the stats of most used TFMs (Do you know how to Read TFMs?) and the most used TFM is netstandard2.0 followed by net45. More deeply, this means that while library authors are hoping to target both Framework 4.7+ and .NET Core 2+, they’re not diving into the netcoreapp only features yet.

Broken Stuff You should probably Patch

🔗Microsoft Exchange Servers Still open to Actively Exploited Flaw. If you’re using exchange I’m sorry and I recognize you already have problems in your life, but here’s another one: An flaw has exploints in the wild. I can’t help but notice that the exploit was patched on 11 February 2020, about a month before the US went into total lockdown mode. I wouldn’t be surprised if that hurt adoption of this patch; but regardless.


🔗dotnet Conf is 21 October 2020 and you can register here

this is not to be confused with

🔗.NET Conf is November 10th-12th, 2020 Which is totally different than dotnetconf, Also if you’re listening to the podcast version for this I’m sorry. I will be live tweeting this @gortok on twitter. Mute now, just in case.


🔗The .NET team released the results of the survey that asked people about their experiences with the .NET repositories on Github. If you like data and skewed numbers due to sample size, you’ll love this survey.

🔗PM Director of the .NET Team, Scott Hunter sits down on youtube to talk about his job. Clearly enforcing the standard that it’s spelled .NET and not dotnet is not in the job description.

🔗Is it Too-pulls or Tuh-pulls? Maira and Kendra from Channel 9 released a video on Tuples in C#

Speaking of Tuples, I scrupiously commissioned a twitter poll about how to pronounce it. It has also spawned a link to this english.stackexchange question on the subject.

Miscellanous stuff that’s interesting

🔗Brian Armstrong, CEO of Coinbase, released a reprehensible blog post about Coinbase’s mission and got thoroughly roasted for it Good. If you’re going to put profits over people in 2020 you shouldn’t expect much else.

And that’s what happend last week in the world of .NET. No releases, but overall still a busy week.

To subscribe to the Last Week in .NET Newsletter, go to https://lastweekin.NET. To listen to the audio version of the newsletter, subscribe at

UBM, and a lament for the software industry

I grew up in tech as a UBM fan. Ok, not really a fan, but a “there’s very few voices writing books about ‘how to write code well’, and this person seems to know what they’re doing, so I’m going to listen to him”. I read all his books; attended talks he gave at SCNA, and thought for a while that his way was the right way.

That, of course, was a mistake. Much like anyone else who has ideas, most of UBM’s ideas are bad, a very few are good, and then you turn the light on and realize he’s about 10 seconds away from outright fascism.

If you’ve read his tweets (don’t), he apparently has a particular affection for law and order in the form of “gosh, we apparently don’t have enough of it since there were shooting deaths over the weekend.”

And normally you’d think this would align him with the pro gun-control crowd, but it doesn’t. Instead his answer is to give the police more money, and maybe they’ll find a way to get their clockwork stat of killing 3.2 Americans a day higher.

It’s grotesque, and I normally wouldn’t spend any further typing on UBM, but I bring him up because it’s instructive of the tech bullshit that’s holding our industry back.

I got into tech because I was the first kid on my block with a computer and a LAN. I wasn’t super competitive at sports in the “I want to win” sense, although growing up in America in the 80s meant that your worth as a human being was tied to whether your team won the game. The teams I was on seemed to lose a lot more than we won, and the few times I was on winning teams I could see the Jock’s kids doing it out of some sense of devotion and attention grabbing from their dads.

My dad didn’t really give a crap about sports. He was a reporter. I love him (RIP), but he was an asshole. He liked to find the uncomfortable buttons and push them whether those buttons belonged to politicians or the local school board. It made him a good reporter. He worked for TV, several newspapers, and he was the first reporter on the scene when his eldest son, at the tender age of 7, was hit by a car in the 70s.

That was shockingly hard on him for decades to come, and the alcoholism that ensued doomed his first marriage and almost tore his second marriage apart . Ironically the Congestive Heart Failure put a quick stop to the alcoholism.

What’s that saying about frying pans and fires again? One of the things my dad used to say repeatedly to me was “it’s not the man with the answers, it’s the man with the questions.”

He also liked to say “reporters report the news, journalists make the news.” Ten year old me had no idea what that meant, and 38 year old me has no idea whether he was pro-journalist or not with that statement.

One thing he did focus on was being outside of the story. Never make yourself the story, he would say.

UBM has a volume of work much greater than most of the modern tech space. Having been working in tech longer than I’ve been alive, it’s understandable. He was also one of the agile manifesto signatories, though with the passage of time it too seems to be a relic of another era and another war.

The ire UBM draws seems to be more from his lack of empathy than anything else, and as someone whose father lacked empathy, the signs are all the same.

As of this writing, there are 941 examples of police brutality against protestors that have risen up in response to decades of police abuse and the inhumane treatment of black people and people of color that has culminated in George Floyd’s murder at the hands of police. Let us also not forget Breonna Taylor, whom the prosecutors are currently trying to justify her murder by police after the fact by trying to get her boyfriend to sign a plea deal saying she was a part of his “criminal network”.

These cases of brutality are well documented, and if you follow Radley Balko’s work, they are just the latest in the decades’ long undeclared war on the black populace by police.

It’s during this time, when pain is at its greatest, when UBM tweets, “fund the police.” To which he rightfully got scorned. Only an asshole would say “pour more fuel on the fire” when it had consumed lives, neighborhoods, and our country.

This lack of empathy is present in UBMs talks as well; he has had a constant refrain of “we are professionals and professionals do good work.” He also has some shaker woodshop view of software in calling himself a “software craftsman”, which I don’t think you could get any more white or male by referring to the best software developers as “craftsmen”.

It’s interesting to note he holds software developers to a higher standard of professionalism than police, but such is the way of the fascist. The rules apply to thee, but not to the state.

This is our software industry, and our industry is both responsible for some of today’s woes; but we can also contribute to a economic boom that no other industry can match with the amount of time it takes to become a developer.

That’s the power of being in the software industry: You can go from intern to making six figures in less than 5 years, and some are making six figures right out of school.

But there’s one thing missing: We’ve not yet conquered the racial and gender issues that hurt black people, people of color, women, transgender, and non-binary people especially. The issues that keep them from being a part of this economic boom. And as is often the case, the people in power are the cause. Whether inadvertently through a lack of empathy or intentionally, white men get to play the tech game on easy mode while everyone else has to jump through the hoops we’ve put in place. I’ve benefited from it, and I look around at the talent that we have in tech in under-represented minorities and I realize that if there were a level playing field; this industry would be far more diverse than it is now.

I’ve become rather obsessed with Hamilton, the musical. This in of itself is an odd statement, given that I am (at best) neutral on the idea of a central bank, and harbor a bit of disdain for is historical evolution; but Hamilton the musical warmed me to the understanding of Hamilton the man. A man that previously was the scorn of libertarians everywhere; and this musical humanized him.

More so than that, the Musical showed the range and depth of talent that this unique re-telling of history could bring to the table. There’s nothing quite like Hamilton out there, and there’s no way that would have ever seen the light of day with a mostly white cast and white playwright at the helm. Lin-Manuel Miranda’s work has enriched our society; and it’s past time for us to give diversity its due. His work is just a recent example; and there are dozens of others.

How many Hamilton’s have been squashed in the software industry due to gatekeeping? How many Lin-Manuel Miranda’s have been pushed away? How much oxygen have white “thought leaders” taken out of the room?

Often, when under represented minorities in tech “make it”, it’s in-spite of this climate, not because of it.

One of the things we can do is to amplify other people’s voices, and to me that’s one of the problems UBM has: He doesn’t amplify other people’s work. As someone who has spent a lifetime in the software industry and become famous, he should. He has a large following, and using it to raise others up would improve the entire industry. My disappointment with UBM starts with the idea that as a leader he has an obligation to improve the industry; but he can’t see the injustice in front of his own nose.

We’ve stopped serving humans with the software we build. We’ve stopped focusing on the humans the software affects in search of basis points of engagement to improve. We have created entire industries to serve at the pleasure of investment returns for venture funds while ignoring the costs associated with serving VCs’ interests. And all the while we’ve done this, we’ve hurt the most vulnerable among us. If you’re Anglo-saxon, there’s good money that you identify as a Christian, and Jesus framed his entire teachings around the idea of lifting up and helping those around you.

The irony abounds, and the startup founders cash another venture capital check.

We are missing out on so much by gatekeeping; even if it is unintentional. We lose nothing by adding diverse voices to our teams and we gain so much by intentionally making our teams more diverse; from our leaders on down. If we are really supposed to be the leaders of tomorrow, if software is supposed to revolutionize living, then we have to start with who gets a seat at the table, and if that table is filled with mostly white dudes, we’re never going to reach our potential as an industry or as a force for change.

We need new leaders, diverse leaders who can help evolve our industry past its roots and make it a force for good for all people, and we’re not going to get there by listening to the people who got us here.

I have no answers here, as I have very little experience with this; so I’m going to defer to someone who does.

Addressing local conference diversity (or: Why I turned down a speaking gig)

Recently I submitted for a virtual one-day free conference; and my talk was accepted.

Ordinarily, this makes me pretty happy, my rejection rate is shockingly high (or maybe it’s normal and everyone’s rejection rate is shockingly high?), and it feels good to be able to talk about a subject I think is important and under-represented.

Speaking of under-represented, I sent an email after my acceptance to ask what the makeup of the conference was, specifically what the balance of white dudes vs everyone else was. Sadly, this being a regional conference that is going virtual, the makeup was around 20 white folks (I don’t know the gender makeup), and at most a handful of people of color.

Why did I ask what the make-up of the conference was? Well, I don’t really want to contribute to the imbalance. If there’s someone out there who can represent a different point of view and speak, I’d rather hear them speak . I’m not saying all white guys have the same point of view, but we are pretty much in the same ballpark, so to speak.

I’m not naming the conference because it’s irrelevant to the conversation; but the situation is top of mind.

And that left me with a choice, do I:

A) Demur, saying “I can’t speak at this conference because there’s an imbalance in speakers”
B) Speak at the conference, because the organizer stressed that there were few if any submissions from POC, and they didn’t have control over who submitted

Let me be clear in saying this, I’m not trying to virtue signal with this blog post. “Gosh, George is a good guy for demurring because the makeup of the speaker slate was too white and too male” sounds terrible and I’d probably groan and look the other way if another guy said that, and I’m a big fan of Matthew, chapter 6. In fact, writing about it seems like I’m looking for internet points when all I’m really looking for is to get some guidance and maybe start a conversation.

Our industry is too myopic. We see this every day in the technology outcomes. Social Media and apps inadvertently allowing stalkers to harass, AI targeting black people as more likely to commit crimes, Facial recognition software showing black people as monkeys, and there are lots of other examples. I had the opportunity to hear Kesha Williams speak at RevConf 2019 on these issues, and those examples stick with you (regrettably there is no video of that talk that I can find on the internet to share with you).

Put simply, Diverse teams build better software. But even if we had those diverse teams, who is doing the speaking at our conferences? All too often, it’s people like me, who have a rather privileged past and at best would contribute to that myopia.

I can’t do much about that on my own; and I do believe there are types of outreach that aren’t zero-sum; but speaking at a conference is still zero-sum. There are a finite number of slots for a given conference. If I get a slot, that means someone else doesn’t.

But what should we do in the case where I got a slot and no one else applied? Does the same thinking still hold?

I believe it does. Outside of myself and the organizer, I’m not sure anyone else would even know that not a lot of people signed up to speak at the conference. But those aren’t the optics. The optics aren’t the context, the optics are what gets put on a web page ‘speakers’ section and burned forever in the indexes of google. No one knows that I said ‘yes’ because there was no one to turn down, they only see me, 19 other white folks, and few people of color on the speakers page.

And what does that say? Depends on who you are. To some, it says pretty clearly that I was OK with the makeup of the conference, or that at best I was indifferent to it, and to others it’s business as usual, not worthy of mention.

Here’s why I’m bothered: It should always be remarkable and concerning when our events are mostly white guys in speaking slots. But it won’t be remarkable until we start remarking about it publicly. A lot of people of color have been talking about it for a long time; but outside of the largest conferences, I haven’t seen that discussion happen at a local level. It needs to happen at all levels.

Here’s where I’m asking for your opinion. I don’t have any good answers, but I hope we can figure something out as a community; whether that’s to cancel events where there’s not enough balance in the speaker list; or whether it’s to open CFPs sooner for events (this particular CFP was pitched 6 weeks before the event was slated to begin), or whether it’s to say, “Really? You see this as a problem? We’ve got software actively destroying people’s lives and you’re writing about speaking slots at a conference?”

I don’t have a good way to end this blog post, there’s no satisfying call to action because I don’t have any answers. All I can hope for you to do is think about what it says to you when your conference speaker slate is mostly white dudes; and what under-represented voices should be speaking at those events but aren’t, and whether the makeup of the speaker slate should affect whether an event happens.

Last Week in .NET – Week ending 05 September 2020; .NET gets Half, a new Data Type.

.NET Framework September 3, 2020 Cumulative Update Preview for Windows 10 (2004) and Windows Server (2004) is now available:

WPF now will not consider ‘etc.’ and ‘e.g.’ misspellings in the WPF Textbox or the RichTextBox, so they’ve finally entered the 20th century. Congrats?

Also they fixed a bug with cleaning up something or some other with the CLR. I’m gonna copy/paste this because it’s word salad to me, but if you have to deal with this on a day-to-day basis, it looks like they fixed ‘it’ (whatever ‘it’ is):

– Addresses an issue with a crash on COM interop to properly return the hresult for the Out of Memory Exception
– Addresses an issue in some 32 bit apps where, in certain scenarios, the JIT might omit a function call
– Improved support for cleaning up private temporary certificate keys

Some more editor goodies in Visual Studio 2019 Preview:

You can have Preview installed side-by-side, and preview is the only way you can see the .NET 5 goodies. Here are some of the editor goodness they’ve added in Preview:

TypeScript 4.0 is now Generally available:

App Trimming is going to be in .NET 5. and you can customize it:

I have no idea what this does from a practical perspective; it sounds like it removes unused members, functions, methods, etc, which should lower the executable size. Great for people who deploy to user’s desktops and Microservices; but not sure in the normal ‘we deploy to our server’ instance this would be useful. Shout out if I’m wrong and let me know why.

You now have template parity between the dotnet new command and the Visual Studio project templates

As of Visual Studio 16.8 Preview 2, you can now toggle in the settings to see all the templates you’d see from the command line. I like this, but I’m probably the only one that thinks this should be the default, and not the other way around.

.NET is faster on ARM64 now

The .NET team has been working hard to improve performance for ARM64 for .NET, and I’m glad. I don’t think Intel is long for this brave new world.

This blog post rivals most Steve Yegge blog posts; but if reading nitty gritty implementation details about the ARM platform juices you, give this blog post a read.

AOP using Proxies in .NET Core

This doesn’t get enough press, and AOP doesn’t get enough love, but check this out:

NDC Minneosota starts online tomorrow

Yea, I missed this; but if you’ve got money to burn, NDC is a great place to burn it. Or you can wait 6 months for the videos to be on Youtube.

.NET Now supports the Half Datatype

I really thought this was a joke. But reading it, it isn’t. There’s the need for a Half data type, apparently?

And that’s it for what happened last week in .NET . Today is a holiday so I won’t be releasing the audio form of this newsletter.

Last Week in .NET – 29 August 2020 – Blazor is the new Silverlight?

.NET 5 preview 8 has been released:

If you want to use .NET 5 Preview 8 with Visual Studio, make sure you have the Visual Studio 2019 16.8 preview 2 release installed.

Speaking of Visual Studio 2019 16.8 Preview 2, it now supports editor config fileheaders and namespace settings. So if your company has a 1980s centric approach to file-headers, you can now offload that work to the editorconfig.

ASP.NET Core 5 Preview 8 has been released.

Lots of Blazor updates and improvements, as well as ASP.NET Core now supports Model binding and validation for C# 9 Record types.

Entity Framework Core 5 Preview 8 has been released:

They fixed a metric ton of bugs, and there are a lot of small features that may interest you.

F# 5 Preview 8 is out:

F# 5 now includes String Interpolation; a la what C# has had for a few releases now. F# 5 now also includes complete nameof implementation support, and more.

Is it .NET 5? Is it ASP.NET Core 5? Is it ASP.NET 5?

Jon Galloway gives us the answer:

ASP.NET Core name stays – you’ll either see “ASPNET Core running on .NET 5” (blog post link) or “ASPNET Core 5”.

Npgsql update for EFCore 5 Preview 8 has been released:

I’m really glad people are pinning to the version of .NET Core they support. It’s hard to keep up otherwise.

Is Blazor the future of development?

Short answer: No, it’s not going to replace JavaScript, but it will give the “We’re a Microsoft shop, we use what Microsoft supports” crowd an adoption path for their aging Webforms implementations.

Saturday Morning Cleaning

Nobody cares about clean code.


You don’t, I don’t, your boss doesn’t, and your business model especially doesn’t.

I have three kids, two cats, a dog, and a spouse. We don’t really care about a clean house when the nights are frantic and we’re busy getting ready for the next day. After all, daughter #1 has soccer, daughter #2 has ballet, and daughter #3 (the 19 month old) acts like Jack-jack from Incredibles 2. When Saturday rolls around, we look around and realize. Oh god, we live in this mess?

And so we spend part of our Saturday setting things to rights.

We didn’t care about it when we probably should have, and as such had to spend part of our Saturday cleaning instead of having fun or preparing for the next week.

And next week, it starts all over again, and it’s this way throughout the school year. When summer rolls around, things quiet down and we pledge to do better next school year. Surprise, that lasts for all of about two weeks.

It’s not that we want to live in a messy house — we emphatically don’t. But, if the choice is ‘be ready for the next day’ or “not be ready for the next day and have a clean house”, we’re gonna punt on cleanliness, every time.

Your work is the same way. If you work in a feature factory (and there’s no judgment there, I’d expect that everyone reading this has worked in one at one time or another — they’re that common), then you’re going to frantically be implementing features for the business to demo and for sales to sell (or that they’ve already sold), and when that is done you get a few weeks where things quiet down before they start up again.

It’s the Saturday morning cleaning all over again.

Why can’t we break out of this cycle?

There’s a lot of value in a clean house. It’s easier to get ready for the next day, the overall level of stress is lower, and if something comes up that demands our immediate attention (like grabbing the kids shoes next to the door so we can get out of the house if it catches fire), we know that we’ll be ready.

A clean house enables us to improve our efficiency in getting ready for the next day, and the one after that, and the one after that.

But you can’t sell your boss on improved efficiency, not unless you can tie it to what they care about.

And until we can tie the work we do to something the boss cares about, it’s hard to sell continuous improvement in the form of Test Driven Development to ourselves, let alone our management teams.

Here’s a few of those things I’ve witnessed personally:

– Projects taking weeks to launch instead of several months
– Projects pivoting faster when the feature set needs changing
– No late night rollbacks due to a regression bug
– Decreased turnover
– Decreased bug count
– Happier customers
– Happier teams
– Going home at 5pm because you know your system won’t crash on you late at night
– reduced need for ‘on-call’ rotations for developers
– Improved revenue from being able to add features without increasing bug count and burdening support

When assessing importance, look for things that are tied to your KPIs or OKRs. If it’s written down, they care about it. If they have quarterly reviews about it, they care about it.

What’s important to you and your team? What’s important to your boss?