That said, they've done super well for themselves. It sort of blows away this thought of successful startups being full of the best and trying to build the best product. I'm curious what will happen to them down the line.
That said, they've done super well for themselves. It sort of blows away this thought of successful startups being full of the best and trying to build the best product. I'm curious what will happen to them down the line.
While we care intensely about "high quality" software, we define it as "well-designed" or "well-abstracted" or "loosely couple" and all kinds of things that matter when you look at source code, customers care about:
1) does it solve my problem?
2) is it reliable enough? ("enough" depends on use case)
3) can I afford it? (not just cash but maybe TCO)
Edit: And this applies to most of the "hot startups" too. Ask anyone who has been at a major company through the growth years and ask how "good" their software was. Every single one will share horror stories about late nights, tight deadlines, horrible hacks, and "omg let's rewrite this whole thing!" arguments.
As things grow and stability becomes a priority (often customer-driven), things change for the better for the software.
4) How quickly can you fix it?
5) How quickly can you deliver this feature?
One notable exception of late has been security fixes. A lot more enterprises have become more aware of the need to patch their systems quickly in response to CVEs etc.
On one of my first projects, I was so afraid of "spaghetti code". Before adding any substantial feature I searched for "best practices" and tried to implement them, made sure my file names and folder structures were organized, wrote unit tests, then wrote integration tests, then manually tested -- all before I had a single customer or another developer on my "team". Looking back, I was very slow. I think it still would've failed if I was a bit faster, but who knows.
Then at my next job I had almost the exact same experience as you. 400-600 line methods, no logging, reliance on outdated libraries/frameworks, no documentation. Fixing bugs meant trying to change as little code as possible, because if you actually tried to refactor you would almost definitely end up altering or breaking some other feature. Yet there were large companies that paid for and relied on the software for business critical processes.
I'm still trying to figure out what the balance is, but I'm glad to have experienced both ends of the spectrum.