In the end, being a software engineer is just a job. We put in X time for Y value (usually money). Every job is like this. And the company is effectively a collection of people working for the same job, so the same equation applies at a company level.
Good craftmanship does matter. But our time is limited & time's value changes based on the current context. Better craftmanship itself doesn't provide value: yes you could spend time to make something better, but how much time? Would the company be fine with 2 extra weeks of polish for a 1-off client if the client will likely terminate the contract if deadlines aren't met? What if that contract is the difference between 1-2 years of runaway and collapsing as a company? Does writing good code trump the importance of the company not dying? If the company collapses, you're out of a job.
The ease of information lures developers with its high celing of craftsmanship, but often is a siren luring your career to death by drowing it in a sea of "just a little bit better". Craftmanship matters, but sometimes. Writing better code for something that is continously changed will benefit you over time, but if the code is never changed what's the point? If it works in its current state, then it requires 0 effort to be maintain (bringing it's value/time ratio to infinite since time is 0). If you start putting effort into polishing this, time is now greater than 0 and the value/time ratio is lower (so now you're technically losing the company money).
If your ratio is too low, the company will simply terminate you. Yes, your code could be the best out of everyone else's and could have way most test coverage. But if everyone else is shipping for many more clients than you & those clients are happy despite the worse engineering quality, then who's technically providing the least value?
There's wide variety of archetypes at L7 and L8 levels. You cannot prescribe a fixed/minimum size of the org as a factor. However, outsized impact is a minimum at those levels.
For example, one recent L6->L7 promotion in my organization: technical lead for 60+ engineers from my organization, working with x-fn/x-team for an year, to launch a $XB+ ARR product for YouTube. This is a typical project TL type of role.
There's other archetypes where you solve a deeply technical problem, with a very small group of engineers even. I had a mentor who saved Google millions of SWE hours by redesigning core search infrastructure.
Hello! Y Combinator alum here. Thanks for linking my doc, Rahul.
Before starting a startup, get your physical, mental, and financial health in order.
Sleep: Do you have good sleep hygiene? Do you have any sleep disorders?
Exercise: Do you know how to lift weights safely? Can you jog for two miles at 10:00/mi pace everyday?
Nutrition: Do you have an efficient meal prep routine?
If you're not already, being at low body fat levels, which may require controlling your calories, will give you incredibly high energy levels. When you're doing a startup, you need every edge you can get, especially a big boost like this.
IMO, cleaning up your diet is good practice for a startup: You have to choose wisely within your daily calorie budget -- just like you'll have to spend your time wisely -- and do the right thing even when you really want to do something else, which happens a lot because startups are very counterintuitive. [1]
Do you know how to meditate?
Do you know effective CBT?
Relationships: Do you have a close group of friends? Are you in a stable, long-term romantic relationship? If you're single, I suggest making dating a priority. If you're in a relationship, decide what minimal set of activities you will make time for no matter what: Friday evening dinner, exercising together, one weekend trip per month, ...
Have enough in savings so that you can go a year at your current lifestyle without getting paid. You may need to reduce your lifestyle.
Start contracting so that, if things get low, you have a client pipeline you can turn to.
The above should be heavily optimized in terms of time, effort, and expense and put on autopilot. The above will keep you strong so that you can do the best work of your life. Then you can start building actual startup skills:
Final note: Most people shouldn't take investment and should instead shoot for a bootstrapped exit.
[1] Startups are an extremely counterintuitive endeavor and the right thing to do often feels wrong. For example, our instincts are honed for survival, which causes us to overreact when there is a problem. In the jungle, this makes sense: That rustling in the bushes could be a tiger. But at startups, these survival instincts actually lead to death: Per Reid Hoffman, if you spend all your time putting out fires instead of letting the (right) fires burn, you burn through your startup's funding before you can achieve liftoff.
I don't think specializing would hurt your chances to land a job at a startup, and could help. However, if you don't have basic generalist skills then you are hurting your chances to succeed.
For context I think there's a difference between
At a startup, most of the time you need a wide array of skills to succeed. And generally with hiring, they tend to care more about generalists. But this isn't always the case for getting hired. We all know there can often be a large delta between what is screened for in hiring and what is actually done on the job. For example, you get hired as a frontend web dev at a small startup, but then they pivot to an app and now you now have to mobile development instead. But in this example, someone who specialized in frontend web dev would have a better chance at getting the job, but if they don't have experience in mobile (or can't pick it up quickly), then they will struggle at the job. Plus, startups often need people to hit the ground running so having experience in a specific stack is better as they don't have the time for slower onboarding. So generalist is good enough, but generalist + specialist is ideal.
The nice thing is that from my experience startups often have less technically demanding then large tech companies. So, being mildly proficient in a domain should be sufficient to do the work required to succeed. So, my general process to maximize my chances at a startup would be
Finishing step 2 should be plenty to get you a job in a startup, step 3 just improves your chances in some positions. The main difficulty here is it's harder to specialize in step 3 when at a startup since the work involves wide breadth, but with the right position or a good ability to advocate for projects this can be achieved.
The good news is that this process aligns well with the process for getting into Big Tech if you ever want to pivot as
However, depending on the role you may want to have two versions of resume. One that leads more towards generalist and another leads towards specific expertise.
Also another thing to keep in mind is that these things are often variable based on company culture, the companies economic situation, specific team, region, etc. So although this general pattern of generalist at startup and specialist at Big Tech may statistically significant, there will be counter examples in each category. So best determine this from information about a specific company vs whether or not it's FAANG or not.
I just saw this question, so adding my thoughts.
As others said, most FAANG companies do not have many openings in Brazil, especially for remote positions.
Instead, here are good companies that hire remote-first in Brazil, with good total comp:
And, for bigger companies:
I agree with Rahul that the best bet is probably joining a developer marketplace, building relationships, and trying to get hired directly later.
Other ones to look for, besides the ones listed: G2i, X-Team.