Browse Articles

ASP.NET Core & C# Development

8 articles

ASP.NET Core, Web APIs, Entity Framework, Dependency Injection, authentication and production-ready .NET development.

Architecture & Engineering

9 articles

Practical software architecture, Clean Architecture, modular monoliths, and building maintainable systems that scale.

Design Patterns

7 articles

Classic GoF patterns explained with modern C# examples.

Testing

2 articles

Unit testing, integration testing, test-driven development (TDD), mocking, and strategies for building reliable software.

AI Engineering

3 articles

AI-assisted software development, LLMs, developer productivity, coding assistants, and the evolving role of artificial intelligence in software engineering.

Career & Self-Development

4 articles

Communication, teamwork, leadership, productivity, body language, developer mindset, and professional growth in software engineering.

  • Unit Testing and Test Driven Development in C#: The Real Use Case

    Writing code without unit tests can be risky because you might not realize issues until it’s too late. Unit testing helps to ensure that your code actually does what it’s supposed to do. And it also provides reassurance that you won’t break existing functionality when adding new features or fixing something in the future. →

  • Database Migrations in .NET: System Design & Tools

    Keeping the database state in sync with the code evolution is a natural process in software development and should be straightforward most of the time. But, during my career, I have encountered that some teams are having real struggles putting this into the right workflow without creating additional overhead. Except for doing manual migrations by executing SQL scripts directly on the database every time before deploying a new version of code, there are also tools that provide automated way of syncing code with the database. →

  • Who Is Responsible for AI-Generated Code? The Vibe Coding Ownership Problem

    What happens when a bug appears in the code which was written, reviewed and shipped by AI? Who is taking the responsibility in such a case? Is it the developer who wrote the prompts? Or the one who approved the pull request? Or the team in general? Why these questions are necessary to be answered at all or we already know the answers? →

  • JWT Authentication in ASP.NET Core Web API: Access and Refresh Tokens

    Most APIs need a way to identify their clients and protect resources from unauthorized access. JWT authentication provides a simple and widely used approach for handling this in stateless Web APIs.This article explains how JWT authentication works in ASP.NET Core and demonstrates its implementation step by step. For simplicity, we will assume that a user already exists in the database. User registration is outside the scope of this article. →

  • Code Review in The Age of AI

    As AI agents can write code much faster than any human developer ever could, and as we get hundreds if not thousands lines of code as a results of one prompt, the need for careful code review is greater than ever. This remains the primary mechanism for ensuring that code is following engineering guidelines, architectural principles and in the same time ensures long-term maintainability and extensibility. →

  • Premature Optimization in Software Development: Examples, Risks, and Best Practices

    In software development, performance matters, but chasing it too early can lead you into dangerous territory. This is the pitfall of premature optimization, a term that has become a cautionary mantra among developers. You can end up solving problems that do not exist, or worse, introduce complexity into a system that was already working well. →

  • Building Robust State Machines: A Practical C# Example

    State machines are great way to encapsulate complex logic where we have multiple transitions between one state to another with different conditions. It can be used to avoid complex if-elseif-else or switch-case statements in the way which is elegant and easy to read. In the end it is easier to track and debug state changes and new states and transitions can be added without major changes. →

  • Code Review Best Practices: Dos and Don'ts

    Code reviews are a crucial part of writing a great software. They help to maintain code quality, catch bugs early, improve mentorship and collaboration withing the team. But if done poorly, they can be frustrating, time-consuming, and even demotivating, what could lead to the situation when they are not done at all, which is the worst case scenario. →

  • ASP.NET Core Request Lifecycle: Deep Dive from HTTP Request to Response

    When we send a request to a .NET Core Web API, it goes through series of steps before a response is returned. Understanding this lifecycle is important in order to built what we need and how to use some of the prebuilt functionalities. Diagram bellow shows the entire request - response pipeline. →