I’ve written before about career strategies that protect you as a software developer in a fast-moving industry. This post asks the same question about one force in particular, AI. Coding assistants started out as a chat window that could explain an error message. The current tools can read a whole repository, change a dozen files …
The Power of Simplicity: Doing the Simplest Thing That Could Possibly Work
There’s a famous saying that goes, “Less is more,” a principle that also extends to the world of programming. As a developer, I’ve found the mantra, “Doing the Simplest Thing That Could Possibly Work,” to be a beacon of guidance. This principle advocates for simplicity, advocating the creation of code that does the job in …
Updating NPM Packages: Tools and Strategies
Keeping our frontend dependency for a big front-end project can be a daunting task. It can get challenging and when this happen we better have strategy in place to ease the process. This article intends to describe some strategies and tools that we can use to help us ease the process of keeping our NPM …
How to Keep npm Packages Up to Date: A Practical Plan
In a large front-end project, the node_modules folder can hold over a thousand packages, and new versions of some of them come out every day. If you update whenever someone remembers to, you’ll eventually be several majors behind, with a security advisory you can’t apply because the fix depends on three other upgrades. If you …
Sharing Clients in Duende IdentityServer: Security Risks
Years ago I built authorization on the open-source IdentityServer4 (I wrote about that here). Its successor, Duende IdentityServer, is a commercial product, and its pricing depends on how many clients you configure. For a company that ships its software for customers to install on their own servers, instead of running it as SaaS, there’s also …
Thread Affinity in .NET: When CPU Pinning Helps and How to Use TPL
Thread affinity means restricting a thread to run only on certain CPU cores. Without it, the operating system’s scheduler can move a thread from one core to another as it balances the load across the machine. The idea behind pinning a thread is cache locality: a thread that stays on one core keeps its working …
Code Review Best Practices: A Complete Guide for Teams
Code review is one of the cheapest ways to improve software, and one of the easiest to get wrong. When it works, bugs get caught before they ship, knowledge spreads across the team, and the codebase stays consistent. When it doesn’t, pull requests sit for days, reviewers argue about formatting, and authors learn to dread …
When to Use Inheritance in C# (and When to Avoid It)
Inheritance is the feature most object-oriented programmers learn first. It’s also one of the most misused. Used well, it gives you a single abstraction that many types can stand behind, and calling code that never needs to know which one it has. Used badly, it gives you hierarchies five levels deep, base classes nobody dares …
Staying Relevant as a Software Developer: A Learning Strategy
Software development is a well-paid job, and a lot of people assume it works like many other professions: you put in a few hard years of study, and after that you mostly apply what you know. It doesn’t work that way. Software development is skilled work, and in this industry skills lose their value quickly. …
How to use ConfigBuilders for User Secrets Management in Asp.Net MVC 5
When it comes to storing our app secrets, Asp.Net Core has a built-in mechanism to do that out of the box. But this is not the case for Asp.Net MVC 5. For MVC 5, we need to install custom configBuilders packages in order to be able to have the same functionality. There are many other …
