Ship Software That Does Nothing - Kerrick Long (blog) (https://kerrick.blog/articles/2025/ship-software-that-does-nothing/) (//fonts.googleapis.com) (Kerrick Long (blog) » Feed) (https://kerrick.blog/feed/) (Kerrick Long (blog) » Comments Feed) (https://kerrick.blog/comments/feed/) (Kerrick Long (blog) » Ship Software That Does Nothing Comments Feed) (https://kerrick.blog/articles/2025/ship-software-that-does-nothing/feed/) (oEmbed (JSON)) (https://kerrick.blog/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fkerrick.blog%2Farticles%2F2025%2Fship-software-that-does-nothing%2F) (oEmbed (XML)) (https://kerrick.blog/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fkerrick.blog%2Farticles%2F2025%2Fship-software-that-does-nothing%2F&format=xml) (https://kerrick.blog/wp-includes/css/dist/block-library/style.min.css?ver=6.9) (https://kerrick.blog/wp-content/plugins/webmention/assets/css/webmention.css?ver=5.5.0) (//fonts.googleapis.com/css?family=Lato%3A400%2C400i%2C700%2C900&subset=latin%2Clatin-ext&display=swap&ver=6.9) (https://kerrick.blog/wp-content/themes/shift/assets/font-awesome/css/all.min.css?ver=6.9) (https://kerrick.blog/wp-content/themes/shift/style.css?ver=6.9) (https://kerrick.blog/wp-json/) (JSON) (https://kerrick.blog/wp-json/wp/v2/posts/291) (RSD) (https://kerrick.blog/xmlrpc.php?rsd) (https://kerrick.blog/?p=291) (Search Kerrick Long (blog)) (https://kerrick.blog/wp-json/opensearch/1.1/document) (ActivityPub (JSON)) (https://kerrick.blog/?p=291) (https://kerrick.blog/wp-content/uploads/2025/11/cropped-avatar-32x32.jpeg) (https://kerrick.blog/wp-content/uploads/2025/11/cropped-avatar-192x192.jpeg) (https://kerrick.blog/wp-content/uploads/2025/11/cropped-avatar-180x180.jpeg) (https://kerrick.blog/wp-json/webmention/1.0/endpoint) (https://kerrick.blog/wp-json/webmention/1.0/endpoint) Press "Enter" to skip to content (https://kerrick.blog) Kerrick Long (blog) Articles about programming, learning, code, books, and teams open menu (https://kerrick.blog) Home (https://kerrick.blog/subscribe/) Get Notified (https://kerrick.blog/category/articles/) Articles (https://kerrick.blog/category/posts/) Quick Posts (https://kerrick.blog/privacy-policy/) Privacy Policy (https://ruby.social/@kerrick) (twitter) twitter (https://www.facebook.com/kerrick.long/) (facebook) facebook (https://bsky.app/profile/kerrick.blog) (bluesky) bluesky (https://www.linkedin.com/in/kerricklong/) (linkedin) linkedin (https://www.youtube.com/@KerrickLong) (youtube) youtube (https://kerrick.blog/feed/) (rss) rss (mailto:hello@kerrick.blog) (email) email (https://github.com/Kerrick) (github) github (https://www.goodreads.com/user/show/71980231-kerrick) (goodreads) goodreads (https://news.ycombinator.com/user?id=Kerrick) (hacker-news) hacker-news (https://stackoverflow.com/users/126329/kerrick) (stack-overflow) stack-overflow Ship Software That Does Nothing (Kerrick Long) (https://kerrick.blog/author/kerrick_b36zd7/) Kerrick Long (https://kerrick.blog/2025/04/) April 13, 2025 (https://kerrick.blog/articles/2025/ship-software-that-does-nothing/#comments) 6 Comments (A photo of a blank white sheet of paper laying on a wrinkled brown paper surface.) Last updated on November 28, 2025 You should ship software that does nothing. Absolutely nothing. I’m not being cheeky about this. I have no hidden meaning. The very first thing you should deliver when you start a new web application is absolutely nothing. Many people will tell you to ship a minimum viable product. Others say to ship a prototype to get feedback. Not me. I think you should ship a blank page to your production servers on day one. Consider the alternative. You could spend a day debating your architecture: (https://www.jimmybogard.com/vertical-slice-architecture/) (Vertical Slice Architecture) slices , (https://llorllale.github.io/posts/clean-architecture/) (Clean Architecture: A Craftsman's Guide to Software Structure and Design) layers , (https://web.archive.org/web/20140329201018/http://alistair.cockburn.us/Hexagonal+architecture) (Hexagonal architecture) shapes , (https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/) (The Onion Architecture : part 1) vegetables , or (https://en.wikipedia.org/wiki/Model–view–controller) (Model–view–controller) smalltalk . You could spend several days (https://www.goodreads.com/book/show/762542.The_Four_Steps_to_the_Epiphany) (The Four Steps to the Epiphany: Successful Strategies for Products that Win) eliminating the biggest risks by (https://www.goodreads.com/book/show/67833.Extreme_Programming_Explained) (Extreme Programming Explained: Embrace Change) building proofs-of-concept to eliminate unknowns . You could spend a week figuring out how you’ll (https://www.postgresql.org) (PostgreSQL: The World's Most Advanced Open Source Relational Database) store , (https://lucene.apache.org) (Apache Lucene is the search core of both Apache Solr™ and Elasticsearch™.) search , and (https://valkey.io) (Valkey: an open source, in-memory data store) cache data and which (https://postmarkapp.com) (Postmark: The email delivery service that people actually like) third –(https://stripe.com) (Stripe: Financial infrastructure to grow your revenue) party (https://www.twilio.com/en-us/messaging/apis/programmable-messaging-api) (Twilio: a multichannel API to send and receive transactional SMS, MMS, RCS, and WhatsApp messages.) integrations you’ll need. You could spend a couple weeks creating mockups and (https://www.goodreads.com/book/show/10127019-the-lean-startup) (The Lean Startup) getting feedback from potential users . You could spend a month building an end-to-end product that (https://userpilot.medium.com/how-a-land-and-expand-strategy-can-help-you-drive-growth-14c06d5bb937) (How a Land and Expand Strategy Can Help You Drive Growth) focuses on the highest-ROI feature for a niche target market . No matter what, you still have to ship. And no matter what, you could’ve shipped nothing first. You can (https://www.jamesshore.com/v2/books/aoad2/incremental_design) (AoAD2 Practice: Incremental Design) evolve your nothingness, feature by feature, into your preferred architecture . You can build your riskiest features in the blank space you created by shipping nothing. You can add tools and providers one by one as your features demand. You can ship your mockups to production to drive your user interviews. All of this is made easier and lower risk by shipping nothing first. Shipping nothing is (https://idioms.thefreedictionary.com/nothing+to+sneeze+at) () nothing to sneeze at . Delivering a blank page to production means you’ve made a lot of important decisions. You must take risky actions early, which is the best time to take risks. And once you’ve shipped software that does nothing, making it do something is easy. You can’t ship a webpage that does nothing until you have a place to ship to. You’ll have to decide whether you’re deploying to cloud VMs, rented bare metal, a rack in the datacenter down the street, or a serverless function. You’ll pick your programming language. You might pick a framework, a web server, and a containerization strategy. Shipping nothing pushes you to set up (https://www.informit.com/store/continuous-delivery-reliable-software-releases-through-9780321601919) (Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation by Jez Humble and David Farley) deployment automation immediately. You solve your administrative burdens—domain name, certificates, billing—when it’s easy. When there’s no pressure. Your stakeholders aren’t pressuring you to ship because it’s been no time at all. Your users aren’t clamoring for access because they haven’t seen anything yet. Ship software that does nothing, and ship it to nobody. If you ship nothing to nobody, it’s guaranteed to work. You won’t hear the phrase “(https://blog.codinghorror.com/the-works-on-my-machine-certification-program/) (The “Works on My Machine” Certification Program) but it worked on my machine. ” Once you’ve delivered nothing, every bit of something goes right to production. You’ll notice anything that doesn’t work before it becomes expensive to fix. You’ll notice because you’ll automate the shipping. Creating a repeatable build process for nothing is easy. It has no dependencies. Nobody has ever configured a production server by hand. There’s nothing to audit, and nothing has been done that makes automation tricky. Automate your deployment to production before you can produce anything more than a blank page. A blank page is also easy to test. (https://http.dev/200) (HTTP response status code 200 OK is returned by the server to indicate success.) 200? OK. For the same reason automating delivery was easy, automate integration as well. Creating your health check infrastructure is much easier when you only have to check one thing. The same goes for setting up (https://www.informit.com/store/continuous-integration-improving-software-quality-and-9780132651165) (Continuous Integration: Improving Software Quality and Reducing Risk by Paul M. Duvall, Steve Matyas, and Andrew Glover) continuous integration . And since you’ve set up continuous integration, that means you’ve set up version control. There’s no need to decide between (https://trunkbaseddevelopment.com) (Trunk Based Development: resist pressure to create long-lived development branches) trunk-based development , (https://nvie.com/posts/a-successful-git-branching-model/) (A successful Git branching model) git flow , or (https://martinfowler.com/articles/branching-patterns.html#feature-branching) (Feature Branching - Patterns for Managing Source Code Branches) feature branches yet. Nothing is in progress. There is only main . So, set up a continuous integration pipeline to test main on every commit. Set up a (https://learning.oreilly.com/library/view/continuous-deployment/9781098146719/) (Continuous Deployment: Enable Faster Feedback, Safer Releases, and More Reliable Software by Valentina Servile) continuous deployment pipeline to deliver main to production every time the tests pass. Configure alerts so that everybody knows when something fails. Notice how much is involved in shipping software that does nothing. This work will come around eventually. The later you do it, the riskier it is. When your system has few dependencies, there is little chance you forgot one. When your application has no functionality, you can’t have features that aren’t covered by tests. When you establish an automatic delivery pipeline before you have users, everybody is accustomed to frequent, tiny changes. But if you wait, these all get harder. Building software that does something and then figuring out how to ship is risky. Shipping software that does nothing slices that risk into tiny pieces. You address one piece of risk—possibly the largest—when you ship software that does nothing to production. After that, each feature you add addresses a bit more of the risk. When you ship a feature that requires persistence, you’ll add a persistence mechanism. You’ll cover each feature with automated tests. “It’s just one small feature, I might as well.” You’ll build toward your desired architecture bit-by-bit. No single task ever becomes a burden. Every commit makes it to production. Soon you’ll have your (Minimum Viable Product) MVP . There will be no moment of panic, no mad dash to the finish line. In fact, there never has to be a finish line. You can invite your first users to try features immediately. You get valuable feedback that can shape your roadmap. Users get some of the value sooner than they would’ve otherwise. By shipping software that does nothing, you’ve figured out how to ship the right something , sooner. Get notified when I publish new articles Get notified when I post new articles. (https://kerrick.blog/privacy-policy/) Privacy policy applies. (you@example.com) Subscribe Please wait… Thanks! You’ll receive emails when new articles are published. Oops! Something went wrong, please try again ← Back Categories: (https://kerrick.blog/category/articles/advice/) (View all posts in Advice) Advice (https://kerrick.blog/tag/agile/) (View all posts tagged Agile) Agile (https://kerrick.blog/tag/automated-tests/) (View all posts tagged Automated Tests) Automated Tests (https://kerrick.blog/tag/continuous-delivery/) (View all posts tagged Continuous Delivery) Continuous Delivery (https://kerrick.blog/tag/continuous-deployment/) (View all posts tagged Continuous Deployment) Continuous Deployment (https://kerrick.blog/tag/continuous-integration/) (View all posts tagged Continuous Integration) Continuous Integration (https://kerrick.blog/tag/extreme-programming/) (View all posts tagged Extreme Programming) Extreme Programming (https://kerrick.blog/tag/lean/) (View all posts tagged Lean) Lean (https://kerrick.blog/tag/risk/) (View all posts tagged Risk) Risk (https://kerrick.blog/tag/architecture/) (View all posts tagged Software Architecture) Software Architecture Previous Post (https://kerrick.blog/articles/2025/kerricks-wager/) Kerrick’s Wager: on the Future of Manual Programming Next Post (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/) Confessions of a Software Developer: No More Self-Censorship 6 Comments (Dan Schnau) (https://danschnau.com) Dan Schnau 🤔 I think you’re on to something. Making an MVP, then figuring out how to ship it has been a big time suck for me. April 14, 2025 Reply (Sam Jones) Sam Jones What you just described is known as the Walking Skeleton ((https://wiki.c2.com/?WalkingSkeleton) https://wiki.c2.com/?WalkingSkeleton ). Others know it as the Steel Thread. It is hands down the most effective way to start a software project that has a goal of real production use. I’m glad to see it is getting more exposure. April 14, 2025 Reply (Kerrick Long) (https://kerrick.blog) Kerrick Long Thanks for the link and terms! I found a good description of Steel Thread here: (https://www.rubick.com/steel-threads/) https://www.rubick.com/steel-threads/ April 14, 2025 Reply (Jane Doe) Jane Doe This is similar to Tracer Bullet Development, mentioned in Pragmatic Programmer: (https://medium.com/@remind.stephen.to.do.sth/targeting-success-the-power-of-tracer-bullets-in-pragmatic-software-engineering-cd6c53758986) https://medium.com/@remind.stephen.to.do.sth/targeting-success-the-power-of-tracer-bullets-in-pragmatic-software-engineering-cd6c53758986 Although I concede that Steel Thread is a much better, descriptive name. Also nice to see things I learned “in anger” being talked about explicitly! April 21, 2025 Reply (Nabil) Nabil Wow! This is something I’ve always thought of doing. April 15, 2025 Reply (Z. I.) Z. I. I’d never thought about starting a project this way, by sending “nothing” live. It makes sense to make sure the infrastructure is okay before filling it with stuff. December 6, 2025 Reply Reposts () (https://newsmast.community/@architecture) () ♻️ Architecture & Design Channel Leave a Reply (/articles/2025/ship-software-that-does-nothing/#respond) Cancel reply Your email address will not be published. Required fields are marked * Comment Name* (Jane Doe) () Email* (name@email.com) () Website (http://google.com) () (yes) Save my name, email, and website in this browser for the next time I comment. (Post Comment) (291) (0) (fbf9c8a803) Δ (1765850483823) To respond on your own website, enter the URL of your response which should contain a link to this post's permalink URL. Your response will then appear (possibly after moderation) on this page. Want to update or remove your response? Update or delete your post and re-enter your post's URL again. ((https://indieweb.org/webmention) Find out more about Webmentions. ) URL/Permalink of your article (Ping me!) (html) (https://kerrick.blog/articles/2025/ship-software-that-does-nothing/) Sidebar Email Newsletter Get notified when I post new articles. (https://kerrick.blog/privacy-policy/) Privacy policy applies. (you@example.com) Subscribe Please wait... Thanks! You'll receive emails when new articles are published. Oops! Something went wrong, please try again ← Back Search () () Search Recent Articles (https://kerrick.blog/articles/2025/i-vibe-coded-a-wordpress-plugin-and-shipped-it-to-production/) I Vibe Coded a WordPress Plugin and Shipped it to Production December 1, 2025 (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/) Confessions of a Software Developer: No More Self-Censorship November 28, 2025 (https://kerrick.blog/articles/2025/ship-software-that-does-nothing/) Ship Software That Does Nothing April 12, 2025 (https://kerrick.blog/articles/2025/kerricks-wager/) Kerrick’s Wager: on the Future of Manual Programming April 2, 2025 (https://kerrick.blog/articles/2025/24-books-asp-net-blazor-front-matter/) What Books Should I Read to Learn ASP.NET Core and Blazor? March 30, 2025 Recent Quick-Posts (https://kerrick.blog/posts/2025/re-more-fluent-method-signatures-in-ruby/) Re: More Fluent Method Signatures in Ruby December 13, 2025 (https://kerrick.blog/posts/2025/this-great-tool-helps-you-name-any-hex-color/) This Great Tool Helps You Name Any Hex Color December 13, 2025 (https://kerrick.blog/posts/2025/did-37signals-just-accidentally-make-writebook-open-source/) Did 37Signals Just Accidentally Make Writebook Open Source? December 9, 2025 (https://kerrick.blog/posts/2025/a-new-best-practice-for-user-friendly-404-pages/) A New Best Practice for User Friendly 404 Page Design? December 6, 2025 (https://kerrick.blog/posts/2025/peter-coad-slams-alexanders-pattern-theory-is-he-right/) Peter Coad Slams Alexander’s “Pattern” Theory. Is He Right? December 5, 2025 (https://kerrick.blog/posts/2025/re-emily-bache-on-ward-cunninghams-fearless-refactoring/) Re: Emily Bache on Ward Cunningham’s Fearless Refactoring December 3, 2025 (https://kerrick.blog/posts/2025/acceptance-tests-and-unit-tests-as-documents-first-tests-second/) Acceptance Tests and Unit Tests as Documents First, Tests Second December 3, 2025 (https://kerrick.blog/posts/2025/learning-to-code-without-a-map-mentorship-and-entry-paths-in-the-post-bootcamp-era/) Learning to Code Without a Map: Mentorship and Entry Paths in the Post-Bootcamp Era December 2, 2025 (https://kerrick.blog/posts/2025/re-one-soft-navigation-per-page-load/) Re: One Soft Navigation per Page Load December 1, 2025 (https://kerrick.blog/posts/2025/the-big-oops-anatomy-of-a-thirty-five-year-mistake/) The Big OOPs: Anatomy of a Thirty-five-year Mistake November 30, 2025 Recent Comments () (https://ruby.social/@veganstraightedge) Shane Becker on (https://ruby.social/@veganstraightedge/115716367637040412) Re: More Fluent Method Signatures in Ruby December 13, 2025 @kerrick @kerrick@kerrick.blog ah, gotcha bug report? () (https://ruby.social/@kerrick) Kerrick Long (code) on (https://ruby.social/@kerrick/115716363780385942) Re: More Fluent Method Signatures in Ruby December 13, 2025 @veganstraightedge @kerrick@kerrick.blog It's actually just a WordPress blog with the Automattic's ActivityPub plugin [0]. The code in my post body… () (https://ruby.social/@veganstraightedge) Shane Becker on (https://ruby.social/@veganstraightedge/115716354751621157) Re: More Fluent Method Signatures in Ruby December 13, 2025 @kerrick @kerrick@kerrick.blog that's rude of it 😬Are you using a Markdown parser on the post content? Is it Kramdown? () (https://ruby.social/@kerrick) Kerrick Long (code) on (https://ruby.social/@kerrick/115716346932923728) Re: More Fluent Method Signatures in Ruby December 13, 2025 @veganstraightedge @kerrick@kerrick.blog Looks like it doesn't. Oddly, it seems to think you want “ () (https://ruby.social/@veganstraightedge) Shane Becker on (https://ruby.social/@veganstraightedge/115716297685667777) Re: More Fluent Method Signatures in Ruby December 13, 2025 @kerrick I'm curious… does your indieweb post on your site format my post/note's content if I use code fences with… () I. I. A. on (https://kerrick.blog/posts/2025/peter-coad-slams-alexanders-pattern-theory-is-he-right/#comment-1431) Peter Coad Slams Alexander’s “Pattern” Theory. Is He Right? December 11, 2025 An interesting critique of a foundational concept. It's good to revisit these debates that shape our field. () A. C. P. on (https://kerrick.blog/posts/2025/automated-tests-as-waste-vs-needed/#comment-1423) Automated Tests as Waste vs. Needed December 9, 2025 The quote about unit tests stopping the line is spot on! () A. A. on (https://kerrick.blog/articles/2025/i-vibe-coded-a-wordpress-plugin-and-shipped-it-to-production/#comment-1412) I Vibe Coded a WordPress Plugin and Shipped it to Production December 7, 2025 A fascinating read on how AI can streamline development, even for rusty skills () Z. I. on (https://kerrick.blog/articles/2025/ship-software-that-does-nothing/#comment-1410) Ship Software That Does Nothing December 6, 2025 I'd never thought about starting a project this way, by sending "nothing" live. It makes sense to make sure the… () (https://bpavuk.neocities.org) Bohdan Pavuk on (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/#comment-1389) Confessions of a Software Developer: No More Self-Censorship November 29, 2025 > A lack of automated tests tends to make change harder, but it doesn’t doom the software. Maybe, that's because… () Warren Henning on (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/#comment-1388) Confessions of a Software Developer: No More Self-Censorship November 29, 2025 Some typos here: "test project" -> "test coverage", "new library, C" -> "new library, Sokol", "fault detection" -> "fault injection".… () (https://lesleylai.info/) Lesley Lai on (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/#comment-1387) Confessions of a Software Developer: No More Self-Censorship November 29, 2025 Good article! Regarding the knowledge gap, it reminds me of the Venn diagram for imposter syndrome. We thought we didn't… () Warren Henning on (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/#comment-1383) Confessions of a Software Developer: No More Self-Censorship November 28, 2025 As you saw from your own experience, unit tests are not necessary for a quality, successful software product. Considering many… () (https://kerrick.blog) Kerrick Long on (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/#comment-1379) Confessions of a Software Developer: No More Self-Censorship November 28, 2025 Thanks! I plan to keep writing :-) () (https://kerrick.blog) Kerrick Long on (https://kerrick.blog/articles/2025/confessions-of-a-software-developer-no-more-self-censorship/#comment-1377) Confessions of a Software Developer: No More Self-Censorship November 28, 2025 That perspective is helpful, thank you. The production code I've shipped, even without tests, has also been economically successful. A… Email Newsletter Get notified when I post new articles. (https://kerrick.blog/privacy-policy/) Privacy policy applies. (you@example.com) Subscribe Please wait... Thanks! You'll receive emails when new articles are published. Oops! Something went wrong, please try again ← Back (https://www.competethemes.com/shift/) Shift WordPress Theme by Compete Themes.