Comments by "Daniel Sandberg" (@ddanielsandberg) on "Why Pull Requests Are A BAD IDEA" video.
-
14
-
6
-
4
-
@OlleHellman The reason I'm asking is that basically everyone in this comment section seems to think that CI is a tool, running "checks" on a build server against your feature branches.
That is not CI, by definition.
You don't "run through CI".
You don't "have CI".
You don't "use CI".
You either do CI or you don't!
CI is a practice and a social contract *not* just a build server even though tool-vendors would like us to think so.
Everyone integrates their changes into the *mainline* , at least once per day (preferably more).
Unless it's merged into main and automatically verified, it's not integrated.
If you can't run a majority of these checks on you local environment before committing, you *can't do* CI.
Running checks against a feature branch is not CI.
Sorry, but I'm adamant about this because our industry has gotten into this bad habit of redefining things to mean "whatever we are doing right now".
- We installed Jira and have burnups, burndowns and user stories - we're agile.
- We created a new team called "DevOps" and hired "DevOps engineers" - we're DevOps.
- One write code, then someone else looks at the code, then we change the code, then we PR the code - we're pair programming.
- We are running Jenkins against "whatever we are doing with branches right now" - we're doing CI.
3
-
3
-
3
-
3
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
2
-
1
-
99% of all IT companies wouldn't know agile if it hit them in the face. Most companies thinks it's just a process and takes all the "easy parts" from scrum, skips the good parts from structured SDLC and ends up with the worst of two worlds. Thinking that burnups, burndowns, boards, jira, standups, story points, user stories, sprints, etc. makes them agile. They ignore all the technical practices from XP, CD, et al. (that is required to make it work) and then wonder why it didn't.
Then people come out on the other side saying "I hate agile". Like my grandpa - he refused to try pizza his whole life. A few weeks before he died we asked him why he never tried it - his answer? "It's just a pancake with ketchup and cheese!".
1
-
1
-
1
-
1
-
1
-
1
-
1
-
While I will try to answer this without purposely being offending, you may feel that way anyway.
Your job as a senior/lead is not to gatekeep, that is, to check everyone's work and approve of it.
You can't behave like a curling/helicopter parent and protect juniors from themselves all the time. The only thing you'll end up doing is holding back their learning and growth, and also teaching them to not rely on themselves.
You need to find a way of working where they can contribute, learn and make mistakes, without you handholding them, nor taking the company down in the process. I don't care what that is, as long as it's a temporary measure and not you gatekeeping everything (you might as well do all the work yourself in that case).
You should be able to find a way of working where in the end "the others" would make similar (or better) decisions as you would, even when you aren't in the room. After all, the job of a senior engineer is to create more senior engineers, not dissuade people and having them leave within a year.
Dave has another video here "A Guide To Managing Technical Teams" in which he calls your style "programming by remote control".
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
@prdoyle Wall of text incoming - duck and cover!
1. Sure, but it is not integrated until it's ON main.
2. Even if you rebase your branch, you still only check integration with what has made it into main this far. Everything else that is not on main is an unknown.
As an example: If everyone "merge into main" at the end of the day or end of sprint, you won't know if everything actually integrates until that time. That is way to intermittent and is similar to old school waterfall "integrate and test at the end", although at least it's a more frequent than once per year. If everyone merges their code into main several times per day - fine - but what do you need FB/PR for in the first place if it only lasts a couple of hours anyway? Seems like a lot of ceremony.
I have actually been there, twice, kind of - in a highly compliant industry. We had armies of testers, reviewers, configuration management people, merge bosses, process and branches, and yet we had very expensive production issues all the time. Then I took over as tech lead for the most certification-critical components. The only changes we made was that we skipped all the ceremony/merges/handoffs and started doing proper XP/CI/TBD and our response time became 10x better and our production issues went down by 2 orders of magnitude. That alone saved the company $2M per year. A few years later a bunch of managers decided that "everyone must do FB/PR because we have to be compliant (BS, yadda, blah) and we read on the internet that that is everyone else is doing so we should too" and it became dogma and enforced by people not doing the actual work. After that we had slowed down and were right back in the tank and half of us had left within a year.
*We didn't need FB/PR - we were doing better without them already!*
Because so many are used to treat version control as a kind of personal junk-drawer where we throw things into a branch, fiddling around for a while, have it being broken for hours/days, flaky and unstable and then pick up the pieces into a whole at the end, then squash merge and PR; they get stuck in that cycle.
1. This is often a sign of bad design or issues with the culture.
2. There is a world of difference between "half baked", "incomplete" and "messy crap" - in XP/CI the software should still always work properly.
3. Code reviews are primarily there for learning and feedback. Async blocking reviews actually slows the organization down and have questionable effect on the quality. And even so not all changes requires review and not all reviews have to be blocking - see Martin Fowlers 3 types of reviews "ship-show-ask". FB/PR proponents are stuck 100% on "ask". You can always refactor and improve things after the fact, after it's on main, and even after it's gone live. Something people seem terrified of.
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
It scales very well (given good tooling) Google is doing this - 20,000+ developers, billions of lines of code in a single repo, on a single branch. They do have review-gates, but there are no branches or pull requests involved as such. And the majority of checks are automated...
That the commit-build takes an hour has nothing to do with TBD or PR. That is always bad tooling, bad design and bad tests.
CI means the original as written, not whatever people redefines it as so they can put CI on their resumé. See wikipedia for example. Read Extreme Programming Explained.
Lot's of WIP and "not-done" changes waiting for review, checks, etc. is "not a good thing (tm)". I suggest reading The Goal by Goldratt and The Phoenix Project by Gene Kim, as well as other books in that space.
Management: "All hands on deck", "what do you mean, having two people at the same keyboard?", "Why aren't everybody busy, typing code? Do we need to fire people and trim the fat?", etc. Sigh. Yeah. I hear you. Get a new job or something.
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1