As was foretold, we've added advertisements to the forums! If you have questions, or if you encounter any bugs, please visit this thread: https://forums.penny-arcade.com/discussion/240191/forum-advertisement-faq-and-reports-thread/
Options

Pull requests and imposter syndrome

CelestialBadgerCelestialBadger Registered User regular
I’m a coder. I recently joined a new company and all was well for a few months, until we started a thing where we could no longer push completed features to master, but must now submit a pull request for comments from the entire team before merging.

This is not something I ever experienced before and it’s causing me a lot of anxiety. Every time I write a line of code I second guess myself. I think “What would x think of this? What would Y comment? It’s severely reducing my code output without noticeably increasing quality and 100% reducing my job satisfaction.

I was feeling pretty great about my code until this happened. It’s absolutely miserable but I don’t feel I can complain as I’d basically be saying “I can’t take criticism.”

Is this just the way the world is now? How does this process work at other companies?

«1

Posts

  • Options
    Inquisitor77Inquisitor77 2 x Penny Arcade Fight Club Champion A fixed point in space and timeRegistered User regular
    Are you being singled out, or is this a new SOP for everyone? Code review is pretty standard, but pull requests from literally everyone before merging seems...onerous.

  • Options
    JasconiusJasconius sword criminal mad onlineRegistered User regular
    if it's a policy that applies to everyone you'll find that most people will not participate anyway

    for as much as you don't want your code looked at, many people also don't to be "that guy" commenting on everyone else's work

  • Options
    PowerpuppiesPowerpuppies drinking coffee in the mountain cabinRegistered User regular
    Yeah I've never been able to submit code without it being reviewed, even when I was the most senior person. There's always been a lot of rubber stamp approval.

    sig.gif
  • Options
    CelestialBadgerCelestialBadger Registered User regular
    This is for everyone, not just me.

    I tried not commenting on others work when this pull request thing started because I felt that it was bound to create office strife. But one co-worker I’ve had tension with in the past has started minutely commenting on my code. I find it hurtful, whether positive or negative comments. Makes me feel like I’m trapped in a game of office politics.

    I never worked at a place with this method of code review in the past. It’s quite new to me. I feel that if someone has a problem with my code they should raise it with me privately, not pick it apart in front of everyone. But that’s not the process, of course.

  • Options
    DarkewolfeDarkewolfe Registered User regular
    Honestly, a lot of the bigs do public feedback in some way. The idea is that since everyone is there, everyone is participating, therefore it's not targeted and everyone benefits. Rather than take it personally, is it possible to use this as opportunity to gain mentorship from your peers?

    What is this I don't even.
  • Options
    CelestialBadgerCelestialBadger Registered User regular
    I have tried engaging the other coders in discussion about good coding practices, but they feel that it is distracting and prefer to critique finished code. Emotionally, this is very hard for me. I like to figure out best practices beforehand and implement them confidently, not guess and then be publically critiqued afterwards. Ultimately I guess we learn either way, but I’m miserable.

  • Options
    Irond WillIrond Will WARNING: NO HURTFUL COMMENTS, PLEASE!!!!! Cambridge. MAModerator mod
    Code reviews on PRs are standard at everywhere I’ve worked at. It’s probably worth reading up on best practices for whatever language you’re working in. If Java, Bloch’s Understanding Java is invaluable.

    Wqdwp8l.png
  • Options
    a5ehrena5ehren AtlantaRegistered User regular
    The practical rate of code review in the environments I've been in is about zero, especially if everyone has merge privileges anyway.

    Just start shouting about "VELOCITY!" and ignore the guy who is picking over your code because they're an asshole. You don't have to act on the feedback.

  • Options
    a5ehrena5ehren AtlantaRegistered User regular
    edited October 2018
    That said, your attitude about this isn't exactly healthy - you should be able to confidently write code like you have been while learning to recognize and take constructive feedback and ignore the stuff that doesn't matter.

    If you're afraid implementing something basic like code reviews is going to cause "strife", it's a sign of either excessive anxiety on your part or an incredibly unhealthy office culture.

    a5ehren on
  • Options
    SmrtnikSmrtnik job boli zub Registered User regular
    We have code reviews of this style on all the projects in our program, and it leads to improved code quality because for every 10 pull requests that have no issues and require no comments there is one where the writer made some silly mistake they didn't catch (because they just implemented some new feature or fixed a big big and there is hundreds of changed lines) that is cought by someone else and the bug is not introduced into master.

    The reviews are only visible to the team that's working on a specific project (same end executables, essentially) not everyone at the company or even everyone on the program (family of projects related by funding and some interfaces to each other). Anyone can merge on a pull request provided at least two people other than the author have approved it and it has passed the continuous integration build (the branch compiles and runs through all the unit tests with no issues). When we get a new member on the team we temporarely turn on the rule that says one of the reviewers has to be the software lead for that project. The only way to merge into master is via these pull requests, other branches can be merged into freely.

    If we are doing something tricky that merits explanation as to why but doesn't merit being a code comment, we pre-comment our own pull requests to explain it to the reviewers.

    steam_sig.png
  • Options
    Inquisitor77Inquisitor77 2 x Penny Arcade Fight Club Champion A fixed point in space and timeRegistered User regular
    There should be clear guidelines and best practices in place beforehand. Part of the reason to have code review is to standardize the structure and organization of code so that it is more easily legible and maintainable, especially by newcomers. There is also the issue that if they are having literally everyone review everyone else's code, it is practically impossible to consolidate all of the feedback you will receive coherently without some guidelines in place. Typically, an architect takes on the role of establishing best practices and arbitrating differences of opinion (assuming that's even necessary).

    If they're just having everyone do code review on everyone else and they aren't actually investing in the additional work to align expectations and resolve conflicts of opinion consistently then the whole exercise is a waste of time and I suspect very few people will actually do it rigorously. There should be a long term plan in place to eventually get everyone to a point where they can all look at a problem and come up with the same general solution with the same general pattern - even if it isn't their own personal super special way of doing it, they can all speak the team's "language" and code accordingly.

  • Options
    djmitchelladjmitchella Registered User regular
    Some interesting discussion about code reviews here (both in the linked article and the comments):

    https://news.ycombinator.com/item?id=18035548

  • Options
    shadowaneshadowane Registered User regular
    Yeah, code reviews have always been common where I've worked and my current employer does it the same way yours does. I think it's important to stop thinking of the code review as a critique of you instead of just someone checking over your work. Honestly, I enjoy code reviews because I often learn something new from it.

  • Options
    Inquisitor77Inquisitor77 2 x Penny Arcade Fight Club Champion A fixed point in space and timeRegistered User regular
    Right - nobody produces perfect code the first time by themselves. That's an impossible standard. If the goal of the team is to produce high-quality, functional code, then peer review of some kind should be a matter of course, not exception. The point is that someone else catches issues before it gets to the user/customer. This makes everyone look good because people aren't complaining about your shitty, bugged product. The customer doesn't care whether Bob or Jane made the mistake - they just care that they can't get their shit done.

    By-and-large failure and success are team metrics, not individual ones. Similarly, it's not up to any one individual to determine coding standards by themselves by mere fiat. The team should have had discussions on how they want to code and what standards they want to hold each other to - peer review isn't an excuse to be a dick to someone because they prefer tabs instead of spaces [insert Silicon Valley clip here]. And ideally the team receives very quick feedback from product/users/customers as to whether those standards hold up over the long term, and are constantly adjusting accordingly.

    If nothing I am describing is taking place then whatever system your team has implemented is a giant waste of time and introduces yet another point of conflict for absolutely no benefit. But if people have had discussions about this, and there are things like codified working agreements and standards in place, and people are trying their hardest to both hold each other accountable while not taking criticism personally, then it will probably work as intended.

    Perhaps this article will be helpful: http://www.thagomizer.com/blog/2017/06/15/you-are-not-your-code.html

  • Options
    CelestialBadgerCelestialBadger Registered User regular
    There were no coding standards defined. We started a coding standards document today which makes me feel a lot better.

  • Options
    basic humanbasic human Registered User regular
    The thing that I see people get ripped a new asshole over is not usually coding standards but rather improper implementations or no unit tests, or high coupling and low cohesion of components.

    I remember one guy thought he would be Very Smart by DRYing up a lot of repetitive code in various places and replacing methods that were basically copied and pasted. While he did DRY up a lot of code what he didn’t realize is that he had now coupled a bunch of unrelated things through his DRY code, and when their behaviors had to change individually his generalized methods were no longer suitable and a lot of his work had to be undone to create a proper separation of concerns. His pull request got through but in the end people realized it was a huge mistake. Fuck!!!

  • Options
    CelestialBadgerCelestialBadger Registered User regular
    So what’s the point of pull requests if they don’t catch big mistakes like that?

  • Options
    basic humanbasic human Registered User regular
    So what’s the point of pull requests if they don’t catch big mistakes like that?

    People get complacent and it’s not immediately obvious it’s a bad idea. It looks like well written code, reduces the lines of code in the overall project, but then one day you just wake up and realize it’s a nightmare.

  • Options
    SmrtnikSmrtnik job boli zub Registered User regular
    So what’s the point of pull requests if they don’t catch big mistakes like that?

    Just because you have a process it doesn't mean everyone involved is working perfectly.

    Pull requests increase chances of good code, they don't guarantee it. For all you know the reviewers of that request were tired, or under pressure to review 5 other requests plus work on their own code, or were lazy, or didn't see some part of it, or just plain didn't think of all the ramifications. Guess who else didn't think of all the ramifications? The author.

    steam_sig.png
  • Options
    kaliyamakaliyama Left to find less-moderated fora Registered User regular
    edited October 2018
    Following a coding standards guide is fine but what you want is a document where if you comply with it you won’t be criticized for your code. If you comply with the guidelines but still fuck something up or miss a broader implication of what you do, you will still be critiqued for it. That’s fine you should expect to screw things up periodically. The whole point of this process is to identify mistakes while they are easy to fix. Your goal is to minimize mistakes and keep your error rate as low as possible while moving at the necessary speed.

    kaliyama on
    fwKS7.png?1
  • Options
    SmrtnikSmrtnik job boli zub Registered User regular
    edited October 2018
    Recent things my coworkers pointed out reviewing my code in a pull request (not all same pull request. I generate 1 - 10 per week depending on what the tickets are):
    - "you keep declaring these ad-hoc, shouldn't we have a centralized place for this sort of thing". Me: "good point, we should, let me write up a new ticket for that since it's somewhat beyond the scope of what i was originally doing here."
    - "if you use this functional interface here you can turn this weird loop into a stream that's way more readable" me:" good idea, let me update the request"
    - "why are you doing this this way, looks strange?" Me: because the requirement says blah blah, but note the word "may". Them: "ok but what about blah blah". Me: "it is kind of ambiguous. Let's check with the customer". A couple of emails later and it turns out we are both wrong (but i was less wrong), and we found out what was right then and there instead of 6 months later from an end user.
    - "this refactor actually changes the functionality of what's going on here if you pass on this specific condition". In some cases my response was "oh snap i hadn't considered that, thanks", and in at least one case it was "yeah i looked up what this was supposed to be doing and 3 years ago when we wrote it we were dumb. The new way is how it should have been all along". And we all learn something.

    Smrtnik on
    steam_sig.png
  • Options
    CelestialBadgerCelestialBadger Registered User regular
    Man, that sounds horrible to me. I mean, learning things is great, but that sort of constant criticism is going to make me a nervous wreck.

  • Options
    DarkewolfeDarkewolfe Registered User regular
    edited October 2018
    Then you just need to work on your ability to take constructive criticism in the workplace, unfortunately. Those are really good, positive, normal things at work. Either Smrtnik is learning, or Smrtnik is teaching something valuable in each of them.

    Darkewolfe on
    What is this I don't even.
  • Options
    shadowaneshadowane Registered User regular
    Man, that sounds horrible to me. I mean, learning things is great, but that sort of constant criticism is going to make me a nervous wreck.

    Yeah if you think that's bad, I'm sorry, but it's something you have to work on. Nothing in Smrtnik's post seemed out of the ordinary or rude.

  • Options
    CelestialBadgerCelestialBadger Registered User regular
    edited October 2018
    I wasn’t saying Smrtnik was rude. That sort of misinterpretation due to the lack of nuance in text is precisely what I’m worried about with this pull request thing. It seems designed by a sadist to make it almost inevitable that both I will misinterpret things as hypercritical of me, and so will others misinterpret what I write. My co-workers also seem very sensitive and have misinterpreted what I regard as plain questions as hostile already.

    As a person who most certainly suffers from “imposter syndrome” I’m very sensitive about my code and struggle with shame with every line I write. I don’t want to be on an emotional rollercoaster of constantly seeking validation from my co-workers and fearing their criticism. It is emotionally unhealthy for me and is causing stress. Perhaps I will get used to it.

    CelestialBadger on
  • Options
    SmrtnikSmrtnik job boli zub Registered User regular
    It's not validation it's making sure you team puts out the best code now so you don't have to fix it later. May still flub it but the chances are better.
    I'm not sure what more to tell you.

    Did you read the "you are not your code" link?

    steam_sig.png
  • Options
    CelestialBadgerCelestialBadger Registered User regular
    That’s a robotic way of looking at it. Optimum code, beep-boop. I am a human. It makes me unhappy to think that every line of code I write will be scrutinized for errors by my colleagues. I don’t want to do the same back to them either, as my impression is that they are just as sensitive (if not more) as I am and I don’t want to hurt them or create conflict. I respect their code. They are competent professionals. I assume that if they did it a different way than I would have, they had a good reason. I assume that if they wanted my advice, they’d ask. I certainly ask them!

    I have already been skimming their commits, and if anything they did severely clashed with what I did, I would have told them. But it never has.

    I figure this pull request thing is one of those code fads, that come and go. It seems toxic, since it is shifting discussion from positive “pre-planning and discussion” to negative “blame”. It’s not “How should I do this?” (Neutral) but “Why did you do it that way?” (Can be interpreted as hostile, wastes time implementing things the wrong way.)

  • Options
    Super NamicchiSuper Namicchi Orange County, CARegistered User regular
    edited October 2018
    if your team is turning this process into a method to wage quiet social/political war on each other, did you stop and consider your environment and coworkers are toxic and not the process?

    none of this seems particularly offensive, and my job uses the exact same process for config management

    my team and the config management team also have a great working relationship as people though, so when one of them says “hey your syntax is bad, rejected” we know it’s not because they’re pissing in our Cheerios, it’s because what we merge affects literally our entire infrastructure

    Super Namicchi on
  • Options
    Super NamicchiSuper Namicchi Orange County, CARegistered User regular
    furthermore if you are not confident in your skills to the point it’s causing you severe anxiety, and you mention a deep issue with impostor syndrome, it might be worthwhile to hit up some counseling and therapy!

    regardless of whether or not this process is or is not toxic, you have an underlying issue affecting your mental health and that is definitely real and detrimental so you should see someone to help work through it

  • Options
    PowerpuppiesPowerpuppies drinking coffee in the mountain cabinRegistered User regular
    That’s a robotic way of looking at it. Optimum code, beep-boop. I am a human. It makes me unhappy to think that every line of code I write will be scrutinized for errors by my colleagues. I don’t want to do the same back to them either, as my impression is that they are just as sensitive (if not more) as I am and I don’t want to hurt them or create conflict. I respect their code. They are competent professionals. I assume that if they did it a different way than I would have, they had a good reason. I assume that if they wanted my advice, they’d ask. I certainly ask them!

    I have already been skimming their commits, and if anything they did severely clashed with what I did, I would have told them. But it never has.

    I figure this pull request thing is one of those code fads, that come and go. It seems toxic, since it is shifting discussion from positive “pre-planning and discussion” to negative “blame”. It’s not “How should I do this?” (Neutral) but “Why did you do it that way?” (Can be interpreted as hostile, wastes time implementing things the wrong way.)

    i once spent a couple weeks writing something in C++ only to have the first review comment be "wouldn't it be better to move this over to the python side?"

    I said shit, you're right, and redid it on the other side of the interface, throwing my work away. It wasn't hostile or blame seeking and I wasn't offended. It would have been better to catch it before I wasted time implementing it the wrong way, but once that ship has sailed, it's still worth redoing it the right way.

    You get better code if you check each other's work, so that's what's best for the company. If other people are also bothered by the existence of code reviews, then there may be a culture problem at your gig that won't go away no matter how healthy your personal attitude toward code reviews becomes, and that's something that really your bosses owe it to you to fix in an ideal world. That said, I think your original instinct that you may want to work on taking criticism better is probably a good instinct.

    sig.gif
  • Options
    CelestialBadgerCelestialBadger Registered User regular
    edited October 2018
    I would much prefer to discuss the correct language beforehand rather than catching the error afterwards. If the team is communicating so badly that no-one noticed that, there are enormous problems. I’d be really annoyed that people let me waste weeks on the wrong solution without so much as a “hey, what you working on?”

    That’s exactly what I’m talking about with this method of communication being a post-facto “blame” method of communication rather than a constructive “pre” method of communication. Better to communicate *beforehand* than rely on catching errors afterwards.

    You may be a perfect human being who doesn’t mind wasting weeks, but I would be fuming.

    CelestialBadger on
  • Options
    CelestialBadgerCelestialBadger Registered User regular
    We do daily stand-ups. I think we’d manage to notice someone spending 2 weeks on entirely the wrong thing.

  • Options
    LaOsLaOs SaskatoonRegistered User regular
    edited October 2018
    I don't know that there's anything in implementing this pull requests plan that prevents you and your team from also doing discussion beforehand, outside of this review process, or even as you are working on things that are all the methods and conversations you say you'd prefer to have.

    You can do both.

    LaOs on
  • Options
    HeartlashHeartlash Registered User regular
    How big is your team and do you trust your boss/supervisor?

    In general, while this stuff can be scary, it can also be an opportunity to get everyone working together much better. That's only if leadership works hard to make it into that. If they aren't doing that, there may be a way to manage up to steer them in that direction.

    Also, just in general, constructive criticism is a powerful way to make yourself into a better developer. The removal of the word "constructive" can make it feel scary and ego-bruising, but if you are so constantly afraid of failure or mistakes that you never want to accept external invalidation, then you are going to lock yourself into a stagnant place. A fire being lit under you may look scary, but there have been many times where similar situations have made me do things I didn't think I was capable of, and removed a LOT of fear for future endeavors.

    One of the best ways to prove to yourself that you aren't an imposter is to make it through this exact type of adversity with your ego intact.

    My indie mobile gaming studio: Elder Aeons
    Our first game is now available for free on Google Play: Frontier: Isle of the Seven Gods
  • Options
    SmrtnikSmrtnik job boli zub Registered User regular
    tat people let me waste weeks

    How big are your pull requests? If you are working on one thing for weeks it sounds like your scrum Master (or equivalent. Software lead) didn't break down work (with the team, in a planning meeting) far enough.

    No daily standup meeting? Do you have tickets for each issue you work on that everyone involved comments on?

    steam_sig.png
  • Options
    DaenrisDaenris Registered User regular
    Does everyone's code sometimes contain bugs: Yes. Would some of these bugs be caught by a pre-release review by eyes other than the person who coded it: also Yes. Even beyond the questions of improving code style or implementing standards or whatever else, this seems sufficient reason to me for pull requests to be done, and it has frequently done exactly that in our group, and is a completely separate issue from discussing things before/during the actual coding, which also happens. I'd rather someone catch bugs during review before the code gets released to end users and we have to start issuing apologies and patches.

  • Options
    Inquisitor77Inquisitor77 2 x Penny Arcade Fight Club Champion A fixed point in space and timeRegistered User regular
    There should be grooming/refinement/planning going on regularly to plan work out and come to consensus on how to solve problems. There should also be stand-ups to discuss progress and roadblocks. In both of those events there are opportunities to prevent work from being wasted and to preclude having difficult discussions after someone has already invested a lot of work and/or ego into a particular solution. They also help to ensure that the team is working together to develop the best possible solution.

    But none of those things are mutually exclusive with also performing regular peer review to ensure that work is being done, while in progress, to the standards that the team has agreed to before the work started.

    It does sound like you have some challenges with anxiety which may make this kind of process difficult to work within. It also sounds like you are not familiar with this kind of working process, and that your company has either assumed you are or they themselves are also unfamiliar with it and are not implementing things properly.

    At the very least, kicking off a code review process without getting everyone on board with what constitutes valid feedback is probably going to cause unnecessary friction. If you have concerns here then you could bring them up with your supervisor or the scrum master (assuming one exists).

  • Options
    CelestialBadgerCelestialBadger Registered User regular
    Smrtnik wrote: »
    tat people let me waste weeks

    How big are your pull requests? If you are working on one thing for weeks it sounds like your scrum Master (or equivalent. Software lead) didn't break down work (with the team, in a planning meeting) far enough.

    No daily standup meeting? Do you have tickets for each issue you work on that everyone involved comments on?

    That was me commenting on another post from a guy who didn’t pick up that he was implementing in the wrong language until someone commented on his pull request. He seemed to think this was a point in the favor of the system. I thought it was the opposite.

  • Options
    CelestialBadgerCelestialBadger Registered User regular
    edited October 2018
    Heartlash wrote: »
    One of the best ways to prove to yourself that you aren't an imposter is to make it through this exact type of adversity with your ego intact.

    Man, that’s harsh. The “throw ‘em in at the deep end” view of swimming lessons.

    Development can get this sort of macho “if you can’t take it you’re a pussy” attitude and I don’t thrive in that environment.

    (That’s not an insult to people who do thrive in that environment of course: we are all different)

    CelestialBadger on
  • Options
    Inquisitor77Inquisitor77 2 x Penny Arcade Fight Club Champion A fixed point in space and timeRegistered User regular
    @CelestialBadger if I can ask, do you have diagnosed issues with anxiety? If you are seeing a therapist, this is a great topic to discuss with them, and they may also have tools to help you. They may also have tools that you can bring to any discussions with the team about how to approach these kinds of practices that can help to mitigate or preclude the flaws that you're identifying.

    Peer review is intended as a non-confrontational process. The point isn't to get in a room and argue, or to make an escalating series of passive-aggressive (or just plain aggressive-aggressive) comments to each other on Git/Jira/Slack/etc. There are best practices that can be implemented which can help to ensure that the process is as constructive as possible. And as others have pointed out, if it does devolve into a toxic mess then that's more indicative of the culture than of the process itself.

    For example, as brought up earlier in the thread, a common approach people use is to couch their feedback in the form of a question rather than as a statement of fact. "Did you consider using Python?" instead of, "You should've used Python" can get you to the same point while being received much more readily. Your issues with the timing of the feedback are correct (in that something this large should come sooner rather than later), but the truth of the matter is that sometimes things change or sometimes people miss things, and it's better to operate in an environment where you can bring up this kind of thing before it gets to the end user.

This discussion has been closed.