Teams are spending real money building context layers so AI tools can understand their engineering systems. The problem they're solving is real. The diagnosis is wrong.
Read →Most teams treat legacy .NET modernization as a framework upgrade. It's actually two separate problems at different levels of the architecture — and solving one without the other doesn't get you there.
Read →Milan Jovanović drew the line clearly: modules are business boundaries — data ownership, inter-module contracts. Vertical slices are feature code organization within those boundaries. Conflating them is a different and costlier mistake than most teams realize.
Read →Pre-built primitives is an abstract concept. 524 API endpoints, 700+ stored procedures, and 300+ tables is a specific surface. Here is what the pre-built layer in CleenUI actually contains — and what it means for a team's first three months.
Read →Vertical slices and modules solve different problems at different levels of abstraction. CleenUI's 20 production modules are macro architecture decisions — each owns its data, its service layer, and its API surface. That distinction changes how teams reason about growth and how AI tools perform.
Read →Modular monolith is the architectural consensus in 2026. But most discussions treat it as an abstract principle. Here is what it looks like in practice: five enforced layers, 300+ Azure SQL tables, 700+ stored procedures, and 20 vertical-slice modules — each owning its own data.
Read →Microsoft shipped .NET 11 Preview 7 on August 11 — the final preview before RC. NativeAOT is now the default for the CLI tooling, and .NET 11 continues hardening NativeAOT publishing for API workloads. GA is November 10. The data access pattern you chose determines how clean the migration is.
Read →When code review fades as a quality gate — because AI generation speed outpaces human review cycles — codebase structure has to carry what the review process used to carry. That's an architecture problem, not an AI tooling problem.
Read →The tether that keeps vibe coding from becoming technical debt isn't a governance policy or a review checklist. It's the enforced structure of the codebase itself — and you can't add it after the AI sessions start.
Read →Most B2B SaaS teams scope at the application layer. That means a query missing a parameter returns cross-tenant data, not an error. Multi-tenant scoping done right lives in the data layer — in the stored procedures — where AI agents and developers can't accidentally bypass it.
Read →Running an AI coding agent against a legacy .NET codebase is one of the fastest structural audits available. The agent's failure modes map directly to the modernization problems a formal audit would find — in an afternoon instead of a week.
Read →The .NET community is converging on modular monolith architecture in 2026. CleenUI's codebase was structured this way from the start — along with a data access decision the ORM-first crowd still argues about: Dapper plus stored procedures, all the way down.
Read →Gergely Orosz documented that AI coding models fail at Meta and Google because both run monoliths with non-standard tooling. For .NET shops on legacy systems, this is the migration argument updated for 2026.
Read →Dapper + stored procedures was a bet made when CleenUI was designed. In the AI coding era — where generated code hits the data layer constantly — that bet turns out to pay better than expected.
Read →A vertical-slice module runs from UI to DB in a complete, coherent cut. When AI generates code against a module that already runs, it has the full context: the component, the endpoint, the service, the stored procedure, the table. That context is what makes generated code integrate.
Read →Most .NET modernization projects stall not because the new architecture is wrong, but because the team underestimates what they're carrying. Here's what legacy .NET actually looks like and what a clean landing target costs to reach.
Read →When AI agents generate data access code against 700+ named stored procedures, they cannot write ad-hoc SQL. The procedure is the interface. This is not a constraint on the agent — it is the constraint that makes agent-generated data access safe.
Read →Milan Jovanović is right that microservices impose a tax before they deliver any benefit. But the right alternative isn't just 'start with a monolith.' A code footprint is different in kind — production-proven decisions already made, not a starting shape you fill in.
Read →Karpathy moved to 80% agent coding and still says his AI writes bloated code he's stopped trying to fix. The thing agents cannot generate is the architecture itself — the decisions about where things live and what 'fits' means in a given system.
Read →Most architectural arguments about monoliths vs. microservices miss the real decision: which architectural shape survives growth without operational overhead? For most B2B SaaS teams, the modular monolith with .NET 8 and Azure SQL is still the answer.
Read →CleenUI ships with 20 vertical-slice modules, each running UI to database. Here is why the vertical slice is the right default organizational unit for a B2B SaaS codebase, and what it changes about how features get built.
Read →Teams running WebForms, .NET Framework, or sprawling stored-procedure codebases aren't facing a rewrite decision — they're facing a migration question. Here is what that migration actually involves and where most teams get stuck.
Read →The chatbot era of AI coding is over. Agentic systems are arriving — and the codebase they operate against is the context that determines whether their output integrates or accumulates.
Read →The common concern is that AI coding tools will devalue architectural skill. The actual dynamic is the opposite — architectural decisions made before AI adoption compound through every AI-generated output that follows.
Read →A vertical-slice module is not a folder of related files. It is a complete system unit from UI to database. Understanding what that means in practice explains why AI tools generate more coherently into a modular codebase than into a flat one.
Read →The decision to use Dapper + ADO.NET against stored procedures is architectural, not accidental. It's a deliberate choice about who owns the query plan — and in the AI era, it turns out to be exactly the right choice.
Read →AI agents don't modernize a codebase — they generate against it. When the foundation is legacy .NET, every AI-assisted session inherits and amplifies the patterns already there.
Read →Microservices split what should not be split. An ORM adds a mapping layer between your code and your query plan. The modular monolith on .NET 8 + Azure SQL avoids both traps. Here is the architecture and why it holds.
Read →Auth, billing, notifications, file handling — every B2B SaaS team builds these before they reach their differentiator. Here is what the CleenUI codebase ships so that list is already done.
Read →M01–M20 are not stubs. Each module runs the full stack — UI to stored procedure. Here is what a vertical slice actually contains and why it matters for the first sprint.
Read →On June 22, GitHub added Claude as a selectable agent provider in JetBrains IDEs, and announced Copilot's default model switches from GPT-4 Turbo to Project Polaris in August. The model is now an interchangeable configuration. The codebase it acts on is not.
Read →AI generates code at the syntax layer. Engineers hold the structure. Martin Fowler and Kent Beck said as much at The Pragmatic Summit in February 2026. Here is what that means in practice for a B2B SaaS build.
Read →.NET 11 Preview 5 ships an MCP server template in the SDK. The scaffold is the easy part — what it exposes about your existing API surface is the more useful finding.
Read →Most legacy .NET systems weren't built badly — they were built for a different era. The path to .NET 8 is defined by boundary decisions, not big-bang rewrites.
Read →Technical due diligence on a software company follows a short list of questions. The answers either exist in the codebase or they don't — and the audit takes about 90 minutes to find out which.
Read →Gergely Orosz named the pattern: tokenmaxxing, gaming AI usage metrics the same way teams used to game lines-of-code counts. The real AI productivity signal is what ships — and that depends on the codebase underneath the agents.
Read →CleenUI ships 20 production-ready vertical-slice modules — M01 Security through M20 Contracts & E-Signature. Here is what each one covers and why the modular monolith shape matters more than the count.
Read →CleenUI's data layer runs on Dapper and ADO.NET against 700+ stored procedures. Here is the reasoning behind that choice and why it still holds in a .NET 8 world where alternatives are more capable than they have ever been.
Read →