<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>bojanveljanovski.com</title><description>Bojan Veljanovski&apos;s Tech Blog.</description><link>https://bojanveljanovski.com/</link><item><title>What I keep fixing in AI-generated code</title><link>https://bojanveljanovski.com/posts/what-i-keep-fixing-in-ai-generated-code/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/what-i-keep-fixing-in-ai-generated-code/</guid><description>The structural problems I keep correcting in AI-generated code, even with good prompts and solid plans.</description><pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate></item><item><title>How edit forms should load dropdown data</title><link>https://bojanveljanovski.com/posts/how-edit-forms-should-load-dropdown-data/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/how-edit-forms-should-load-dropdown-data/</guid><description>Edit forms with multiple dropdowns usually trigger one API call per dropdown. Two problems follow — the form stays blank until all calls resolve, and load time scales with dropdown count. This note covers how to fix both: embed current selections in the entity response, aggregate option lists into one scoped endpoint. Two requests total, regardless of dropdown count.</description><pubDate>Tue, 21 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Developer Command Snippets</title><link>https://bojanveljanovski.com/posts/developer-command-snippets/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/developer-command-snippets/</guid><description>A consolidated collection of command snippets I use regularly — PowerShell, PostgreSQL, RabbitMQ, AWS CLI, NPM/NVM, Chocolatey, and EF Core.</description><pubDate>Sun, 05 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Navigation properties make database calls invisible</title><link>https://bojanveljanovski.com/posts/no-navigation-properties-ef-core/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/no-navigation-properties-ef-core/</guid><description>Navigation properties make database calls look like property access. The query fires, the change tracker updates records, the cartesian product bloats the result — none of it visible at the call site. This note covers why I use foreign key IDs instead.</description><pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Git worktrees for parallel branch work</title><link>https://bojanveljanovski.com/posts/git-worktrees-parallel-branch-work/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/git-worktrees-parallel-branch-work/</guid><description>Using git worktrees to work on multiple branches simultaneously without managing local file changes.</description><pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Handling Enum Values as Strings in C# API Models</title><link>https://bojanveljanovski.com/posts/handling-enum-values-as-strings-in-csharp-api-models/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/handling-enum-values-as-strings-in-csharp-api-models/</guid><description>A practical pattern for working with enums in API request models - storing as strings while keeping type-safe enum logic throughout your codebase.</description><pubDate>Sun, 19 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Standardize Data at Write Time, Not Read Time</title><link>https://bojanveljanovski.com/posts/standardize-data-at-write-time-not-read-time/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/standardize-data-at-write-time-not-read-time/</guid><description>Why I normalize data from multiple sources when saving to the database, not when displaying it. Using IoT temperature monitoring as a practical example.</description><pubDate>Sat, 18 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Property Getters vs Get Methods: When to Use Which</title><link>https://bojanveljanovski.com/posts/property-getters-vs-get-methods-when-to-use-which/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/property-getters-vs-get-methods-when-to-use-which/</guid><description>A detailed guide on choosing between property getters and get methods in object-oriented programming, with practical examples and best practices for API design.</description><pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate></item><item><title>A Baseline CloudFormation Layout That I Keep Reusing</title><link>https://bojanveljanovski.com/posts/a-baseline-cloudformation-layout-that-i-keep-reusing/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/a-baseline-cloudformation-layout-that-i-keep-reusing/</guid><description>A structured approach to organizing AWS CloudFormation templates for containerized web applications, covering VPC networking, ECS Fargate, RDS, and automated deployment processes.</description><pubDate>Mon, 13 Oct 2025 00:00:00 GMT</pubDate></item><item><title>The Static-Instance Singleton Pattern in Flutter</title><link>https://bojanveljanovski.com/posts/static-instance-singleton-pattern-in-flutter/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/static-instance-singleton-pattern-in-flutter/</guid><description>Static methods for state changes, instance properties for reads. A singleton API pattern for Flutter.</description><pubDate>Sun, 12 Oct 2025 00:00:00 GMT</pubDate></item><item><title>Detecting Manual AWS Changes in CloudFormation Stacks</title><link>https://bojanveljanovski.com/posts/detecting-manual-aws-changes-in-cloudformation-stacks/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/detecting-manual-aws-changes-in-cloudformation-stacks/</guid><description>How to detect and manage configuration drift in AWS CloudFormation stacks.</description><pubDate>Sat, 11 Oct 2025 00:00:00 GMT</pubDate></item><item><title>What makes code hard to change</title><link>https://bojanveljanovski.com/posts/what-makes-code-unmaintainable/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/what-makes-code-unmaintainable/</guid><description>Why code becomes hard to change: cohesion failures, coupling failures, leaked decisions, and other structural causes of unmaintainable software.</description><pubDate>Thu, 24 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Your system is an ETL pipeline</title><link>https://bojanveljanovski.com/posts/system-as-etl-pipeline/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/system-as-etl-pipeline/</guid><description>Understanding how most software systems inherently function as ETL pipelines and how to leverage this perspective for better system design.</description><pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Wrapping Google Sheets as a backend instead of migrating away from it</title><link>https://bojanveljanovski.com/posts/google-sheets-as-a-backend/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/google-sheets-as-a-backend/</guid><description>A practical approach to using Google Sheets as a lightweight backend solution, preserving existing business logic while avoiding unnecessary rebuilding of systems.</description><pubDate>Tue, 22 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Build the throwaway prototype first</title><link>https://bojanveljanovski.com/posts/power-of-prototyping/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/power-of-prototyping/</guid><description>Before integrating unfamiliar code into production, explore it in a throwaway project first.</description><pubDate>Mon, 21 Apr 2025 00:00:00 GMT</pubDate></item><item><title>A loop that does five things is five problems</title><link>https://bojanveljanovski.com/posts/complex-loops-to-transformation-pipelines/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/complex-loops-to-transformation-pipelines/</guid><description>How to simplify complex data processing loops by refactoring them into clear, maintainable transformation pipelines using functional programming concepts.</description><pubDate>Sun, 20 Apr 2025 00:00:00 GMT</pubDate></item><item><title>Serilog Correlation IDs for background tasks in .NET Core</title><link>https://bojanveljanovski.com/posts/serilog-correlationid-background-task/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/serilog-correlationid-background-task/</guid><description>How to implement and manage correlation IDs in background tasks using Serilog in .NET Core applications for better logging traceability.</description><pubDate>Sun, 23 Mar 2025 00:00:00 GMT</pubDate></item><item><title>Use enums over booleans for status fields</title><link>https://bojanveljanovski.com/posts/use-enums-over-booleans/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/use-enums-over-booleans/</guid><description>Why and how to use enumerated types instead of boolean flags for status fields, improving code maintainability and preventing future refactoring headaches.</description><pubDate>Wed, 30 Oct 2024 00:00:00 GMT</pubDate></item><item><title>How to Use Pseudocode to Design Better Software - Working Example</title><link>https://bojanveljanovski.com/posts/a-step-by-step-example-in-pseudocode-driven-programming/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/a-step-by-step-example-in-pseudocode-driven-programming/</guid><description>A practical demonstration of pseudocode-driven development for designing maintainable software, with a real-world example from requirements to implementation.</description><pubDate>Sun, 13 Aug 2023 00:00:00 GMT</pubDate></item><item><title>Overriding services ASP.NET Core integration tests using ConfigureTestServices</title><link>https://bojanveljanovski.com/posts/overriding-services-in-aspnet-core-integration-tests/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/overriding-services-in-aspnet-core-integration-tests/</guid><description>Learn how to effectively override services in ASP.NET Core integration tests using ConfigureTestServices, with practical examples and testing patterns.</description><pubDate>Fri, 11 Aug 2023 00:00:00 GMT</pubDate></item><item><title>Test-specific AppSettings configuration in ASP.NET Core integration tests</title><link>https://bojanveljanovski.com/posts/test-specific-appsettings-in-aspnet-core-integration-tests/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/test-specific-appsettings-in-aspnet-core-integration-tests/</guid><description>How to properly configure and manage test-specific application settings in ASP.NET Core integration tests, ensuring isolated and reliable test environments.</description><pubDate>Thu, 10 Aug 2023 00:00:00 GMT</pubDate></item><item><title>Dynamic SQL queries: string concatenation vs SqlKata</title><link>https://bojanveljanovski.com/posts/building-dynamic-sql-queries-in-dotnet-using-sqlkata/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/building-dynamic-sql-queries-in-dotnet-using-sqlkata/</guid><description>A comparison of approaches to building dynamic SQL queries in .NET applications, contrasting string concatenation with SqlKata&apos;s query builder for safer and more maintainable code.</description><pubDate>Mon, 23 Jan 2023 00:00:00 GMT</pubDate></item><item><title>Type-safe appsettings configuration in .NET Core</title><link>https://bojanveljanovski.com/posts/strongly-typed-appsettings-configuration-in-net-core-with-validation/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/strongly-typed-appsettings-configuration-in-net-core-with-validation/</guid><description>Implementing strongly-typed configuration in .NET Core applications with built-in validation, using options pattern and data annotations.</description><pubDate>Sun, 08 Jan 2023 00:00:00 GMT</pubDate></item><item><title>Solving the N+1 query problem</title><link>https://bojanveljanovski.com/posts/select-n-plus-1-problem/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/select-n-plus-1-problem/</guid><description>A deep dive into diagnosing and fixing the N+1 query anti-pattern in ORMs, with practical examples of using eager loading and joins to improve database performance.</description><pubDate>Sun, 10 Jun 2018 00:00:00 GMT</pubDate></item><item><title>How to Extend Select2 with Adapters</title><link>https://bojanveljanovski.com/posts/extending-select2-with-adapters/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/extending-select2-with-adapters/</guid><description>A guide to extending Select2&apos;s functionality using its adapter and decorator patterns, with practical examples for customizing appearance and behavior.</description><pubDate>Tue, 24 Oct 2017 00:00:00 GMT</pubDate></item><item><title>Refactoring a Feature Envy Code</title><link>https://bojanveljanovski.com/posts/refactoring-a-feature-envy-code/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/refactoring-a-feature-envy-code/</guid><description>A practical guide to identifying and fixing Feature Envy code smell in C#, with step-by-step examples of moving behavior to where the data lives.</description><pubDate>Mon, 24 Jul 2017 00:00:00 GMT</pubDate></item><item><title>ASP.NET MVC5 Feature Folders Structure</title><link>https://bojanveljanovski.com/posts/feature-folders-structure-in-asp-net/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/feature-folders-structure-in-asp-net/</guid><description>How to organize ASP.NET MVC5 projects using feature folders for better maintainability and separation of concerns, with practical examples and implementation details.</description><pubDate>Fri, 27 May 2016 00:00:00 GMT</pubDate></item><item><title>How to Refactor Business Rules Using the Specification Pattern</title><link>https://bojanveljanovski.com/posts/towards-good-enough-code-re-factoring-business-rule-check-specification-pattern/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/towards-good-enough-code-re-factoring-business-rule-check-specification-pattern/</guid><description>A practical guide to implementing the Specification pattern for cleaner and more maintainable business rule validation in your code.</description><pubDate>Tue, 29 Sep 2015 00:00:00 GMT</pubDate></item><item><title>Rhino Security and StructureMap Integration Guide (Archive, 2015)</title><link>https://bojanveljanovski.com/posts/getting-started-with-rhino-security-structuremap/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/getting-started-with-rhino-security-structuremap/</guid><description>A comprehensive guide to integrating Rhino Security with StructureMap in .NET applications for robust security management.</description><pubDate>Sun, 11 Jan 2015 00:00:00 GMT</pubDate></item><item><title>.NET Database Development with FluentMigrator (Archive, 2014)</title><link>https://bojanveljanovski.com/posts/database-development-guide-for-dotnet-teams-with-fluentmigrator-2014-edition/</link><guid isPermaLink="true">https://bojanveljanovski.com/posts/database-development-guide-for-dotnet-teams-with-fluentmigrator-2014-edition/</guid><description>A comprehensive guide on implementing database versioning with FluentMigrator in .NET projects, including automated migrations, version control integration, and cross-database provider support.</description><pubDate>Fri, 12 Dec 2014 00:00:00 GMT</pubDate></item></channel></rss>