Browse Articles
ASP.NET Core & C# Development
6 articles
ASP.NET Core, Web APIs, Entity Framework, Dependency Injection, authentication and production-ready .NET development.
Architecture & Engineering
10 articles
Practical software architecture, Clean Architecture, modular monoliths, and building maintainable systems that scale.
Testing
3 articles
Unit testing, integration testing, test-driven development (TDD), mocking, and strategies for building reliable software.
AI Engineering
2 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.
Articles
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. →
ASP.NET Core Web API Architecture: A Lightweight Starting Point
How much architecture does an ASP.NET Core Web API actually need? This is always the question when starting a new project and how to approach it can have a significant impact on how maintainable the project becomes as it evolves. →
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. →
The Vibe Coding Traps and Delusions
For a long time, I am thinking about writing something on this topic, but since I was not sure about my thoughts and how to formulate them, I kept silent. The last few months things are getting clearer in my mind, so here I am to express my opinion on current AI development and its influence on software engineering industry and everyday tasks of one developer.I am writing this post in hope that my experience of more than one year actively using LLMs and agents in coding could help someone who is struggling with the entire idea behind. →
Git Merge vs Rebase: How to Keep a Clean Git Commit History
A well-maintained Git log is more than just a record of commits. It is a story of your project’s growth, collaboration, and problem-solving. But as projects scale and teams grow, Git logs can become cluttered, making it harder to trace changes, understand context, or troubleshoot issues. →
Pragmatic TDD in C#: A Step-by-Step Guide to Unit Testing
Writing code without unit tests can be risky because you might not realize issues until it’s too late. Unit testing helps to make sure your code actually does what it’s supposed to. In this post, we’ll break down unit testing in C# using NUnit and explore how Test-Driven Development (TDD) can make your life easier. →