I guess this boils down to difficulties in building strong relationships remotely. I would definitely recommend traveling occasionally to build relationship with your remote folks.
Some stuff you can build to learn more about distributed systems (you can start simple, do research, and then iterate to build a more comprehensive solution): build a distributed file system, a distributed lock server, a consensus algorithm (paxos, raft, etc.), two/three phase commit protocol, distributed hash table, etc.
I haven't seen such bullshit for a long time. Lots of negative claims with no serious data backing up any of these claims looks totally bullshit and amateur.
I would always choose the company with smarter people, it will be better in the long run I think (learn from them, push your limits, grow your network with smart people and their network, etc.)
>> simply practiced interview questions for about three to four months, every day, from morning till night. I then had three phone interviews around November, which I passed.
It's interesting (& funny) to see both high schoolers and experienced people spend similar amount of time (~several months) practicing for these types of technical interviews.
As someone who has gone through software engineer interviews with top Silicon Valley companies, what I see is that the process is biased towards 1) people with lots of time and good memory (so that you just work for several months to churn through the books/questions available out there), 2) new hires (tend to get easier questions as far as I can see, they don't get design questions, etc.) 3) people with competitive programming experience (especially Google or FB). If you are not in one of these groups then good luck, you will need that. Especially experienced software engineers who are married/have kids have very little time to prepare for these sort of interviews, which makes it very hard for them to succeed. The way software engineers are interviewed right now are totally messed up, and is a big waste of time.