Michael Lynch, a developer who left Google, writes about bootstrapping software businesses, code review, and the TinyPilot KVM device.
HN commenters link his code review advice and his annual reviews of building small software businesses, which openly share finances.
Complementary to other answers, I would suggest introducing this technique: https://dev.to/allthecode/moscow-the-best-code-review-technique-you-re-not-using-2b0e However, share this w/ the reviewee first!
I know some devs that are anxious if they don't fix _every_ single comment in their PR, even if I'm just suggesting something as "nice to have".
This helped to mark which comments are actual priority.
Also, make sure you're using code formatter in your CI, to avoid reviewing the code style, as this can start some unnecessary wars and frustration.
Also, I suggest sharing this article https://mtlynch.io/code-review-love/ with your colleagues, especially step 8:
> As the author, you ultimately control your reaction to feedback. Treat your reviewer’s notes as an objective discussion about the code, not your personal worth as a human.
To some degree, as a reviewer you can keep your tone friendly, but ultimately _every_ sentence can be took as personal attack, and you can't really do anything about that. Keep that in mind, don't focus _too much_ on the tone, and don't let that prevent you from giving a comprehensive review.
One other thing I personally do, because I'm famous for giving _really_ thorough reviews, is to make sure from time to time that the other person is fine w/ that. Simple DM "I hope you don't feel too overwhelmed by my CR?" helps, especially that often people respond that they actually approve I'm so thorough. If you worry people get offended, it is easy…
Downvote me if you want, but I work at Google and I can offer a counterpoint to the process presented in the article that blew up yesterday:
https://mtlynch.io/why-i-quit-google/
As always, this is my single-sample personal view, so please don't mistake this for anything beyond that.
It's true, we do place a lot of importance on complexity and impact, which are fuzzy metrics, potentially inconsistently defined, and can be subject to circumstance. Yes, engineers do suffer the temptation to game things by releasing their work prematurely and not committing themselves to supporting it. And yes, not all managers know how to set expectations appropriately, occasionally resulting in disappointment and confusion for their employees.
However, that's the individual's perspective. Promotions serve the institution first, and the individual second, and I'd like to offer the institutional perspective.
Promotion to senior engineer is a big freaking deal. Once you are Senior, you've effectively been given the keys to the kingdom. It's the industry equivalent of tenure. Want to transfer to a team? No problem, your manager knows they're going to get someone who's been through hell and is able to deliver. Want to join another company? Great, "Senior Engineer, Google" is an indisputable mark of quality, you'll at least get an interview.
If there's one thing I've learned in my time here, it's that false positives are way more costly than false negatives. Hire someone who can't do the…
What's missing in all these replies -- it depends on who you are :)
If you have experience and specialized skill, it can be worth it to go to Google / big tech. You can apply your skills (for considerable profit), and learn from others with different specialized skills. You can work on highly technical things that are difficult to find elsewhere.
If you're inexperienced or fresh out of college, I would say it's not worth it. You'll probably have a bad experience (and I've talked to multiple young people who this has happened to).
Google was good for inexperienced hires when I joined (2005), but it isn't anymore.
You'll learn more elsewhere in 2022. In fact, I'd strongly suggest that you'll learn the WRONG lessons at big tech. The real problem in those jobs is learning to navigate bureaucracy, rather than learning how to build things.
I talked to people who basically didn't get to build anything that anybody used for the first 5 years of their career, which IMO is basically a death sentence for an engineering career. They just shifted among cancelled projects and didn't learn anything. All their work was thrown away.
Good blog post about that:
https://mtlynch.io/why-i-quit-google/
https://news.ycombinator.com/item?id=16483241
(and the author was apparently experienced, so these bad jobs aren't limited to fresh college hires)
Michael,
You are an inspiration. I have been following your journey since your post about quitting Google hit the HN front page. And what a wild ride it has been.
You tried many projects (https://mtlynch.io/projects/), and it took a while for you to find your winning idea. And I have read each of your retrospectives on TinyPilot (https://mtlynch.io/retrospectives/) and know that it wasn't easy.
Your journey shows how hard it is to build a business (especially hardware-based), but with discipline and perseverance, it's definitely possible to create one as a solo founder.
I also have a business idea that I would like to work on, but I am not ready to quit my full-time job yet. I have a few questions for you:
1. Have you always been so disciplined in life? If not, how did you improve it? 2. As you shared here (https://mtlynch.io/solo-developer-year-1/), doubts are natural when you haven't succeeded yet; how did you keep going? Did you ever come close to giving up and going back to corporate America? 3. I believe you have a partner; how did this affect your relationship with your partner? 4. Knowing what you know now, what would you do differently?
If you are ever in NYC, please hit me up; I would love to buy you a drink and chat more in person.
>As long as engineers are paid based on salary/wages this will always be the case, and has been the case in every company I've worked with.
I don't think this is 100% true, and the problem you are describing doesn't necessarily follow the cause you put forth.
Problem: Engineers do not work through tasks quickly because they aren't rewarded for completing tasks.
Solution (hypothetical): Reward engineers for completing certain tasks.
Problem: How do you value how much a task or feature is worth?
Solution (hypothetical): A task's value is correlated with the impact on the business's bottom line.
Anyone who's worked at a large SV tech firm can see the problem coming - engineers will only want to work on valuable, front facing tasks, and maintenance and technical debt tasks never get cleaned up. For example, Google[1], ties their promotion system to the value of the tasks you have done at Google - which obviously leads to a lot of gaming the system to increase your worth. So while I agree there might be a motivation problem, I don't think it's clear cut that the compensation model is the solution.
https://mtlynch.io/why-i-quit-google/
> A human might add one or two items to a list, decide it's now too long, and make 1 line into 10 lines.
At which point I tell him to split formatting and actual changes into different commits (see https://mtlynch.io/code-review-love/).
> I get that you don't like using black - and that's fine! I don't use black on my project either.
Well according to this comment, it's because we are noobs: "the people that disagree just haven't figured out that they're wrong yet"
> But it seems like you're trying to find some other reason to reject black, and constructing hypotheticals that don't make any sense.
After the n-th time I have to re-setup the entire virtual env on a different branch just to re-run black and isort to backport a fix to a release branch… it does get tiring.
I presume most people here just do websites and don't really have a product that is released to customers who pay to support old versions for years, so black changing syntax is a 1 time event rather than a continuous source of daily pain.
But it seems the commentators here don't have the experience to know there might be a use case they didn't think of.