Why You Should Learn Regex (Regular Expressions) - It's Not Just for Code

I spent a significant part of my career thinking of regular expressions as tools only for complex pattern matching in code—and the inevitable debugging nightmare when I had to revisit that code later. Now I know how helpful they are for tasks that support writing code, and I use them regularly for the massive productivity boost they can provide.

Read full post gblog_arrow_right

OWASP Top 10 – A01 Broken Access Control - Part 2

This post is Part 2 of my OWASP Top 10 Series . You can read Part 1 here , which covers role-based access to admin features. Introduction to Broken Access Control This is the second in a series of blog posts about the OWASP Top 10. You can find the OWASP Top 10 List here . This is part 2 on the topic of Broken Access Control . Today we’re taking a look at access control vulnerabilities at the data model layer.
Read full post gblog_arrow_right

Top 10 Software Development Skills for 2025

This is my list of the top 10 software development skills for 2025. The list is based mostly on my own experience. Both skills that I see and work with on a daily basis, as well as trends I see emerging in the industry. Being a software developer requires a lifelong learning mindset. (side note: I’m planning a follow up post on what I think are the best qualities of a software developer.
Read full post gblog_arrow_right

OWASP Top 10 – A01 Broken Access Control - Part 1

This is Part 1 of my OWASP Top 10 Series , where I explore each security risk in the context of ASP.NET Core development. This is the first in a series of blog posts about the OWASP Top 10, starting with the most critical security vulnerability: Broken Access Control. In this post, we’ll explore what it is, why it matters, and how to prevent it in an ASP.NET Core Razor Pages application using modern ASP.
Read full post gblog_arrow_right

How to Query Large SQL Tables Efficiently Using Only the Primary Key

Do you need to query a massive SQL table with millions of rows, but there is no index on the column you care about? In this post, we’ll look at a simple technique to speed up your queries by using only the index that you do have — the primary key — to improve performance. Including the primary key in the SQL query when no other index exists on the target table can significantly reduce the amount of database resources it takes to find the data you are looking for.
Read full post gblog_arrow_right

Improve C# App Performance by Eliminating Nested Loop Lookups

The Problem: Nested Loops and Repeated Queries Data lookups can often cause a common performance problem to be introduced into code. In this post, we’ll look at an example of that problem and one possible solution. For this example, we’ll be using a C# console application that reads from the country table of the MySql sakila sample database. However, the refactoring solution presented is language and database agnostic. This solution is only meant to demonstrate a common problem with nested loops.
Read full post gblog_arrow_right

Making Better Software Decisions: Trade-offs and the Type 1 and Type 2 Strategy

After 25 years in software development, I’ve come to realize that every decision involves a trade-off. Do you need to make an algorithm highly performant? Then you may need to make some sacrifices in maintainability and readability. Do you need to make the architecture of a software system extremely flexible and resilient to change? Then you may need to make the architecture more complex. Do you need to use a framework that is a great fit for solving specific business needs?
Read full post gblog_arrow_right