aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXe Iaso <me@christine.website>2022-05-05 14:58:41 +0000
committerXe Iaso <me@christine.website>2022-05-05 14:58:41 +0000
commit6be7bd7613d127e7df7831edaba101bdafc82c59 (patch)
treec17d8e2726b3cdf3abca254c1d8a065b642d0acc
parentcd1ce7785a01c6dc087b557fa5094168f3269c1f (diff)
downloadxesite-6be7bd7613d127e7df7831edaba101bdafc82c59.tar.xz
xesite-6be7bd7613d127e7df7831edaba101bdafc82c59.zip
blog: I Miss Heroku's DevEx
Signed-off-by: Xe Iaso <me@christine.website>
-rw-r--r--blog/heroku-devex-2022-05-12.markdown102
1 files changed, 102 insertions, 0 deletions
diff --git a/blog/heroku-devex-2022-05-12.markdown b/blog/heroku-devex-2022-05-12.markdown
new file mode 100644
index 0000000..e512ff1
--- /dev/null
+++ b/blog/heroku-devex-2022-05-12.markdown
@@ -0,0 +1,102 @@
+---
+title: "I Miss Heroku's DevEx"
+date: 2022-05-12
+---
+
+If you've never really experienced it before, it's gonna sound really weird.
+Basically the main way that Heroku worked is that they would set up a git remote
+for each "app" it hosted. Each "app" had its source code in a git repo and a
+"Procfile" that told Heroku what to do with it. So when it came time to deploy
+that app, you'd just `git push heroku main` and then Heroku would just go off
+and build that app and run it _somewhere_ in the cloud. You got back a HTTPS URL
+and then bam you have a website.
+
+The developer experience didn't stop there. Most of how Heroku apps are
+configured are via environment variables, and there were addons that let you
+tell Heroku things like "hi yes I would like one (1) postgres please" and the
+platform would spin up a database somewhere and drop a config variable into the
+app's config. It was magic. Things just worked and it left you free to go do
+what made you money.
+
+Heroku's free tier got me the in I needed to make my career really start. If I
+didn't have something like Heroku in my life I doubt that my career would be the
+same or even I would be the same person I am today. It's really hard to describe
+what having access to a platform that lets you turn ideas into production
+quality code does to your output ability. I even ended up reinventing Heroku a
+few times in my career (working for Deis and later reinventing most of the core
+of Heroku as a project between jobs), but nothing really hit that same level of
+wonder/magic that Heroku did.
+
+I ended up working there and when I did I understood why Heroku had fallen so
+much. Heroku is owned by Salesforce and Salesforce doesn't really understand
+what they had acquired with Heroku. Heroku had resisted integration into the
+larger Salesforce organization and as a result was really really starved for
+headcount. I had to have a come-to-jesus meeting with the CTO of Heroku where I
+spelled out my medical needs and how the insurance that the contracting agency
+they were using was insufficent (showing comparisons between bills for blood
+draws where paying with the insurance ended up costing me more than not using
+it). I got hired and then that was just in time for Salesforce to really start
+pulling Heroku into the fold.
+
+The really great part about working at Heroku was that setting up a new service
+was so easy that the majority of the productionalization checklist was just
+enabling hidden feature flags to lock down the app. I'm surprised that didn't
+get streamlined.
+
+The Heroku I joined no longer exists. I joined Heroku but I left Salesforce. I
+can't blame any of my coworkers from Heroku from fleeing the sinking ship. The
+ship has been sinking for years but the culture of Heroku really stuck around
+long enough that it was hard to realize the shop was sinking.
+
+It can really be seen with how long it's taken Heroku to react to [that one
+horrible security event](https://status.heroku.com/incidents/2413) they've been
+dealing with. Based on what I remember about the internal architecture (it was a
+microservices tire fire unlike you have ever seen, it's part of the inspiration
+that lead me to write [this post](/blog/make-microservices-cluster-2022-01-27))
+and the notes that have been put on the public facing status page, I'm guessing
+that most of Heroku is "legacy" code (IE: nobody on the team that made this
+service works here anymore) at this point. When I was there most of the services
+on my team were "legacy" code that was production-facing, load-bearing and
+overall critical to the company succeeding; but it was built to be reliable
+enough that we could overall ignore it until it was actually falling over. But
+then because of the ways that things were chorded together it could take a very
+long time to actually fix issues because the symptoms were all over the place.
+
+Don't get me wrong, I loved working there but it was mostly for the people. That
+and the ability to say that I helped make Heroku better for the next generation.
+If you've ever used the metrics tab on Heroku, chances are that you've
+encountered my code indirectly. If you've ever done Heroku threshold autoscaling
+or response time alerting, you've dealt with code I helped write. The body of
+Heroku remains but the soul has long since fled.
+
+At the few points of my career that I have tried to reinvent Heroku (be it on my
+own or working for a company doing that), there has mostly been this weird
+realization that in order to have a thing like Heroku exist it really needs to
+be hosted by someone else in the cloud. One of the places I worked for was
+selling self-hosted Heroku on top of CoreOS and fleetd (remember fleetd? that
+was magical) and while it did have a lot of the same developer experience, it
+never really had the same magic feeling. I had the same problem with my own
+implementation. Sure you can get the app hosting part of Heroku fairly easily
+(and with Docker being as mature as it was at that point yeah it was fairly
+easy). But when it comes to the real experience of addons and the whole
+ecosystem there, you really need either to get very lucky or become an industry
+standard. Realistically though, you aren't going to be either lucky or an
+industry standard and then you need to also reinvent the next 80% of Heroku from
+scratch on hardware that you don't control. It's no wonder that ultimately
+failed (even though one of them was bought out by Microsoft after doing a weird
+Kubernetes pivot).
+
+There was something really magical about the whole thing that I really miss to
+this day. Heroku was at least a decade ahead of its time as far as developer
+experience goes. Things Just Worked in ways that would probably put a lot of us
+out of jobs if they really took off. I miss the process for putting something on
+the internet to just be a `git push` and trust that the machine will just take
+care of it. I wonder if we'll ever really have something like that on top of Nix
+or NixOS.
+
+---
+
+If you're reading this before the 12th, welcome to an experiment! I've been
+wondering about how to make some of my posts Patreon exclusive for a week. This
+post was published for my patrons on the 5th of May. Please don't share this
+link around on social media until the 12th, but privately sharing it is okay.