Hacker News new | comments | show | ask | jobs | submit login

It didn't make sense to me until I had a.) started a company and b.) saw the historical tech stacks of a number of companies (eg. Google, Facebook, EBay) that had hit it big.

I started my career with the belief that your company has one tech stack, the chief architect chooses it when the company is founded, and that you never ever rewrite it because you're in for a world of pain if you do.

I learned that basically no company that experiences hyper-growth ever does this. Instead, the founder chooses a tech stack based on whatever he knows best and will let him write a v1 quickest - whether it be Java (Google), Perl (EBay), PHP (Facebook), or Common Lisp (Reddit). The first few employees collectively say that the founder is an idiot, choose a different tech stack (usually whatever's hot right now - probably Go or Node.js at this time, Python or Rails in 2005), and rewrite the whole product. They hire an experienced VP who says that the first few employees are idiots, chooses a different tech stack (often the tried and true enterprise favorites of C++ or Java), and dictates that everyone rewrite the product. Eventually, managers with more recent experience in that language get hired, who collectively say that that VP was an idiot, and the real way to do C++/Java is with Guice, Boost, C++11, etc, and rewrite the product that way. Development grinds to a halt, and the company buys a bunch of hot startups who wrote in whatever language they were familiar with, who are technical idiots but managed to build a product that everyone likes.

In this context, Parse and other BaaS providers makes a lot of sense. You can get your v1 product out there really quick, get customer feedback, improve it, take VC, and hire lots of programmers to call you an idiot and rewrite your product into something saner. Then you get bought, everybody at the new company thinks you're an idiot, but you have at least cashed out. Or you don't get bought and hire a VP who'll force you to rewrite your product, but at this stage you have so much of a market lead that it doesn't matter, and the BaaS got you to the point where you have the resources to free yourself of it.

(I wonder if I'll end up tripping some HN flamewar auto-detector with the number of times I've said "idiot" in this post...)

While I agree completely with your comment, I wished you'd written "made architectural choices based on facts that are no longer true" instead of "is an idiot." Nobody sets out to make bad choices on purpose, and only the extremely lucky make architectural choices that survive massive growth.

(I believe Etsy had a policy of rewrites needing to support current needs multiplied by five. This acknowledges that there's a reasonable trade off between current needs and future-proofing.)

I agree, but the actual words used when this discussion comes up very often are much closer to "What idiot designed this shit?" rather than "My coworkers made architectural choices based on facts that are no longer true". (At Google the latter was perhaps more common, but I've heard the former in startups a lot more frequently, and certainly on Internet message boards.) I'm perspective-taking on the part of all sides; I hope that it's apparent from each side being called an idiot in turn and the company succeeding in the end that I don't actually believe any of the participants are idiots.

Once the next round of developers join, the scrappy MVP has usually been pushed far enough to be messy and maintainability becomes an issue. Seeing that might trigger the "idiot" reaction, The old guard appreciate how far it's come.

I believe they used the right word. Not because those that did make the decisions were, in fact, idiots, far from it. It's because many times, that's the attitude of people who decide that things have to change.

"based on facts that are no longer true" I don't think each successive wave is necessarily thinking about facts that were true but are no longer true. I think being opinionated about the tech stack you have to work with is often not all that rational. Trying to substitute concrete rational behaviour on the desires of new waves of employees might seem nice, or at least politically correct — but there is often no specific technical translation for "what idiot wrote this"; it's a cultural thing.

Wrong: "made architectural choices based on facts that are no longer true"

Less wrong: "made architectural choices based on personal preferance"

Don't be such a politically correct idiot!

And, personally, I think that this stack rewrite path makes a _lot_ of sense and probably should be planned from the beginning.

The business requirements to the architecture — not functionality! — change over time. At first, you have to be lean as hell and try a lot of different stuff. Then, you need to scale, and performance becomes an issue. Some time afterwards, you want to add more features to increase monetization and retention, and here you start needing good, abstracted out architecture for all this stuff not to interfere with each other. And finally, you find the sweet spot, and start to really care about bug-free experience, maintainability and reliability.

And all these different business priorities are best suited by different languages, different design approaches, different architectures and people with different personality traits.

Or you can be like WhatsApp, write once in Erlang, and scale to a billion users just with OS-level tweaks.

WhatsApp is one example, and if you're trying to imagine your own path, you should be thinking in statistics and probabilities. Imagine if the idea doesn't work out and you need to pivot. I'm not familiar with Erlang at all, but judging by the fact that (1) it was developed by a big telecom company and (2) it's priorities are stability and performance, I don't feel that it drastically changing business logic of an Erlang application is an easy task.

Being an Erlang developer myself: if you don't actually need the stability of a telecom (e.g. restartless upgrades that hold open circuit-based connections), pivoting around the logic of an Erlang app is about as easy as doing so in Ruby/Python/etc.

Though, that being said, I'd actually recommend Elixir, which gives you the same Erlang-ecosystem benefits, but with the key advantage of being 5x easier to convince the average Ruby/Python developer to use.

Source? I am skeptical WhatsApp is a single monolithic service at this point.

I was nodding so much to this comment. Been there, done that. Been on both sides.

I nodded so vigorously that I need a chiropractor. This perfectly describes my experience in the web industry and the client-server industry before that.

Only the particular languages and frameworks change, but the patterns remain the same.

By patterns you mean GoF??!

There are management and architecture patterns as well as design patterns.

i think what the op meant was that it didn't make sense because it's owned by facebook. Heroku being owned by Salesforce makes much more sense because that's their business models are aligned. I remember the first time I was about to try out Parse, fortunately that's around when Parse got acquired by Facebook and I decided not to take a risk. It especially didn't make sense for me because I was going to build a social app. It doesn't make sense to build a social app on a platform owned by a social app company.

I'm saying that this usually doesn't matter to the people who would be using Parse anyway, because they operate under a timeline much shorter than this. In a year, their startup will either be dead or they'll have the funding to migrate off Parse. On a timescale equal to your lifetime, it's almost a guarantee that FB will pull the plug on Parse. But on a timescale equal to the time period when you need Parse, it's actually a pretty good bet.

If you had tried out Parse right when they got acquired by FB, chances are you would either have a fundable business that can hire engineers to move to your own infrastructure, or you would know that your business idea doesn't work. Either way, you no longer need Parse.

Similarly, the shutdown mostly affects "zombie" businesses - the ones that aren't dead, but aren't growing either - because in a year, you should be able to figure out whether or not your business concept has legs.

Took me rushing through all those years of insane coding in the last company I worked for. By the time I had quit, a fully functional game engine had undergone 3 rewrites with 2 more underway and with one of them not seeing the day of light. All for the same reasons you elucidated and some more.

While it was not 'idiots' that was the reason, the later developers always had just enough more data on the assumptions to be made for the current revision. But then again, not enough to foresee the need for a fresh rewrite when things changed again in the future. Sometimes, the rewrite was essential, sometimes it was just on a subjective whim to build a silver bullet once and for all!

your second paragraph would be incredibly unfortunate. most of the sane large companies i've worked at or know people who work at have settled on 2-4 languages -one of which is usually the legacy starting language-which they provide tier-1 support through dedicated teams providing "the stack" in various forms. everything else is community owned and caveat emptor. its why startups should be able to use whatever language they use a selling point; a huge company churning through languages du jour sounds like an awful experience.

The "2-4 official languages" dictum is usually put in place after the company churns through those 2-4 languages in the first 2-4 years of its existence. Basically everybody realizes how costly it is and says "no more". At least that's how it was at Google, which is perhaps the most famous example of the "We have 4 official languages, and you're not introducing a new one" policy.

I've worked in startups that tried to implement the "1-2 languages only" (usually Java and Jython/JRuby/Groovy) policy as a startup, and they didn't go anywhere. That team of prima donnas who is willing to mortgage the startup's future in order to ship an awesome product seems to be a necessary feature of startup success, and only successful startups get to hire the team of professionals who will button down everything, choose "official" languages, and build tier-1 infrastructure. So yes, it's incredibly unfortunate, but this is the industry we live in. Pick which role you wish to occupy accordingly.

> Google, which is perhaps the most famous example of the "We have 4 official languages, and you're not introducing a new one" policy

I believe those 4 languages were Java, C++, Javascript, and Python. Nowadays they also use Go, Dart, Groovy (in Android Studio), and I guess a lot more. (When I say Groovy, I mean the tiny non-Turing Complete subset of the syntax used as a DSL in typical Gradle build scripts.)

It's technically C++, Java, Python, and Go. There's always been an exception for client-side code (which encompasses Javascript on the web and Objective-C for iOS apps), and for DSLs (which includes Sawzall, Protobufs, Bazel, Gradle, and several that I don't believe are public. Haskell was also used as a DSL by one team, though their product unfortunately got canceled).

This is frankly the best tech industry tech stack cycle explanation I've ever seen lol.

I've thought this myself but never put the words together so clearly

Did facebook move away from PHP ? Did google radically switch stacks ?

Facebook's backend is, to my knowledge, largely C++, connected via Thrift. The frontend started out as PHP, eventually got compiled to C++ via HipHop, replaced HipHop with HHVM, and then added support for Hack. My understanding is that they're gradually adding more React to it as well. FB also includes a number of specialized services, eg. Chat & Whatsapp are written in Erlang.

Google as written by Larry Page was done in Java. It was rewritten in Python by Scott Hassan before the company was incorporated. As of 1999, the webserver and crawler were still in Python. It was almost completely rewritten (multiple times) in C++ shortly thereafter for efficiency. Most of the Google Apps (GMail, Docs, Plus, etc.) are written in Java. The webserver for Search shifted over to a combination of Java and two different DSLs in 2010; I worked on the implementation of this. My comment is lightly paraphrased from a remark Larry Page gave when asked why Google doesn't adopt more modern programming frameworks like Rails or Node (it was in 2011, when both of these were still state-of-the-art).

Facebook rewrote PHP and switched various components to other systems entirely. It's not like they're still running their original LAMP stack.

The circle of life-cycles. Turn it into a diagram and help founders, early employees, VPs and managers to navigate these phase transitions.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | DMCA | Apply to YC | Contact