• magic_lobster_party
    link
    fedilink
    1378 months ago

    Had a coworker who was a bit like this. They were tasked to do one simple thing. Required a few lines of code change at most.

    They end up refactoring the entire damn thing and introduced new bugs in the process.

    • @ripcord
      link
      148 months ago

      Was there much value in the refactoring, like tech debt addressed?

        • @[email protected]
          link
          fedilink
          258 months ago

          Or, if the team does allow refactoring as part of an unrelated PR, have clean commits that allow me to review what you did in logical steps.

          If that’s not how you worked on the change than you either rewrite the history to make it look like you did or you’ll have to start over.

          • @BrianTheeBiscuiteer
            link
            28 months ago

            Very good point. We often do one PR per story so people tend to think that’s a limit.

        • nick
          link
          fedilink
          88 months ago

          You should refactor as needed as you go because refactoring cases are never gonna be prioritised.

          • @[email protected]
            link
            fedilink
            English
            38 months ago

            Not with that attitude they won’t 😛

            Refactoring in PRs just makes it more difficult to review. “Do these lines belong to the goal nor not?”. Also, we’re human and miss things. Adding more text to review means the chance of missing something increases.
            Especially if the refactored code isn’t just refactored but modified, things are very easy to miss. Move an entire block of code from one file to another and make changes within = asking for trouble or a “LGTM” without any actual consideration. It makes code reviews more difficult, error-prone, and annoying.

            Code reviews aren’t there to just tick off a box. They are there to ensure what’s on the tin is actually in it and whether it was done well.

            CC BY-NC-SA 4.0

            • nick
              link
              fedilink
              38 months ago

              In my experience I haven’t had an issue because usually the refactorings are small. If they’re not I just hop on a call with the person who wrote the MR and ask them to walk me through it.

              In theory I’d like to have time to dedicate solely to code health, but that’s not quite the situation in basically any team I’ve been in.

              • @[email protected]
                link
                fedilink
                English
                18 months ago

                I haven’t had any trouble separating refactors PRs from ticket PRs. Make the ticket PR, make a refactor PR on that ticket PR, merge the ticket PR, rebase refactor PR on master, open ticket PR for review, done 🤷

                CC BY-NC-SA 4.0

          • @BrianTheeBiscuiteer
            link
            18 months ago

            I have a rule about this (not that I don’t break it at times). I only refactor in an unrelated story if it doesn’t delay deliverables and existing tests cover the code.

            And you’re generally right about tech that not being prioritized, but you should have a talk with your product manager/owner to strike a deal for some small percentage of your work to include tech debt. We were able to convince ours that it was otherwise affecting our velocity.

      • magic_lobster_party
        link
        fedilink
        68 months ago

        A tiny bit of value, but definitely not worth the pain and effort. It wasn’t exactly any technical debt that hindered our development.

        We had other places with way more pressing technical debt that could’ve been focused on instead.

      • @[email protected]
        link
        fedilink
        English
        48 months ago

        I hear you, but they should MVP the ticket, close it, then concisely collar the PM/lead and say “I know how to make this better and am hungry to do it. Let me address some tech debt next sprint. I got this and will keep it timeboxxed. I’ll also ensure my changes pass QA before coming to you”

        • @kameecoding
          link
          98 months ago

          Refactors should be a natural part of development or you will have a shit code base

          • @[email protected]
            link
            fedilink
            English
            108 months ago

            Sure, now imagine you’ve been obligated to adopt a legacy codebase.

            Life isn’t a classroom.

            • @kameecoding
              link
              18 months ago

              That’s pretty much all I have been doing in my 8 year career

  • @sunbytes
    link
    1018 months ago

    sets the diff to ignore whitespace

    Lines changed: 3

    • kamen
      link
      338 months ago

      The pipeline should handle formatting. No matter how you screw it up, once you commit, it gets formatted to an agreed upon standard.

        • @[email protected]
          link
          fedilink
          78 months ago

          Yeah I think that’s what he meant. You don’t want CI editing commits.

          I use pre-commit for this. It’s pretty decent. The major flaws I’ve found with it:

          • Each linter has to be in its own repo (for most linter types). So it’s not really usable for project-specific lints.

          • Doesn’t really work with e.g. pyright or pylint unless you use no third party dependencies because you need a venv set up with your dependencies installed and pre-commit (fairly reasonably) doesn’t take care of that.

          Overall it’s good, with some flaws, but there’s nothing better available so you should definitely use it.

          • @[email protected]
            link
            fedilink
            18 months ago

            I’ve used pre-commit pretty extensively over the years and I’m confused.

            Each linter has to be in its own repo (for most linter types). So it’s not really usable for project-specific lints.

            Not sure what you mean by this. I have pre-commit set up to do linting in several different projects, and even have it running multiple differently-configured lint jobs in the same repo.

            Doesn’t really work with e.g. pyright or pylint unless you use no third party dependencies because you need a venv set up with your dependencies installed and pre-commit (fairly reasonably) doesn’t take care of that.

            Again, I have pre-commit set up on multiple repos running pylint with multiple different plugins. Pre-commit absolutely does take care of setting up venvs with needed dependencies.

            • @[email protected]
              link
              fedilink
              18 months ago

              Not sure what you mean by this. I have pre-commit set up to do linting in several different projects, and even have it running multiple differently-configured lint jobs in the same repo.

              I don’t mean using lints, I mean writing custom ones. Say you have a custom lint you want to use but it only will ever be used for that specific project. You can’t just put the lint code in a subdirectory. It has to go in a separate repo.

              Pre-commit absolutely does take care of setting up venvs with needed dependencies.

              Again I think you might be misunderstanding. It will install pylint fine, but if your project does e.g. import yaml, it’s not going to set up a venv and install pyyaml for you.

              • @[email protected]
                link
                fedilink
                1
                edit-2
                8 months ago

                Say you have a custom lint you want to use but it only will ever be used for that specific project. You can’t just put the lint code in a subdirectory. It has to go in a separate repo.

                You can run locally defined hooks with pre-commit, just define them in the repo: local section of the .pre-commit-config.yaml, and have it run a bash/python/whatever script or something that invokes your custom linting, wherever it lives in your file structure.

                It will install pylint fine, but if your project does e.g. import yaml, it’s not going to set up a venv and install pyyaml for you.

                Yeah I misspoke/misremembered there. For Python based stuff, it uses the currently active virtualenv or your global python install, so it relies on you installing your own dependencies. Which isn’t really that big a deal imo, because you need to install those dependencies to run/debug/test locally anyways.

                • @[email protected]
                  link
                  fedilink
                  18 months ago

                  You can run locally defined hooks with pre-commit, just define them in the repo: local section of the .pre-commit-config.yaml

                  Sounds like you’re just googling it rather than actually speaking from experience. Suppose I have written a Python lint and it’s in my ci/lints/foo folder. How do I tell pre-commit that? (Hint: you can’t)

                  Which isn’t really that big a deal imo

                  For small Python projects, maybe not. The project I’m working on has multiple sub-projects and those each have their own venvs, pyproject.tomls, etc.

      • @sunbytes
        link
        38 months ago

        Some diff tools don’t handle indentation by default.

        So if you add a wrapper, it counts everything inside it as “changed”

        • kamen
          link
          28 months ago

          That’s what “toggle whitespace diff” is for.

        • kamen
          link
          English
          28 months ago

          Pre-commit hooks is a common approach to this, so that whatever is committed gets processed. Another possibility would be to set a bot on the repo to do automated commits after human-made ones, but that can get a little noisy.

    • @[email protected]
      link
      fedilink
      58 months ago

      Haha! Jokes on you! It was mostly gnu makefile calls to ruby scripts!!! You’ve just broken the build a million different ways!

      • @itsnotits
        link
        78 months ago

        Joke’s* on you

        (Short for “The joke is on you”.)

  • @[email protected]
    link
    fedilink
    658 months ago

    There was a guy I worked with that tended to want to unilaterally make sweeping changes.

    Like, “we need the user to be able to enter their location” -> “cool. Done. I also switched the dependency manager from pip to poetry”.

    Only a little bit of exaggeration

    • @[email protected]
      link
      fedilink
      288 months ago

      Some people, like me, are not built to be developers. I can sculpt code in any language I need for whatever problem I need to solve, but maintaining code over a long period of time, with others, is not my thing.

      The drive to do additional changes is just too high and the tendency for typos or obvious logic errors is too common. (There is one little improvement. It’s right there. One line up. Just change it now while you are in there…)

      I am not stupid and regard myself as a decent engineer but my brain is just wired in a more chaotic way. For some things that is ok. For developing code on a team, not so much.

      Security is the field I am most comfortable with because it allows for creative chaos. Rule breaking is encouraged. “Scripting” is much more applicable and temporary.

        • @Klear
          link
          28 months ago

          Now that’s just crazy talk.

      • @[email protected]
        link
        fedilink
        English
        98 months ago

        When using git and are working on a feature, and suddenly want to work on something else, you can use git stash so git remembers your changes and is able to restore them when you are done. There is also git add -p this allows you to stage only certain lines of a file, this allows you to keep commits to a single feature if you already did another change that you didn’t commit (this is kind of error prone, since you have to make sure that the commit includes exactly the things that you want it to include, so this solution should be avoided). But the easiest way is when you get the feeling that you have completed a certain task towards your goal and that you can move on to another task, to commit. But if you fail you can also change the history in git, so if you haven’t pushed yet, you can move the commits around or, if you really need to, edit past commits and break them into multiple.

        • @[email protected]
          link
          fedilink
          7
          edit-2
          8 months ago

          I do. Also, I am old(ish) so I have had many years to come to terms with what I can do well and where I struggle.

          In this case, I didn’t want to use it as a crutch or an excuse. After reading the number of awesome replies this morning, I realized I should have probably framed my comment differently.

          People here put some real time and effort into giving some solid advice and I didn’t expect that.

          Edit: As a pure example, this is the third or fourth edit of this comment. Words are challenging, and programming is very similar in that regard.

          • @UckyBon
            link
            3
            edit-2
            8 months ago

            Thank you so much for your reply. Your comment was so recognizable to me, and I’m in the process of being diagnosed with ADHD.

            Edit: I want to say that I do feel sorry for asking such a personal thing about you. I’m not young either, but just now coming to terms with it and figuring out that this is the reason why everything I do goes as it does. To recognize it in the wild is absolutely weird.

            • @[email protected]
              link
              fedilink
              2
              edit-2
              8 months ago

              No worries! I am generally very open about it. (Your comment was recognizable to me, actually.) There is a very specific non-malicious bluntness that comes with the condition, actually.

              But yeah, you have been practicing dealing with it your entire life. Treatment just helps a ton.

      • Avid Amoeba
        link
        fedilink
        6
        edit-2
        8 months ago

        I tell my young developers - the primary goal in software engineering is maintainability. Code reuse, encapsulation, abstraction, and myriad other concepts all contribute to ease of maintaining source code over the long term. Maintainability allows for easier, predictable feature addition and removal, with fewer changes, and by different people. You’re also a different person than the one you were months or years ago when it comes to software.

        • @[email protected]
          link
          fedilink
          38 months ago

          Did I already post in here about how he wrote a custom DSL instead of using the standard widely used ORM we use everywhere? Maintainability nightmare.

          He doesn’t work here anymore and now I have to either figure it out or rip it out. So far it looks like “rip it out” because it took less than an hour to swap in the orm, and now there’s just a lot less code needed.

      • @[email protected]
        link
        fedilink
        28 months ago

        Very relatable. Especially when it’s less effort to make the change than it is to try and ignore it. But it’s understandably harder for those who are reviewing your work.

        • @[email protected]
          link
          fedilink
          1
          edit-2
          8 months ago

          It’s even more cyclical. I usually can’t remember the reasons why I made the change to begin with.

      • @nutt_goblin
        link
        28 months ago

        I’m the same way. Chasing code changes through the codebase then fighting with an edit rebase stack trying to explode them into less-interlocked changes.

        It doesn’t always work, sometimes I am just committing a giant blob of changes at work on my project I near-solo maintain 💀

    • jelloeater - Ops Mgr
      link
      English
      28 months ago

      I mean, Poetry is a lot better then Pip. The only issue I see is that they broke some CICD stuffs farther up the chain.

      • @[email protected]
        link
        fedilink
        48 months ago

        It could be!

        But part of working as a professional on a team is communicating and achieving consensus. Just trying to make a change like that out of the blue is poor form.

        Also consider the opportunity cost: we had planned on getting XYZ done this week, and instead he spent a few hours on this and dragged a few people into a “do we want to change to poetry right now?” conversation

    • @BrianTheeBiscuiteer
      link
      18 months ago

      That wasn’t me, but that also used to be me. I learned to pick my battles, especially with complex code bases, and tried to keep scope creep in the name of improvement to like a dozen lines (provided it was fully tested).

      • @[email protected]
        link
        fedilink
        28 months ago

        I think it’s definitely a thing most people grow out of when they gain experience.

        My boss told me about how when he was new he rewrote a whole chunk of the front end. His boss gave him a talking to about how you can’t just go and do that when you’re working with a team.

        At an old job I just opened a PR to apply a code formatter to an internal project I wasn’t even a routine contributor to. PR was rejected and I learned a valuable lesson about talking and getting buy-in before making sweeping changes.

    • @shotgun_crab
      link
      21
      edit-2
      8 months ago

      .gitattributes is our best friend

    • @[email protected]
      link
      fedilink
      8
      edit-2
      8 months ago

      Automatic code formatter with company style rules for more consistency across all developers.

  • @SpaceNoodle
    link
    398 months ago

    As long as there’s less code than there was before, I’ll approve it

  • @[email protected]
    link
    fedilink
    268 months ago

    Last time somebody did this to me there were a lot of sit downs about how to properly chop up large scale code changes and why we don’t sit on our own branch for two months.

    “How long will this take to get in?”

    “Well, two weeks for me to initially review it, a week for you to address all the changes, then another week or so for me to re-review it… Then of course we have to merge in all the changes that have been happening in primary…”

    • @BrianTheeBiscuiteer
      link
      38 months ago

      Last time I got this PR I was like, “Okay, I’ll do my best, but you asked the guy that has like 30 mins a day to actually focus and look at someone else’s code AND yours isn’t the only PR I’ll have to look at this sprint. Have fun reminding me about this for the next week.”

  • @[email protected]
    link
    fedilink
    148 months ago

    Net removal of 1500 LoC…

    I’m gonna make you break this up into multiple PRs before reviewing, but honestly, if your refactoring reduced the surface area by 20% I’m a happy man.

  • @[email protected]
    link
    fedilink
    128 months ago

    Please, no, I get flashbacks from my 6-month journey (still ongoing…) of the code review process I caused/did. Keeping PR scope contained and small is hard.

    From this experience, I wish GitLab had a “Draft of Draft” to tell the reviewer what the quality of the pushed code is at: “NAK”, “It maybe compiles”, “The logic is broken” and “Missing 50% of the code”, “This should be split into N PRs”. This would allow openly co-develop, discuss, and steer the design, before moving to nitpicking on the naming, formatting, and/or documentation details of the code, which is likely to drastically change. Drafts do work for this, but the discussions can get uncomfortably long and convolute the actual finishing of the review process.

    Once both reviewer(s) and the author agree on the code design, the “DraftDraft” could be collapsed into a link in an normal Draft to be mocked next. The scope of such draft would be limited by the earlier “DraftDraft”.

  • @Olgratin_Magmatoe
    link
    English
    9
    edit-2
    8 months ago

    My first PR at my current job was about 130 files for the front-end, and about 70 for the backend. This hits close to home.

  • @[email protected]
    link
    fedilink
    98 months ago

    This does seem like a potential issue if the PR is itself implementing more than one vertical slice of a feature. Then it could have been smaller and there might be wasted effort.

    If the patches are small and well-organized then this isn’t necessarily a bad thing. It will take more than one day to review it, but it clearly took much more time to write it.