488 karma · joined April 2, 2022
The reality though is it doesn’t work well. The tooling, performance, debugging, library stability and observability are all substantially worse. Your team might save a ton of time spinning up a React Native app, but lose it all right back once you keep hitting gnarly Android performance issues.
In the future, once we have a proper cross platform development kit officially supported by Android and Apple, code sharing will be great. But today it doesn’t exist. And that’s why none of (the good) apps you use are written in a cross platform way.
The thing is that its easy to get 90% there with these things. But getting that last 10% is often a huge hurdle, erasing most of the efficiency gains you just made.
Then, when a new hot framework comes along, the old hottness you bet your project on quickly becomes deprecated, and you have to rewrite your whole project under duress.
I tried the new hotness recently - Kotlin Multiplatform. Sharing code was great, debugging sort of worked but not really, and it wasn't long before I was pen pals with an overseas developer - no documentation on the bleeding edge! Ive been developing iOS for 10 years and my all-native workflow never relied on the mercy of a kind Bulgarian...
How long before people give up on that and move on to the next thing?
Hiring is really tough as well. With cross platform, at the end of the day, when you get that crazy memory issue or app crash, you need native expertise. So to be an effective cross platform engineer, you have to be an expert in iOS, Android, and whatever hot framework you bet on.
If you need to get to market very quickly and are OK with throwing it all away in a few years, cross platform is a great choice. But if you want your app to stand the test of time, the best thing you can do is to write it in the only framework which is officially supported by the platform - all native.
Being senior means you have learned how to learn. You don't get this skill by asking a bunch of questions, you get it by answering your own questions without having someone else to rely on. This is a skill we should foster in our junior engineers as early as possible, and being available as a shoulder to tap on every 15 minutes actively prevents that skill from developing.
I think it is perfectly resonable to mentor a junior developer using a single, daily video meeting of 30 minutes or 1 hour. This is a time they can use to ask questions about their previous day, bounce ideas, etc. If a question comes up later, they can spend the day trying to solve it and report on it in the next daily meeting.
The best thing you can do for your junior engineer is to find a stream of work which challenges them at the right level (not too much, but just enough), and let them go independently while keeping some guard rails. This should not require many hours of 1:1 face time.
I understand this approach might not work for some juniors who can only learn in a highly social context with a mentor in the room. But I think it can work for many juniors, and actually be beneficial in the long run.
After you do some contracts and get some good experience under your belt, register as an LLC and give yourself a title - software engineer at your company.
It should be enough to get your foot in the door for an interview and from there as long as you are a good talker you will get the job.
Whether or not saying you got laid off would hurt your chances is a separate question. My guess is most of the time it wont. But as a flip, would saying you got laid off improve your chances of getting the job? If the answer is no, then its not worth saying - focus instead on the things that for sure portray you positively.
The same goes for jobs with short tenures - if you stayed at some place for a few months and left just leave it off your resume. It doesn't do anything to sell you, so why waste time on it?
Just remember, an interview is a short period of time to sell the best parts of yourself that are most applicable to the job. It is not a 100% confession of all the good and bad things that happened to you.
At least in my town, Ubers are more expensive than that. I can't seem to find a trip anywhere for under $15, even if its a few miles away, or like $3 per mile. Longer trips are more economical, but for example, my airport (40 miles away) is quoting me $80 at the moment, or $2 per mile. Also, these prices don't include tip.
I think if you lived in a big city with public transportation and occasionally took Uber, it would be more economical than a car. But as a 100% replacement, Ubers appear to be 3 to 5 times more expensive than having your own car.
And by the way, that AAA data is from a brand new car. You can easily go cheaper by getting a reliable used car.
source: https://newsroom.aaa.com/2022/08/annual-cost-of-new-car-owne...
If the departures are such that for each team, 1 competent senior engineer remains who can keep that domain running, then Twitter could be unaffected with 1/5 of its workforce. They might not be building new features, but the current site could function, which is reasonable since the current site is arguably feature complete.
But in reality it won't be as clean as that. If the whole localization team quits, suddenly the site won't be translated to other languages. If the whole mobile release team quits, suddenly the Twitter app might disappear from the app store. Or the security team is gutted and suddenly everyone's passwords are leaked.
Its also my experience that as you get more senior and focused on a specific skill (I'm an iOS engineer), interviews tend to focus on that skill more than leetcode. I think there are a few stalwart holdouts (facebook + google), but I have interviewed with several trendy big tech companies and none of them asked me pure leetcode - it was always framed around my iOS skillset.
However, for a junior engineer there is no way to evaluate this kind of skillset since it doesn't exist - so Leetcode is a resonable substitute.
As someone not particularly social, it’s an amazing way to get unblocked without relying on another human.
Actually, if you think about it, the whole concept of getting a college degree isn't much different - its not about what you learn in the classes, it just shows that you have the capacity to go through an arbitrary social experience, follow a bunch of rules, learn some stuff, and stick with it for a few years - pretty similar to a job.
On my new team, there is an incompetent senior engineer. Damn... how I miss my incompetent junior, who aside from wasting some time, never really affected the team. The incompetent senior produces impressive amounts of badly architected, untested code which breaks subtly and is impossible to maintain. They are also totally unreceptive to mentorship because they are so senior and know everything.
As a remote employee I will always try to gravitate towards companies that accommodate me best, but I’m not opposed to the idea that some companies want to be in-person and don’t want to deal with remote. I just chose not to work for those companies.
Just because you can write something in 3 lines of code using lots of nesting and anonymous functions and variables doesn’t mean you should. This code would do better if it was longer, the variables had names, and the transforming functions broken out and named.
In my opinion this is a big problem. I wish there was a stronger culture of letting low performers go quickly in tech. This would reduce the need for exhaustive interview loops and ultimately make the industry more inclusive because you could afford to take a chance on someone without being chained to them for years to come.