But are there practices used at these large companies that small and medium sized companies should not emulate?
2. Interviewing. FAANG can waste 30+ engineering hours on each candidate because of how much money they can burn. Don't do leetcode interviews. Find someone who you think is good, hire them, if they're not good let them go. Don't make a soul crushing interview process.
3. Open office / an office. It's a complete waste for most startups (unless you're a hardware company and can't send the hardware units to each dev). It's a sunk cost and "back in my day"-ism in FAANG.
Don’t do that. Center and value the actual software construction; make sure you treat the “meta” as an unfortunately necessary cost rather than the goal.
Smaller companies should focus on the business problems though instead of rolling their own database, orchestration, or programming language. At a large enough size doing any of those things may pay off but when you are smaller they are just a distraction from your core business.
When you're facing off against large companies as a smaller player this is one of the tricks you can use for leverage. You can serve the markets that larger companies feel safe ignoring because they are currently small.
They should however be markets that you expect to grow over time.
Paul Graham talks about this in some detail in his essay "do things that don't scale".
Large companies suck. They obsess over processes and demand formality.
The best thing about working at a startup is that it's a startup!
At a startup, you can be informal. You can do work that wasn't assigned to you. You can communicate with everyone on the team directly. You can change your planned design and get right to working on those changes.
People think that companies are big because of the convoluted processes they use. It's the other way around.
If you have 100 people to do 95 things, then it makes sense to give every person a specific structured role. Else, why have 100 people at all?
When you only have 30 people to do those 95 things, then your structure not only has to be, but can be much more organic and fluid.
Make sure you use it when you need it. Not because others do it.
CI/CD is two processes, not one.
You cannot put code in prod and say you regressed it unless you drop everything in an instrumented environment, and ran everything against it.
Just because you hired a bunch of software engineers, you are not obviated from keeping around someone who knows what they are doing.
There are two faces to Quality: 1-I will negate this suffering 2-I will replace one form of suffering with another, to buy time, and exploit the human tolerance/blindspot for churn and novelty to keep my revenue coming in.
1 is incredibly difficult, expensive, and full of work you just cannot avoid or get around. 2 is easy, modus operandi, and actually synergizes with multiple other business cycles, and is thus considered the "No one ever got fired for buying IBM" route.
If you are not doing 1 you are doing 2 by default.