Sign in

Chris Woody Woodruff

@woodruff.dev
1.9K followers 947 following 24K posts

I like creating software solutions to solve problems. I am also a speaker, podcaster, and author on technology. I love htmx, server-side web dev, data, Web APIs, baseball and bourbon. .NET/Web Dev MVP All of my posts are created using recycled electrons

PostsRepliesMedia
Reposted by Chris Woody Woodruff
Update Conference @updateconference.bsky.social · 29/09/2026
Build secure and scalable Minimal APIs with ASP.NET Core 11. Join @woodruff.dev for a hands-on #UCP26 workshop covering EF Core, JWT, OWASP security, testing, caching and .NET Aspire. 📅 November 11 · Prague One of four workshops: prague.updateconference.net/en/workshop #DotNet #ASPNETCore
011
Chris Woody Woodruff @woodruff.dev · 29/09/2026
Very cool
010
Reposted by Chris Woody Woodruff
Peter Ritchie @peterritchie.com · 29/09/2026
When I saw this I thought of you @woodruff.dev microsoft.github.io/rust-for-dot...
microsoft.github.io
Introduction - Rust for C#/.NET Developers
121
Reposted by Chris Woody Woodruff
Developer Relations Activity Patterns @devrelpatterns.com · 25/09/2026
Swapping logos on a landing page is not a DevRel partnership strategy. New episode: @woodruff.dev , @tedneward.bsky.social , @stmcallister.bsky.social dig into the Partnership Pattern. Big fish vs. small fish, brand risk, and revenue. 🎥 youtu.be/Dexlkwdzl7s?... 📖 link.springer.com/book/10.1007...
youtu.be
Episode 11: The Partnership Pattern
YouTube video by Developer Relations Patterns
022
Reposted by Chris Woody Woodruff
Update Conference @updateconference.bsky.social · 25/09/2026
Reading about surfing won’t keep you on the board. Reading about public speaking won’t prepare you for the stage, either. In an Update Talk hosted by @woodruff.dev, Carolina Greno shares three tips for tech talks: use analogies, tell a story, and practice out loud. Full Talk: youtu.be/UCWvm_Z7vJ0
011
Chris Woody Woodruff @woodruff.dev · 26/08/2026
Dirty AI logic I see
000
Reposted by Chris Woody Woodruff
Update Conference @updateconference.bsky.social · 05/08/2026
🚀 Can #GitHubCopilot Agent solve a GitHub issue from start to finish? And when should you choose #GitHubActions over #AzureDevOps Pipelines? In this #UpdateTalk, @woodruff.dev and @ba.4bes.nl discuss both. Don't miss it. Watch 👉 now.updateconf.net youtu.be/OEhtDBdAhAk
youtu.be
Update Talk | Barbara Forbes & Chris Woodruff | GitHub Actions Explained
YouTube video by Update Conference
011
Reposted by Chris Woody Woodruff
Dylan Beattie @dylanbeatt.ie · 05/08/2026
@jimmybogard.com joined me on #UseWhatWorks this week to talk about AutoMapper, MediatR, what it's like running a popular open source package - and what actually happens when you decide to change your project's licensing. The video's up on YouTube now; check it out: www.youtube.com/watch?v=RE-w...
youtube.com
Use What Works: Open Source with Jimmy Bogard
YouTube video by Dylan Beattie
021
Chris Woody Woodruff @woodruff.dev · 18/07/2026
www.woodruff.dev/threads-task... Here are some resources microsoft.github.io/RustTraining...
woodruff.dev
Threads, Tasks, and Ownership: C# and Rust Concurrency Explored - Chris Woody Woodruff | Fractional Architect
Concurrency in programming can be like cooking dinner while answering emails—you’re juggling multiple tasks at once, hoping nothing burns. C# and Rust both tackle concurrency, but their approaches cou...
131
Chris Woody Woodruff @woodruff.dev · 16/07/2026
Thanks. I also have a Rust for C# devs blog series. www.woodruff.dev/from-c-to-ru...
woodruff.dev
From C# to Rust: A 42-Day Developer Challenge - Chris Woody Woodruff | Fractional Architect
I’ve spent over a decade writing C# and building solutions on .NET. But for six weeks, we will step outside the managed world of garbage collection and runtime JIT to dive headfirst into Rust—a system...
120
Chris Woody Woodruff @woodruff.dev · 23/06/2026
Your CSV import handles 10k rows in dev. Then prod sends 500k, and it runs for hours. New post: parsing, streaming, and the upsert EF Core 10 still can't do natively. Benchmarked on .NET 10. Sponsored by ZZZ Projects. #EFCore #dotnet #sqlserver #databases #data www.woodruff.dev/scaling-ef-c...
woodruff.dev
Scaling EF Core for Data Imports: From CSV Files to Millions of Database Rows - Chris Woody Woodruff | Fractional Architect
The Import Job Nobody Wants to Own Every team has one. It might be called an import service, a feed processor, or a sync job. The name varies. What stays constant is the shape of the problem: a large ...
041
Chris Woody Woodruff @woodruff.dev · 18/06/2026
EF Core 10 ships no native upsert, so everyone hand-rolls the check-then-insert loop that crawls at scale and breaks under concurrency. New guide: BulkMerge performs insert-or-update in a single call. www.woodruff.dev/bulkmerge-up... Sponsored: ZZZ Projects
woodruff.dev
BulkMerge (Upsert) in EF Core: How to Insert-or-Update Without the Headache - Chris Woody Woodruff | Fractional Architect
Picture this. Your inbox lights up at 7:14 AM. A supplier just pushed 50,000 product records to your endpoint. Half are new. The other half are updates to products already sitting in your database. Yo...
012
Chris Woody Woodruff @woodruff.dev · 15/06/2026
reminder for the .NET people: 4 days left on the WOODY code 24 days until the workshop After Friday, you can still come, you just pay $400 extra to feel decisive. live360events.com/events/train... #dotnet #csharp #ai
020
Chris Woody Woodruff @woodruff.dev · 12/06/2026
htmxRazor v2.1.0: Advanced Inputs. Date picker, time picker, combined date+time control, and a radial category selector. Keyboard-accessible, server-rendered, no client-side JS library. Playwright E2E back in CI. www.woodruff.dev/new-release-...
woodruff.dev
New Release!! htmxRazor v2.1.0: Advanced Inputs - Chris Woody Woodruff | Fractional Architect
Forms are where server-rendered apps either feel sharp or feel clunky. A date field that drops you into a raw text box, a category selector that needs a client-side widget and three npm packages, a ti...
020
Reposted by Chris Woody Woodruff
Scott McAllister @stmcallister.bsky.social · 09/06/2026
Another podcast episode is out! @tedneward.bsky.social @woodruff.dev and I banter about the Conference Session pattern! Let me know what you think!
032
Chris Woody Woodruff @woodruff.dev · 09/06/2026
Performance update for the Baseball History Project: I moved the database from SQLite to Postgres, and the speed jump is huge. Queries that used to drag now feel instant. Next up: an MCP server for baseball stats. Stay tuned. baseballhistoryproject.com
121
Chris Woody Woodruff @woodruff.dev · 02/06/2026
Your codebase has 14 interfaces extracted "for flexibility." 2 have a second implementation. 12 have an interface declaration, one implementation, and a factory that chooses between the only option. Stranded assets. Paid for once. Maintained forever.
simplicityfirstphilosophy.substack.com
The Abstraction Budget
Why Every Interface, Generic, and Pattern in Your Codebase Has a Price You Have Not Paid Yet
121
Chris Woody Woodruff @woodruff.dev · 31/05/2026
Was chatting with the EF Core team about anti-patterns, walked through offset pagination, and completely forgot to mention keyset. So I wrote the post I should have brought. Skip().Take() isn't wrong. It's misapplied. On hot tables, it's slow AND silently drops/duplicates rows. Keyset fixes both.
woodruff.dev
Pagination in Entity Framework Core: Why Skip/Take Falls Apart on Hot Tables - Chris Woody Woodruff | Fractional Architect
If you've built an ASP.NET Core API or list view backed by Entity Framework Core, you've almost certainly written something like this: var page = await _db.Orders .OrderBy(o => o.Id) .Skip((pageNumber...
010
Chris Woody Woodruff @woodruff.dev · 29/05/2026
The new stack was Next.js. The new stack was NestJS. The new stack was modern. Three years later, the same team is having the same conversation about the same problems against the system they just rewrote. The architecture survived the migration intact. #softwarearchitecture #softwaredesign
simplicityfirstphilosophy.substack.com
The Rewrite Trap: Why Rebuilding the System Almost Never Fixes What Was Actually Broken
The Same Architecture, Now in TypeScript
011
Chris Woody Woodruff @woodruff.dev · 21/05/2026
I will be on the .NET Data Community Standup in about 30 minutes. You can watch here www.youtube.com/watch?v=jlR6... I will be discussing 8 Real-World EF Core Query Anti‑Patterns (and How to Fix Them). I might even drop in a bonus EF Core nugget if there is enough time.
youtube.com
.NET Data Community Standup: 8 Real-World Query Anti‑Patterns (and How to Fix Them)
YouTube video by dotnet
010
Chris Woody Woodruff @woodruff.dev · 19/05/2026
The cloud bill was $480K. The system actually costs $2.4M per year to run. The other $1.9M lives in maintenance time, lock-in, integration debt, and exit costs. The accounting system never sees it. The Dependency Audit is the receipt nobody printed.
simplicityfirstphilosophy.substack.com
The Dependency Audit
Why Every Library, Framework, and Vendor on Your Stack Has a Cost You Never Wrote Down
022
Chris Woody Woodruff @woodruff.dev · 17/05/2026
Complexity is not sophistication. It's a trap. I joined The Modern .NET Show to talk about the Architecture Tax, the Three Filters, and why simpler systems consistently outperform complex ones in production. dotnetcore.show/season-8/sim...
dotnetcore.show
S08E19 - Simplicity First: Why Complexity Is Not Sophistication with Chris Woodruff
Chris Woodruff joins Jamie to argue that simplicity, not complexity, is the true mark of sophisticated software architecture, sharing his three filters: the half rule, the 2 a.m. test, and primary pat...
1142
Reposted by Chris Woody Woodruff
Scott McAllister @stmcallister.bsky.social · 13/05/2026
In the latest @devrelpatterns.com podcast @reverentgeek.com @woodruff.dev and I discuss documentation! And, of course, the conversation went agentic! Check it out!
111
Chris Woody Woodruff @woodruff.dev · 12/05/2026
A team spent $14,400 on infrastructure to solve a problem that a 4-minute database index fixed. Nobody measured the system before approving the proposal. "This needs to scale" is performance anxiety dressed as engineering. #softwarearchitecture #engineering #systemdesign
linkedin.com
What Would Justify This? The Question Teams Never Ask Before Adding Infrastructure
The proposal is for an internal product catalog API. Forty operations staff will use it.
152
Chris Woody Woodruff @woodruff.dev · 05/05/2026
"We've already invested $1.8 million. We can't walk away." The $1.8M is gone regardless. The only question: will the next $1.8M produce value? Nobody asks. New essay on why teams can't stop investing in what isn't working: simplicityfirstphilosophy.substack.com/p/the-sunk-c...
simplicityfirstphilosophy.substack.com
The Sunk Cost Architecture
Why Teams Can’t Stop Investing in What Isn’t Working
011
Reposted by Chris Woody Woodruff
Shaun Walker @sbwalker.bsky.social · 04/05/2026
.NET Foundation most active Microsoft projects for April 2026... Azure SDK for .NET led the way in PRs (826) and Roslyn led in Commits (10547) and New Contributors (59). Honorable mention to .NET Runtime and Aspire. Full list: dnfprojects.org/!/Apr-01-202... @dotnetfoundation.org
041
Chris Woody Woodruff @woodruff.dev · 04/05/2026
000
Chris Woody Woodruff @woodruff.dev · 02/05/2026
Docker is also a memory hog beyond the config constraints you set up
010
Chris Woody Woodruff @woodruff.dev · 02/05/2026
Not had much luck working with podman on macOS
110
Chris Woody Woodruff @woodruff.dev · 29/04/2026
A service decomposition took 3 months to build. Reversing it will take 9. The asymmetry was never calculated before the decision was made. Reversibility is the most underpriced quality in software. Every one-way door looks like a corridor until you need to go back.
simplicityfirstphilosophy.substack.com
The Architecture of Regret: Why Reversibility Is the Most Underpriced Quality in Software
Every One-Way Door Looks Like a Corridor Until You Need to Go Back
052
Chris Woody Woodruff @woodruff.dev · 28/04/2026
Your engineers keep building infrastructure that already exists. Authentication. Logging. Deployment pipelines. All solved problems. Every custom solution is a solution you maintain forever. Stop reinventing. Focus on what differentiates your business. www.woodruff.dev/the-strategi...
woodruff.dev
The Strategic Case for “Use What Works”: Why Smart Tech Leaders Stop Reinventing the Wheel - Chris Woody Woodruff | Fractional Architect
A peculiar kind of pride runs through the technology industry. Many leaders believe their problems are unique, their scale unprecedented, their requirements so specific that only a custom-built soluti...
020
Chris Woody Woodruff @woodruff.dev · 28/04/2026
I write most of my .NET in Rider, and I'm not switching. But ReSharper for VS Code 1.0 means I can finally pick up VS Code for a C# task without losing 40% of my brain on the way out. Field report from a week of using it: www.woodruff.dev/resharper-ma... #dotnet #csharp
woodruff.dev
ReSharper Made VS Code a Real Option for My .NET Work - Chris Woody Woodruff | Fractional Architect
Most posts about ReSharper for VS Code want to convert you. This one doesn't. I write most of my .NET in Rider. I'm not moving. What changed for me back in March 2026, when JetBrains shipped the offic...
030
Reposted by Chris Woody Woodruff
Joseph Guadagno @jguadagno.com · 23/04/2026
Today (April 23rd), @woodruff.dev and I will be streaming again at 2pm. Today's stream, Woody and I will share our @jetbrains.com Rider IDE setups including configuration and plugins. I hope to see you there! www.youtube.com/@ChrisWoodru...
youtube.com
Chris Woody Woodruff
011
Chris Woody Woodruff @woodruff.dev · 23/04/2026
82% of engineers believe trending tech adoption improves career prospects. Nobody got promoted for recommending a monolith. The bill stays with the organization. The credit travels with the architect. That asymmetry explains your architecture better than any technical analysis.
simplicityfirstphilosophy.substack.com
The Status Architecture: Why Complexity Is the Currency of Technical Prestige and Who Pays the Bill
The Architect Gets the Credit. The On-Call Engineer Gets the 2 A.M. Page.
020
Chris Woody Woodruff @woodruff.dev · 22/04/2026
I like it!
210
Chris Woody Woodruff @woodruff.dev · 22/04/2026
Your developer community now has members who cannot read your content. AI coding agents integrate with your platform before a human writes a line. When they get it wrong, developers leave. Silently. No ticket. No post. That gap has a name now. Agentic Relations. agenticairelations.com #devrel
331
Reposted by Chris Woody Woodruff
Joseph Guadagno @jguadagno.com · 20/04/2026
@woodruff.dev and I have been live streaming weekdays for the last week at 2pm EST. We thought it would be a cool idea to stream about our @jetbrains.com Rider plugins and setup. This Thursday at 2PM, we will walk through our setups that make our developing or presenting easier. lnkd.in/gb3hAnTY.
lnkd.in
LinkedIn
This link will take you to a page that’s not on LinkedIn
011
Reposted by Chris Woody Woodruff
Joseph Guadagno @jguadagno.com · 14/04/2026
Join @woodruff.dev and I in 15 minutes for day 2 of us integrating Squad in the MoreSpeakers.com application. Today, we will be looking into Ripley, our architect, to see what she found in our code base. I wonder if it's Aliens. Live on YouTube → www.youtube.com/@ChrisWoodruff
morespeakers.com
Home - MoreSpeakers.com
011
Chris Woody Woodruff @woodruff.dev · 14/04/2026
htmxRazor v2.0.0 is out. VS Code snippets (97), interactive playground, Theme Builder, SignalR connector, and a Kanban board. Targets .NET 10. No breaking changes. 1,838 tests. dotnet add package htmxRazor --version 2.0.1 htmxRazor.com
000
Chris Woody Woodruff @woodruff.dev · 14/04/2026
69% of developers have tenure under 2 years. The engineers who simplified your architecture are already gone. Their successors followed the communication patterns, not the diagram. Conway's Law runs in reverse. The org rebuilds what it needs. simplicityfirstphilosophy.substack.com/p/conways-re...
simplicityfirstphilosophy.substack.com
Conway's Revenge
How Your Org Chart Keeps Writing Code When Nobody Is Watching
020
Reposted by Chris Woody Woodruff
Joseph Guadagno @jguadagno.com · 10/04/2026
Starting April 13th, @woodruff.dev and I are going live every weekday at 2pm EST. We’ll be walking through using Squad by @bradygaster.bsky.social to build out features for MoreSpeakers.com. If you’re into .NET, AI, or dev tooling, come hang out. Live on YouTube → www.youtube.com/@ChrisWoodruff
morespeakers.com
031
Chris Woody Woodruff @woodruff.dev · 10/04/2026
Our inaugural River City AI & Dev meetup is on April 15 We're demoing Squad, a multi-agent AI framework that deploys a full team of specialists to build in parallel and ship PRs. Live. In the room. 📍 Bamboo Grand Rapids · 6–8:30 PM rivercity-ai.dev #RiverCityAI #AI #SoftwareDevelopment
152
Reposted by Chris Woody Woodruff
Dan Clarke @danclarke.com · 10/04/2026
The next #UnhandledException is now live. I was joined by @woodruff.dev to chat about the power of keeping things simple in software development. unhandledexceptionpodcast.com/posts/0085-s... #dotnet #softwaredev
021
Chris Woody Woodruff @woodruff.dev · 09/04/2026
90% of microservices teams still batch-deploy. They pay the coordination cost without getting the independent deployment benefit. $77K/developer/year. For nothing. simplicityfirstphilosophy.substack.com/p/the-archit...
simplicityfirstphilosophy.substack.com
The Architecture Tax
Why Your Technical Decisions Are Your Biggest Budget Line Item
022
Chris Woody Woodruff @woodruff.dev · 07/04/2026
Would love to unpack that thought if you are not being sarcastic 😉
100
Chris Woody Woodruff @woodruff.dev · 07/04/2026
591 professionals surveyed confirm architects choose technology for career positioning, not operational fit. The ARB was built to catch that behavior. The board members perform the same behavior one level up. simplicityfirstphilosophy.substack.com/p/the-govern...
simplicityfirstphilosophy.substack.com
The Governance Trap: How Architecture Review Boards Manufacture the Complexity They Were Built to Prevent
The board that was built to catch over-engineering became its most reliable sponsor.
000
Chris Woody Woodruff @woodruff.dev · 01/04/2026
River City AI & Dev (Grand Rapids, MI) is looking for speakers and sponsors! AI topics preferred, all dev topics welcome. Lightning talks to full sessions. Sponsors: connect with West Michigan's growing tech community. Meets every 3rd Wednesday • rivercity-ai.dev
010
Chris Woody Woodruff @woodruff.dev · 31/03/2026
New CTO asked for system architecture. 112 boxes arrived. Nobody designed all of it. The Complexity Trap isn't built from bad decisions. It is built from individually good decisions whose total cost was never added up. Part 1 of new series: simplicityfirstphilosophy.substack.com/p/the-system...
simplicityfirstphilosophy.substack.com
The System Nobody Designed
Why every reasonable decision adds up to a system nobody wanted
020
Chris Woody Woodruff @woodruff.dev · 31/03/2026
Oldie but goodie
000
Chris Woody Woodruff @woodruff.dev · 31/03/2026
Big update to Baseball History - 30+ REST API endpoints, a player comparison tool, awards voting breakdowns, postseason browser, and salary explorer. 150+ years of MLB data, no auth needed. Open source, built on ASP.NET Core + htmx. baseballhistoryproject.com #Baseball #OpenSource #Sabermetrics
031