It remains the greatest engineering team I've ever seen or had the pleasure to be a part of. I was only there from early 2011 to mid 2012 but what I took with me changed me as an engineer. The shear brilliance of the ideas and approaches...I was blessed to witness it. I don't think I can overstate it, though many will think this is all hyperbole. I didn't always agree with the decisions made and I was definitely there when the product stagnation started, but we worked hard to reduce tech debt, build better infrastructure, and improve... but man, the battles we fought. Many fond memories, including the single greatest engineering mistake I've ever seen made, one that I still think about until this day (but will never post in a public forum :)).
I'm just going to chime in here and say thank you, there still really isn't in my mind a comparable offering to heroku's git push and go straight to a reasonable production
I honestly find it a bit nuts, there's offerings that come close, but using them I still get the impression that they've just not put in the time really refining that user interface, so I just wanted to say thank you for the work you and the GP did, it was incredibly helpful and I'm happy to say helped me launch and test a few product offerings as well as some fun ideas
It absolutely boggles my mind that nothing else exists to fill this spot. Fly and others offer varying degrees of easier-than-AWS hosting, but nobody offers true PaaS like Heroku, IMHO.
The Heroku style of PaaS just isn't very interesting to most large businesses that actually pay for things. The world basically moved on to Kubernetes-based products (see Google and Red Hat)--or just shutdown like a lot of Cloud Foundry-based products. Yes, many individuals and smaller shops care more about simplicity but they're generally not willing/able to pay a lot (if anything).
It seems like you’re right, but it’s strange that the data world seems to be moving in the opposite direction, with PaaS products like Snowflake, DataBricks, Microsoft Fabric, even Salesforce’s own Data Cloud eating the world.
PaaS has always been this thing that isn't pure infrastructure or pure hosted software that you use as-is. Salesforce has something over 100K attendees of partners and users to its annual conference. It's always been this in-between thing with a fairly loose definition. I'd argue that Salesforce was long a cross between SaaS (for the users) and PaaS (for developers). You can probably apply the same view to a lot of other company products.
Heroku and Ruby, for me, was the 21st century answer to 'deploying' a PHP site over FTP.
The fact that it required nothing but 'git push heroku master' at the time was incredible, especially for how easy it was to spin up pre-prod environments with it, and how wiring up a database was also trivial.
Every time I come across an infrastructure that is bloated out with k8s, helm charts, and a complex web of cloud resources, all for a service not even running at scale, I look back to the simplicity we used to have.
In 2022 Render increased their prices (which for my team worked out at a doubling of costs) with a one month notice period and the CEO's response to me when I asked him if he thought that was a fair notice period was that it was operationally necessary and he was sorry to see us go.
I completely agree that there's nothing comparable to old-school Heroku, which is crazy. That said, Cloudflare seems promising for some types of projects and I use them for a few things. Anyone using them as a one-stop-shop?
For me Northflank have filled this spot. Though by the time I switched I was already using Docker so can't speak directly to their Heroku Buildpack support.
vercel goes a step further, and (when configured this way) allocates a new hostname (eg feature-branch-add-thingg.app.vercel.example.com) for new branches, to make testing even easier.
I’ve been using Render for close to 5 years, and it’s excellent. I can’t think of anything I use that it doesn’t do as well or better than Heroku did last I checked.
I agree with everything you said, and can only thank the founders for their tremendous insight and willingness to push the limits. The shear number of engineering practices we take for granted today because of something like Heroku boggles my mind.
I am forever grateful for the opportunity to work there and make it an effort to pass on what I learned to others.
> by 2012 we were drowning in tech debt and scaling challenges.
> the greatest engineering team I've ever seen
How do these two things reconcile in your opinion? In my view , doing something quickly is the easy part , good engineering is only needed exactly when you want things to be maintainable and scalable, so the assertions above don’t really make much sense to me.
It is hard to explain the impact of such massive growth over a 2-3 period. New features were coming online while old ones were being abused by overuse. For instance, we launched PostgreSQL in the cloud, something we take for granted today. Not only that, but we offered an insane feature set around "follow" and "forking" that made working with databases seem futuristic.
I remember when we launched that product we went to that year's PGCon and there were people in the crowd angry and dismissive that we would treat data that way. It was actually pretty confrontational. Products like that were being produced while we were also working on migrating away from the initial implementation of the "free tier" (internally called Shen). It took me and a few others months to replace it and ensure we didn't lose data while also making it maintainable. The resulting tool lovingly named "yobuko" ended up remaining for years after that (largely due to the stagnation and turn over).
Anyways, that was just a slice of it. Decisions made today are not always the decisions you wanted to be made tomorrow. Day0 is great, day100 comes with more knowledge and regret. :D
In general, my impression has been that you don't want to architect your solution at first for massive scaling, because:
* You probably aren't going to need it, so putting the effort into scaling means slowing down your delivery of the very features that would make customers want your solution.
* It typically slows down performance of individual features.
* It definitely significant increases the complexity of your solution (and probably the user-facing tooling as well).
* It is difficult to achieve until you have the live traffic to test your approach.
Yeah I think there is a lot of truth here. You can't solve all the problems and in Heroku's case we focused on user experience (internally and externally). Great ideas like "git push heroku main" are game changers, but what happens once that git server is receiving 1000 pushes a minute? Totally different thought process.
Perhaps the thing I would add is that even with the tech debt and scaling problems we still had over a million applications deployed ready for that request to hit them.
Well many of them you may know in that they made their way into so many systems (though arguably without the refined UX of Heroku) but the two that come up the most and I am teaching others:
* The simpler the interface for the user, the more decisions you can make behind the scenes. A good example here is "git push heroku". Not only is that something every user (bot or human) can run, it is also easy to script, protect, and scale. It keeps the surface area small and the abstraction makes the most sense. The code that was behind that push lasted for quite some time, and it was effectively 1-2 Python classes as a service. But once we got the code into our systems, we could do anything with it... and we did. One of the things that blows my mind is that our "slug" (this is what we called the tarballs of code that we put on the runtimes) maker was itself a heroku app. It lived along side everyone else. We were able to reduce our platform down to a few simple pieces (what we called the kernel) and everything else was deployed on top. We benefited from the very things our customers were using.
* NOTE: This one is going to be hard to explain because it is so simple, but when you start thinking about system design in this way the possibilities start to open up right in front of you.
The idea is that everything we do is effectively explained as "input -> filter -> output". Even down to the CPU. But especially when it comes to a platform. With this design mentality we had a logging pipeline that I am still jealous of. We had metrics flowing into dashboards that were everywhere and informed us of our work. We had things like "integration testing" that ran continuously against the platform, all from the users perspective, that allowed us to test features long before they reached the public. All of these things were "input" that we "filtered" in some way to produce "output". When you start using that "output" as "input" and chaining these things together you get to a place where you can design a "kernel" (effectively an API service and a runtime) and start interacting with it to produce a platform.
I remember when we were pairing down services to get to our "kernel" one of the Operations engineers developed our Chef so that an internal engineer needed maybe 5-7 lines of Ruby to deploy their app and get everything they needed. Simple input, that produced a reliable application setup, that could now get us into production faster.
You are still selecting one verse to interpret an entire culture. Misleading at best. And saying this is "white washing history" is silly. Continue reading the Bible and you'll see that it is the Christian Worldview that eventually ended slavery.
Cherry picking the bible isn't going to get you any closer to understanding. There are a lot of reasons God ordained society in a certain way. Keep reading and you'll discover that is a much more complex situation than you let on. Also don't let your modern ideals get in the way of understanding an ancient culture and a loving God.
It is absolutely not a "clean break". While Judaism and Christianity are distinct, they are related in that Christianity builds on the Hebrew Scriptures. I think perhaps the best imagery for their relationship is Romans 11 and the olive tree. That takes some studying to fully understand though.
This is answered throughout scriptures. The problem of sin is human's rejection of the goodness of God. We love ourselves more than we love him and in that rejection regularly advantage ourselves at the disadvantage of those around us. In order to solve the problem, we would have to be wiped out. But in the wisdom and goodness of God he planned a way from the beginning to solve our transgressions.
God created all things out of love, and made humans as image bearers to tend to his creation. Out of love he did these things, fully knowing that humans were capable of turning away from God. Humans put themselves before God in the garden and by doing so brought evil into the world. The rest of scripture is God's good plan to turn the world right again, to expel evil from his good creation while also saving those whom bear his image that he loves. He does this by giving them the law to expose the sin of humankind, and sending the 2nd person of the trinity of God (Jesus) to fulfill the law. Jesus offered himself as a sacrifice to pay the guilt of the sins of humans. In doing so bringing true justice and mercy for the evil brought into the world. In his resurrection he conquered death (the ultimate punishment for evil, death is something that was never intended in God's good creation) and setting in motion the process of restoring the world, bringing about new creation in which Jesus is the first fruits. The world will be set right and all sin, evil, and tears wiped away.
No, no. He didn't give us any option. God is all-powerful and all-knowing, so he made us knowing that we would break his rules and thus knowing that he would later punish us for eternity for breaking them. The notion of free will is in complete contradiction with an all-knowing all-powerful agent that sets things in motion. And the fact that God still punishes us even though we never had a choice is proof that it's not benevolent.
So: all-powerful, all-knowing, all-loving. Pick two.
If you can’t or won’t see the truth in the crucifixion and resurrection of Jesus Christ I pray that it is revealed to you and you have life changing faith. Either way, be blessed in your day and week.
Yes, out of love he gave us the agency and dignity to choose not to be in a love relationship with him. Faith in Jesus Christ and the arrival of the Kingdom of God to set things right provides us a means to enter into a relationship with him in a fallen, sinful world. To be adopted into his family and inherit new creation. This means he also dignifies those who choose not to love him to separate themselves from his presence for all eternity. In which case then they become less human.
In our culture it is easy to think of this in terms of Dante's "Inferno", but that is a poem from the Middle Ages, and not in fact what the Bible tells us eternal separation from God looks like. Anyways, there is a lot of context to cover that isn't possible here. If you'd like to understand all of this better, go to the Bible, but then also perhaps consider "The Prodigal God" by Tim Keller. Blessings.
If God is truly good and omniscient, why would he intentionally create imperfect beings with the capacity for evil and then judge them for being imperfect? It's hard to see this story as one of some being of pure goodness instead of, rather, a character more akin to Jigsaw, trapping his creations in paradoxical or impossible situations for some unknown pleasure.
Maybe we just have drastically different ideas of what "love" is.
God, who is referred to as love, created beings in his image to tend to his creation, and to be in a love relationship with him. He himself created out of a loving relationship (read up on his triune nature). Rather than make them automatons that simply do his will he wanted them to love him of their own will the same he loves them. You can understand his first command as "do this because you love me and trust that I have your best interest in mind". When they instead chose themselves he could no longer be in their presence because of their sin, thus they were ejected from his presence, and thus cursed to pay the costs of that sin, until his plan to redeem them through his own justice and mercy could be fulfilled.
Any love relationship that is truly loving is not created by power or authority. It is by the willingness of both parties, unconditionally.
> Rather than make them automatons that simply do his will he wanted them to love him of their own will the same he loves them. You can understand his first command as "do this because you love me and trust that I have your best interest in mind".
So he doesn't want automatons, but he does want unquestioning loyalty and trust? Is this not simply a distinction without a difference?
If someone we knew in our lives behaved like this with their children, we'd rightfully question what trauma occurred to make them this way. To create and then cast away those he created who did not act as he wished is the behavior of a control freak, not a loving god.
I don’t think it is so much “unquestioning loyalty and trust” but a loving relationship with the creator of the universe. It is hardly a distinction without difference. The story continues that God came to earth as a man who, while innocent, was brutally murdered, for spreading this message. That doesn’t sound like controlling (nor trauma-induced) behavior to me. Instead it sounds like the ultimate sacrifice for a loved one.
Finally, you missed the part where humans chose to be cast away, the consequences of sin are death.
Either way, I pray this truth is revealed to you and that you are blessed in your day and week.
One way to think about it is that we were created to be in a loving relationship with God. The same way we were created to breathe oxygen. It is designed to be that way. But we're intelligent beings, if someone chooses not to be in your presence, you provide them the dignity to make that choice. But that doesn't mean they remain in the same status as the ones you love. I think we could be honest with ourselves that our loved ones have a different relationship with us than those who choose not to be our friends? Very similar to our relationship with God. And he has done a tremendous amount of work through the ages, through his Son to show you how much he loves you and wants to be in a relationship with you.
Ultimately if someone chooses they do not like God's design and do not want to be in his presence, he honors that, but that means they are setting aside their humanity, and his design for them.
Thoughts like this miss the purpose and significance of the maxim being discussed. Science doesn't disprove an "almighty, unexplainable divine entity" any more than an "almighty, unexplainable divine entity" could also provide science as a means to understand the nature of things.
Careful you don't fall into the trap of indoctrination. :)
reply