37signals Dev

dev.37signals.com · Company blog · on HN since 2022

The 37signals developer team writes about Rails, Turbo, CSS, and moving their apps off the cloud.

What HN saysHN commenters cite it in debates over vanilla Rails versus service layers, and over cloud exits. Reactions range from praise to calling one article ridiculous.
71HN people shared it
20linked it in comments
76stories submitted
505story points
3 months agolast shared
2022people per year2026

Most-shared posts

  1. 1
    Vanilla Rails Is Plenty
    7 people · 34 points · first shared 2022 · 1 comments on HN
  2. 2
    Modern CSS Patterns in Campfire
    6 people · 26 points · first shared 2024 · discussion on HN
  3. 3
    37signals Dev – A vanilla Rails stack is plenty
    5 people · 23 points · first shared 2024 · 4 comments on HN
  4. 4
    A happier happy path in Turbo with morphing
    5 people · 7 points · first shared 2023 · discussion on HN
  5. 5
    Our Cloud Spend in 2022
    5 people · 6 points · first shared 2023 · discussion on HN
  6. 6
    Upright: An Open Source Synthetic Monitoring System
    4 people · 6 points · first shared 2026 · discussion on HN
  7. 7
    Solid Queue
    4 people · 5 points · first shared 2023 · discussion on HN
  8. 8
  9. 9
    Kamal 2.0 Released
    3 people · 22 points · first shared 2024 · 2 comments on HN
  10. 10
    The 10x Development Environment
    3 people · 13 points · first shared 2022 · discussion on HN
  11. 11
  12. 12
    Minding the small stuff in PR reviews
    3 people · 3 points · first shared 2023 · discussion on HN
  13. 13
    Turbo 8 Released
    3 people · 3 points · first shared 2024 · discussion on HN
  14. 14
    Navigating Personal Information with Care
    3 people · 3 points · first shared 2023 · 1 comments on HN
  15. 15
    SQL db as cache – 2x faster* requests vs. Redis
    3 people · 3 points · first shared 2023 · 1 comments on HN

What HN people wrote when they linked it

ericb · 2024-05-09
This was true, but the new Rails Turbo Page Morphing in Turbo 8 changes the game entirely. I've been using it. The experience is amazing! Some highlights: * In 7 lines of code, with no javascript, I had my index and view pages live-updating whenever a model changed on the server! It is spooky good. Nothing against JavaScript, but now I only maintain one ERB view and no SPA. This is a large dev speed multiplier. * If you have a page with a parent object where you add/delete child items, you make your actions delete/add the child on the server, and once the object is updated, the page just re-renders with no visible redirect/reload. https://dev.37signals.com/turbo-8-released/ A diff with comments: https://github.com/basecamp/turbo-8-morphing-demo/pull/4/files
lylo · 2023-05-14
Re: DDD and business logic, I’d recommend reading https://dev.37signals.com/vanilla-rails-is-plenty/
jdlshore · 2023-02-24
37signals disagrees. They’re moving off the cloud and have published several blog entries about the process and the approx ~1mm/yr (fully loaded) they expect to save. I don’t have a horse in this race, but it’s interesting that your experiences are so different. Would love to hear your take on their numbers. The most recent article, with lots of hard numbers, is here: https://dev.37signals.com/our-cloud-spend-in-2022/ There was a recent article that made the HN in front page that broke down the savings they expected, but I’m on mobile and can’t find it now. Something about “two datacenter racks.”
sodapopcan · 2024-10-22
> * It's my view that MVC (and therefore Rails otb) is not ideal by itself to write a production-ready app, because of the missing service layer. This is quite the claim. I despise service objects, personally. They end up scattering things around and hurt discoverability. There are other ways to do modelling that scale very well. There are a few blog posts on it, here's one from someone at Basecamp: https://dev.37signals.com/vanilla-rails-is-plenty/ This is of course very OO which I'm not a huge fan of. Elixir's Phoenix framework, for example, uses "contexts" which is meant to group all related functionality. In short they could be considered a "facade." In any event, if you like services you like services, they can work, but saying MVC isn't enough for production-grade is a bit misguided. I do agree that model callbacks for doing heavy lifting business processes is not great, though for little things like massaging data into the correct shape is pretty nice.
xyzzy_plugh · 2023-03-23
I've never read such a ridiculous article. I really wanted to give them the benefit of the doubt but good lord. How is any of this simpler or better? It's like they prefer the pain of 2004 mixed with the worst parts of modern infrastructure. The dream of the 2000s really is alive in DHH's head, isn't it? TFA links to their cloud spend for 2022[0], wherein lies the rub: > In total, we spent $3,201,564 on all these cloud services in 2022. That comes out to $266,797 per month. Whew! > For HEY, the yearly bill was $1,066,150 ($88,846/month) for production workloads only. That one service breaks down into big buckets as follows: What the actual fuck? THREE MILLION DOLLARS? A million for their email service?? I have seen bills much larger, but for what 37signals does I am shocked. There is surely a ton of low hanging fruit to drop the bill despite the claim that it's as optimized as it can get. No way. Even then, Hey is $99/year, and they claimed to have 25k users in the first month or so as of 2020, that's nearly $2.5MM. I presume they've grown since then. Another 2020 article[2] mentions 3/4 of their users have the iOS app, and the Android app currently shows "50k+ installs" so let's assume we're talking 200-400k users as a ceiling, ignoring attrition, which would pull $20-40MM. Even if it's half that, the cost doesn't seem unreasonable. They're spending nearly $90k/mo on Hey. Of that the majority is RDS and OpenSearch. TFA makes it clear they know how to run MySQL, why on…
andersmurphy · 2026-08-01
A focus on morph by default means you don't have an explosion of endpoints and can write programs like the 300 redirect days. [1] Once you want realtime/collaborative app SSE + morph lets you do that easily. Add streaming compression and this approach is suddenly crazy bandwidth efficient. For people coming from react this gives you v = f(state) over the wire. Lastly signals handle the edge cases where an out of bound morph would nuke your ephemeral client side state (mostly text input). You can do this in htmx but you are fighting the design the whole way. Turbo is a bit better but doesn't have signals. [1] https://dev.37signals.com/a-happier-happy-path-in-turbo-with-morphing/
monooso · 2026-04-10
> Raw HTML/CSS/JS are out of distribution just like assembly (no one builds apps like this) Plenty of people build apps with vanilla CSS and JS (and HTML is just HTML). It's a really nice way to work. Here are a few links to get you started. https://dev.37signals.com/modern-css-patterns-and-techniques-in-campfi… https://simonwillison.net/2025/May/31/no-build/ https://bradfrost.com/blog/post/raw-dogging-websites/
dmix · 2025-11-15
I recently turned on View Morphing via upgrading Turbo 7->8 [1] in production and man it really does feel faster. Like a free performance upgrade. I looked it up on Github and they seem to be using the idiomorph package. [1] https://dev.37signals.com/turbo-8-released/
trevorhinesley · 2025-03-15
“Almost” is key there. I respect your position, but it’s an always/never take, and the longer I am in this industry, the more I find myself leaning into “it depends.” Here’s a take that articulates this being done well on a large codebase better than I can in a short comment: https://dev.37signals.com/globals-callbacks-and-other-sacrileges/
leftcenterright · 2024-11-07
> Their Cloud exodus can't have been more than a few dozen servers, right? "At the moment we have somewhere between 20-25 servers in each cab, or about 90 servers in each site. Here’s what the rack layout looks like in Chicago, for instance." - https://dev.37signals.com/37signals-datacenter-overview/ Their "server count" is definitely much higher than what you are thinking.
dcchambers · 2024-09-03
Well color me disappointed, I was hoping this was going to be a technical discussion about the decision/tradeoffs. Instead it's just an old question from the community that has no official answer from the Basecamp folks and no recent activity. As long doing conjecture, I would guess it's because the team at Basecamp/37 Signals already had significant experience with Docker, it's much more widely used and understood in the industry, and it was a simpler approach. Here's a technical blog from 37 Signals themselves: https://dev.37signals.com/bringing-our-apps-back-home/
decremental · 2024-08-31
Reminds me of a common complaint about ORMs. The easy stuff is easy and the hard stuff is insanely hard. This recent post convinced me to just use CSS again: https://dev.37signals.com/modern-css-patterns-and-techniques-in-campfi…
techscruggs · 2024-03-06
This appears to be riding the [Solid Cache](https://dev.37signals.com/solid-cache/) idea that DHH has started espousing. At the core of this idea is that SSD's are sufficiently fast for caching. Sure, this may work for 37signals, but that is because they manage their own hardware. That is the exception and not the rule. And, per [this discussion two weeks ago](https://news.ycombinator.com/item?id=39443679). SSD's aren't as fast for most of us that leverage "the cloud". Sure, you can do it, but why? I am all for removing complexities in my infrastructure. That said, Memcached and/or Redis are both rock solid and dead simple. This just seems to be a waist of time 99.999% of use cases.
aditya · 2024-02-21
got a link to the rails improvement? nvm, found it: https://dev.37signals.com/solid-cache/
onnnon · 2023-12-11
37signals is running 3.3 and they posted some info on it... https://dev.37signals.com/yjit-is-fast/
lobstrosity420 · 2023-09-27
It is in fact how it was designed to be used, you can read the reasoning here: https://dev.37signals.com/globals-callbacks-and-other-sacrileges/
mr_ndrsn · 2023-03-22
Yes, we're actively de-k8s/de-clouding all workloads, including Hey, with mrsk as the pattern. We've started with simple apps and moved up our complexity tree, updating mrsk as we go. My co-worker, Farah Schüller, wrote up a good summary of things so far: https://dev.37signals.com/bringing-our-apps-back-home/
DoctorOW · 2023-01-17
> Remember, this excludes the current Basecamp and Basecamp 2, which use our own hardware for this https://dev.37signals.com/our-cloud-spend-in-2022/
bastawhiz · 2023-03-22
I'm not going to put this down, because it sounds like they're quite happy with the results. But they haven't written about a few things that I find to be important details: First, one of the promises of a standardized platform (be it k8s or something else) is that you don't reinvent the wheel for each application. You have one way of doing logging, one way of doing builds/deployments, etc. Now, they have two ways of doing everything (one for their k8s stuff that remains in the cloud, one for what they have migrated). And the stuff in the cloud is the mature, been-using-it-for-years stuff, and the new stuff seemingly hasn't been battle-tested beyond a couple small services. Now that's fine, and migrating a small service and hanging the Mission Accomplished banner is a win. But it's not a win that says "we're ready to move our big, money-making services off of k8s". My suspicion is that handling the most intensive services means replacing all of the moving parts of k8s with lots of k8s-shaped things, and things which are probably less-easily glued together than k8s things are. Another thing that strikes me is that if you look at their cloud spend [0], three of their four top services are _managed_ services. You simply will not take RDS and swap it out 1:1 for Percona MySQL, it is not the same for clusters of substance. You will not simply throw Elasticsearch at some linux boxes and get the same result as managed OpenSearch. You will not simply install redis/memcached on…

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close