So you’ve been through part 2 : Scaling the Monolith, and you’re still thinking microservices might be the right answer? OK, Let’s talk it…
Welcome back to this series on architecting applications and systems with scaling in mind. In Part 2 of this series, we are going to take…
In our webinar on “Common Antipatterns and Refactorings”, I mentioned loops could sometimes be seen as antipatterns. Some people were…
I was working with another developer the other day, using C# records. When using a record, you may have seen syntax similar to primary…
This post is part of a series on NServiceBus. In the past couple articles, we created a saga that tries to verify a contributor’s phone…
Welcome to the series “Architecting to Scale”. In this series we are going to look at an iterative approach to scaling your applications…
This post is part of a series on NServiceBus. In the previous article, we created our first saga. In this article, we will introduce the…
In the last dev containers post, I mentioned that one of the painful things I have to deal with is maintaining Gatsby sites. The real pain…
Picture this - you’re a consultant who happens to be working on projects in different versions of Node.js. Or maybe you’re a consultant who…
For a long time, I’ve been used to creating regular expressions in C# like this: I declare it because I know it’ll never change or require…
Introduction Let’s assume we understand the need for a good suite of integration tests. Personally, these are my sweet spots for the level…
This post is part of a series on NServiceBus. In this article, we will implement the happy path of our example saga introduced in the…
This post is part of a series on NServiceBus. In the previous articles, we looked at fundamental concepts for messaging and how to get…
Last week, while I was at the dev up conference in St. Louis, I caught Kevin Johnson’s presentation called “Rising from the Ashes…
This is part of my blog post series on AutoMapper. Part 1 Part 2 Part 3 Part 4 The series returns! Part 5 of my AutoMapper series is brought…
Introduction Unit Testing is easy on greenfield but hard on legacy code. You’ve gone through the initial steps of extracting the troublesome…
NimblePros is excited to welcome another new member to our team (and we’re still small enough that we like to celebrate each new addition…
Consulting remotely for multiple clients presents many unique challenges not seen in other areas of software development. Within the scope…
We are thrilled to announce the early access launch of our highly anticipated Clean Architecture course! This course is designed…
As I prepare to deliver a mentoring talk, I think about the various “-ships” that help move careers forward. In this post, we’ll look at…
.NET’s abstraction finally absolves us of the need to wrap and friends with a custom interface. I’ve used it a lot for my date/time…
Have you ever had a moment where you need to make the same edits to multiple lines in a file? Maybe you have a list that needs bullets added…
In our recent webinar, we talked about architectural katas. We explained what they are, how they can be used, and a few different approaches…
I have a few Gatsby sites that I contribute to for work. The frontmatter boilerplate has been a thorn in my side, and I figured there has to…
Our previous post on sharing authentication in Playwright tests covered cookies and local storage. However, you might find that your single…
Fitness tests, also known as architectural fitness functions, are like checkups for your software’s design. They assess how well your…
You’re being responsible! You want to ensure that merges into your stable source control branch are safe, so you gate any merges with a…
Every architecture decision involves trade-offs. When you’re making decisions, you have to weigh which characteristics may benefit and which…
If you are currently trying to test pages behind authentication while using Playwright for .NET, you’re in the right place! This post stems…
NimblePros is excited to welcome another new member to our team! Jeff Valore is a Senior Consultant who brings a wealth of experience as a…
Every now and then, my clients will ask for my availability so that they can book time with me. As I have a Google calendar, I wanted to see…
Dependencies on external resources can make code difficult to test or maintain. This is hardly a hot take. Recently, a user in the devBetter…
This post is the fourth in a series on NServiceBus, a popular messaging framework for building distributed systems. If you’ve missed any of…
We are excited to share news about some of our teammates - Eric Fleming and Kyle McMaster have earned the credential of Particular Software…
In my last post, I wrote about wanting to run my web projects and tests in one terminal window and how I achieved it using DotnetBackground…
Picture this - you’re working on a .NET website and want to run front-end tests against that site. What happens when you want to run tests…
This post is the third in a series on NServiceBus, a popular messaging framework for building distributed systems. In the previous post, we…
We can’t stress the importance of documentation in software architecture. The decisions that you make today will impact the project now and…
Pull requests, or PRs, are a functional requirement in any cooperative development environment (and single development environment, in my…
This post is the second in a series on NServiceBus. In the previous article, we looked at What is NServiceBus. In this article, we will look…
This post is the beginning of a series focused on NServiceBus which aims to provide an overview of the framework and its ecosystem. We’ll…
Every now and then I need to do some math in my code, for some required business logic rule or other purpose. As an easy example, let’s…
In today’s increasingly complex world of software development, asynchronous messaging has become a fundamental architectural principle when…
Recently someone asked: A simple question. I have a set of tasks to perform and I want to optimize their performance. Basically reading a…
After seeing Steve pairing with ChatGPT, I’ve been pairing with my friends ChatGPT and Bard Gemini to help me get past writer’s block. This…
This article is part of a series on leveling up your testing skills Creating Test Objects via Design Patterns Supercharging Your Test Data…
Analyzing Your SQL Server Database: A Guide to Extracting Key Metrics with SQL Queries Introduction As a software developer or database…
In our last post, Scott talked about code katas as a tool for learning a language. Today, I’m going to introduce you to another type of kata…
Lately I’ve been tinkering with game development. It’s an aspect of software development that isn’t part of my job and I’ve always had a…
Are you going to be at CodeMash next week? We will be there! If you’re looking to catch up with us, we’ll be around all week. NimblePros has…
Festive Tech Calendar 2023 - Twas the Night Before Christmas This blog post is going to explore the events that happen in A Visit from St…
Refit exposes several settings and options. One such option enables the ability to add bearer tokens (any headers, really) to outgoing…
When we got started with Refit in my previous post I left a question open: If we wanted detailed information on HTTP traffic in Refit, how…
This article is part of the 2023 C# Christmas Calendar available here! Primary Constructors Last month, C# 12 introduced a new feature…
There are lots of ways to work with in .NET. When working with external APIs, I’ve recently discovered a rather useful mechanism that lets…
If you’re like me, you’ve needed to test business logic surrounding the current time. You’ve probably run into the classic case of having a…
My talk “From Legacy Monoliths to Microservices via EventStorming” debuted last week at Momentum Developer Conference. This is one of many…
It’s October, which means - it’s Hacktoberfest time! I’ve been working with Steve to see what’s in store with some of the open source…
In May 2023, we launched our free monthly webinars. These are 1-hour long webinars that are on topics we like to work with - such as…
Last month, while learning more about the Domain-Driven Design (DDD) community, I saw a post for the [Virtual open Space] Systems Thinking…
Have you ever been on a company project where you had a lot of questions because you felt like there were a lot of unknowns? Have you been…
With social media platforms evolving, communities are moving on to other platforms. How do you find your community when the social media…
As you move from Moq to NSubstitute, you may wonder how they differ code-wise. In a recent lunch-n-learn discussion, Scott DePouw walked us…
The Strengths and Benefits of the Fractional Software Architect Model When we talk about innovation in the tech industry, it’s often tied to…
In an ever-evolving digital landscape, businesses large and small often face challenges keeping pace with technological advancements…
We help some of our clients with migrating from .NET Framework to .NET Core apps. The .NET Upgrade Assistant can assist in the transition…
Have you checked in code that’s misaligned and not formatted cleanly? Have you checked in code with broken tests? What if there was a way…
Have you ever looked at code and felt overwhelmed by the inconsistencies in curly brace placement? Have you felt exhausted trying to follow…
There are projects that developers have nicknamed “Frankenstein” or “a monster”. These nicknames are applied to software applications that…
Note: This post is part of the SciFiDevCon 2023: May the Fourth Be With You event. Ardalis and Sadukie happen to be a part of the Stir Trek…
NimblePros is excited to welcome another new member to our team! Thomas Mullaly is a Senior Consultant who brings a wealth of experience as…
If you are wanting to work with EF Core with Postgres, you may run into a problem where the casing of your tables may cause issues for…
This post is a response to Lætitia Avrot’s triggering prompt for PGSQL Phriday #007. PostgreSQL is one of the many database technologies we…
As March comes to an end, I wanted to feature someone in honor of Women’s History Month, one of the women behind the L of SOLID principles…
LINQ (Language Integrated Query) is a widely used feature in .NET, and it’s great to see that it’s still being built upon and modernized…
Naming things is hard, especially if there are multiple words that make up that name. Remembering names of naming conventions can also be…
NimblePros is pleased to welcome Cameron Young to our team in the role of Consultant. Cameron recently graduated to alumni status in the…
Code coverage analysis is a useful tool for any developer looking to build high-quality, maintainable code. It helps identify gaps in your…
While I was looking at the Ardalis.GuardClauses repo, I noticed that the build process was failing. Talking with Steve, I noticed that the…
We ’re continuing to grow our team, and are excited to have Sarah “Sadukie” Dutkiewicz joining us! We have known Sarah through her prolific…
In today’s digital age, having a website or a web application has become a necessity for businesses and individuals alike. But deploying a…
In this quick tutorial, you will learn how to run and debug your application in Linux using WSL (Windows Subsystem for Linux) and Visual…
Compression can be a useful tool for reducing the size of data transmitted over a network or stored on disk. The .NET framework includes…
If you’ve run into an issue with LocalDB or SQL Server where the process fails to start and you see an error message about misaligned log…
This post is part of the F# Advent Calendar 2022 hosted by Sergey Tihon. The goal of this post is to provide a glimpse into the journey of…
Unit Testing Validation of Annotated Models It’s no secret that I like to unit test my code. The more I can decouple from dependencies and…
This is part of my blog post series on AutoMapper. Part 1 Part 2 Part 3 This was something I stumbled across in my work lately, which…
In this article we’ll show how structs and classes have different behaviors when it comes to constructors and why you need to be careful…
Fluent Assertions is a library used to make C# test code more readable and expressive. This frees your tests from syntax heavy assertion…
This is the third part of my blog post series on AutoMapper. First part here! Second part here! AutoMapper Allows Self-Mappings Without Map…
I recently tried a code kata that Steve Smith posted in our devBetter Discord server. The kata is essentially a modelling exercise. The goal…
If you’re coming from another programming language like JavaScript, Rust or Go, you may be familiar with the function found in the standard…
So you’ve set up some benchmarks for some performance critical piece of code in your application. Perhaps you’ve even followed along with my…
In the latest release of Ardalis.Result, a community requested feature was added to convert results from one type to another. This allows…
In this article I will show, step by step, how to set up a .NET benchmarking project. It is a cleaned up transcript from a video I made. We…
This is the second part of my blog post series on AutoMapper. Check out the first part here! AutoMapper: A Very Testable Tool One of the…
In a commencement address Steve Jobs gave to a Stanford graduating class, he said: You’ve got to find what you love… The only way to do…
Over the years, one of the tools I end up setting up / using / maintaining a lot has been AutoMapper. For the uninitiated, AutoMapper is a…
ASP.NET Core has great support for automated integration testing. The docs provide everything you need to get started, and there are many…
We’re pleased to announce our newest team member, Philippe Vaillancourt. Phil has many years of software development experience and is…
I was recently going through the process of installing the developer tooling I use on a fresh, new laptop. I installed the usual suspects…
We’re pleased to announce our newest team member, Jeremiah Cooper. Jeremiah has over a decade of professional software development, spanning…
Earlier this year Microsoft announced a new way to manage dependencies in .NET applications called Central Package Management. This new way…
Specification is a pattern in Domain Driven Design that helps encapsulate domain knowledge in a reusable way. The term Specification was…
A result is an abstraction that allows developers to express the value as well as the outcome of an operation. A basic result can represent…
Monitoring and Logging are critical pieces to the overall health and success of an application. Logging, which we’ll be specifically…
A Smart Enum is an enhancement of the C# enum that provides a strongly typed and object oriented approach to enum types. Smart Enums can be…
In a previous article we covered Getting Started with Guard Clauses. We introduced what guard clauses were, when they should be used as well…
A guard clause is a software pattern that simplifies complex functions by “failing fast”, checking for invalid inputs up front and…
Localization, the process of providing information in multiple languages as specified by the user, is a pretty common requirement for web…
We’re pleased to announce a new member of our team, Kyle McMaster. Kyle is passionate about learning new technology, and he looks forward…
devBetter is a group coaching program and professional software developer community. Its goal is to enable developers to accelerate their…
We hope that this note finds you well. It has been a long and unusual year for us all, and it is nice to finally be seeing some light at the…
This will also subscribe you to our email list.