<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <atom:link href="https://piotrbach.com/rss/" rel="self" type="application/rss+xml" />

        <title>Piotr Bach RSS Feed</title>

        <link>https://piotrbach.com</link>

        <description>Latest articles by Piotr Bach about Umbraco, .NET, architecture.</description>

        <pubDate>Sat, 04 Jul 2026 17:30:49 GMT</pubDate>

        <lastBuildDate>Wed, 23 Sep 2026 09:59:46 GMT</lastBuildDate>

        <language>en</language>

        <generator>BachPlatform / Umbraco CMS</generator>

            <item>
                <title>How to Reset an Umbraco 6 Admin Password in SQL Server</title>

                <link>https://piotrbach.com/blog/reset-an-umbraco-6-admin-password-in-sql-server/</link>

                <description>Reset an Umbraco 6 administrator password in SQL Server with the correct legacy hash, then recycle the IIS App Pool before testing the backoffice login.</description>

                <pubDate>Wed, 23 Sep 2026 06:25:14 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/reset-an-umbraco-6-admin-password-in-sql-server/</guid>
            </item>
            <item>
                <title>Umbraco Technical Debt: What I Fix, What I Investigate, and What I Leave Alone</title>

                <link>https://piotrbach.com/blog/umbraco-technical-debt/</link>

                <description>Technical debt is not a backlog of everything that could be cleaner. In a mature Umbraco platform, the useful question is economic and operational: what cost does the current design create, what evidence supports it, and what should the team do next?</description>

                <pubDate>Sun, 20 Sep 2026 11:41:13 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/umbraco-technical-debt/</guid>
            </item>
            <item>
                <title>Umbraco Upgrade Readiness: What Makes an Upgrade Expensive</title>

                <link>https://piotrbach.com/blog/umbraco-upgrade-readiness/</link>

                <description>Upgrade cost is often determined years before the upgrade begins. The useful question is not only whether an Umbraco solution can reach the next version, but how much uncertainty the surrounding platform carries into that change.</description>

                <pubDate>Sun, 20 Sep 2026 10:33:47 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/umbraco-upgrade-readiness/</guid>
            </item>
            <item>
                <title>How I Diagnose Slow Umbraco Sites in Production</title>

                <link>https://piotrbach.com/blog/how-to-diagnose-umbraco-performance-problems/</link>

                <description>Performance diagnosis is not a sequence of optimizations. It is an evidence loop: define the symptom, reproduce or observe it, decompose the latency, form a hypothesis, change the smallest useful variable, and verify the original symptom.</description>

                <pubDate>Sun, 20 Sep 2026 09:48:50 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/how-to-diagnose-umbraco-performance-problems/</guid>
            </item>
            <item>
                <title>Why Umbraco Projects Become Expensive: Technical Failure Patterns</title>

                <link>https://piotrbach.com/blog/why-umbraco-projects-become-expensive/</link>

                <description>Umbraco projects rarely become expensive because of one catastrophic decision. Cost grows when content architecture, custom code, data, search, infrastructure, deployments, dependencies, and ownership drift apart. This guide examines the technical failure patterns that make mature Umbraco platforms harder to change, operate, and upgrade. They are not isolated checklist items: several usually reinforce one another, and the visible CMS is often only where the underlying problem surfaces.</description>

                <pubDate>Sat, 22 Aug 2026 20:00:00 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/why-umbraco-projects-become-expensive/</guid>
            </item>
            <item>
                <title>ASP.NET Core Architecture: The Decisions That Matter in Production</title>

                <link>https://piotrbach.com/blog/aspnet-core-architecture/</link>

                <description>ASP.NET Core does not force you into one application architecture. That freedom is useful, but it also makes it easy to accumulate layers, abstractions and infrastructure without being clear about the problem each one solves.</description>

                <pubDate>Sat, 22 Aug 2026 10:00:00 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/aspnet-core-architecture/</guid>
            </item>
            <item>
                <title>Why Umbraco&#x2019;s Move to ASP.NET Core Changed the CMS</title>

                <link>https://piotrbach.com/blog/why-umbraco-s-move-to-aspnet-core-changed-the-cms/</link>

                <description>Umbraco 9 did more than replace one runtime with another. Moving from .NET Framework to ASP.NET Core changed where Umbraco could run, how projects were structured, how developers extended the CMS, and how Umbraco could follow Microsoft&#x2019;s modern .NET release cycle.</description>

                <pubDate>Sun, 16 Aug 2026 09:34:39 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/why-umbraco-s-move-to-aspnet-core-changed-the-cms/</guid>
            </item>
            <item>
                <title>Defensive Programming in .NET: Principles and Examples</title>

                <link>https://piotrbach.com/blog/defensive-programming-in-dotnet/</link>

                <description>A production-focused guide to designing explicit contracts, handling realistic failures, protecting trust boundaries, and recognizing defensive-programming signals during .NET code reviews and technical audits.</description>

                <pubDate>Sun, 16 Aug 2026 06:00:00 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/defensive-programming-in-dotnet/</guid>
            </item>
            <item>
                <title>How to Examine Umbraco Property Values for a Given Data Type</title>

                <link>https://piotrbach.com/blog/examine-umbraco-property-values-given-data-type/</link>

                <description>A practical, read-only T-SQL technique for finding published content that uses a specific data type in Umbraco 13</description>

                <pubDate>Sat, 15 Aug 2026 12:09:58 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/examine-umbraco-property-values-given-data-type/</guid>
            </item>
            <item>
                <title>How to Add Umbraco Redirect URLs Directly in Database</title>

                <link>https://piotrbach.com/blog/how-to-add-umbraco-redirect-urls-directly-in-database/</link>

                <description>Need to preserve old URLs after an Umbraco 17 migration? Here is how umbracoRedirectUrl works, how to add records with SQL Server, and how to verify the resulting 301 redirect.</description>

                <pubDate>Sun, 09 Aug 2026 12:08:39 GMT</pubDate>

                <dc:creator>Piotr Bach</dc:creator>

                <guid isPermaLink="true">https://piotrbach.com/blog/how-to-add-umbraco-redirect-urls-directly-in-database/</guid>
            </item>
    </channel>
</rss>
