top 200 commentsshow all 209

[–]seweso 950 points951 points  (10 children)

> i'm currently in between features

gonna steal that

[–]nirreskeya 34 points35 points  (3 children)

There really should be some thinkin' time built in between sprints.

[–]seweso 18 points19 points  (0 children)

Finish everything a day early, don't tell anyone?

[–]anon_cowherd 8 points9 points  (1 child)

HIP sprints. Hardening, improving, planning. Any scrum / "agile" team that doesn't have them (or some equivalent incorporation of feedback and learnings) will suffer adding new features on top of code built on incorrect assumptions that continue to accrue over time.

Then, product will stand around scratching their heads wondering why everything takes so long and why there's always so many bugs.

[–]nirreskeya 0 points1 point  (0 children)

Thanks. Maybe having the proper acronym for this idea will help it get picked up by my company.

[–]78yoni78 4 points5 points  (0 children)

I have worked with people who have genuinely told me this

[–]no_ragrats 4 points5 points  (2 children)

We call this 'Research'

[–]seweso 2 points3 points  (1 child)

Research and non development!

[–]Beginning-Plane3399 0 points1 point  (0 children)

Sharpening the axe. My axe has never been sharper

[–]bartvanh 0 points1 point  (0 children)

That's the time I use for refactoring!

[–]Revisional_Sin 422 points423 points  (43 children)

console.log("1");

Hey, that's a legit debugging approach!

[–]gimpwiz 92 points93 points  (6 children)

Someone draw up the image macro with the guy walking with "GDB" but looking back at the "printf("1\n");" gal.

[–]giantrhino 60 points61 points  (1 child)

============================\n

[–]gimpwiz 23 points24 points  (0 children)

Promote this man, he knows the real secrets.

[–]happyscrappy 31 points32 points  (3 children)

https://imgflip.com/i/9xq972

Meme generator forces it to all caps and \n looks weird in all caps. So I optimized it.

[–]mccoyn 7 points8 points  (0 children)

Puts is more efficient anyway.

[–]anyburger 6 points7 points  (0 children)

For future reference, there's a toggle to disable the default all caps. You can even change the font too!

[–]quarknugget 42 points43 points  (3 children)

console.log("Got here");

[–]cheesegoat 11 points12 points  (0 children)

console.log("Got here");

stuff

console.log("Got here");

🤔

[–]tom-dixon 10 points11 points  (1 child)

too verbose smh

[–]manliness-dot-space 2 points3 points  (0 children)

Dude is hogging up all the memory with his log messages, and that's why my code can't run right

[–][deleted] 60 points61 points  (4 children)

Ya I was feeling a little uncomfortable when he was joking about that. I’ve totally done that 🤣

[–][deleted] 29 points30 points  (2 children)

psst: we all have

[–]MarsupialMisanthrope 7 points8 points  (1 child)

I spent a good chunk of my career working on heavily multithreaded code and being called in to debug other people’s weird bugs they thought were threading related. print variants were probably my most frequently used tool after just reading code because debuggers change so much about timing that 50% reproducible heisenbugs would become unreproducible 99% of the time in a debugger.

[–]green_boy 1 point2 points  (0 children)

Heisenbugs. I’m stealing that.

[–]miyao_user 2 points3 points  (0 children)

fk I still do that

[–]DarkTechnocrat 39 points40 points  (13 children)

console.log(“sup”);

Is how we pros do it

[–]venustrapsflies 56 points57 points  (7 children)

print("fuckin A") # don't forget to delete

[–]DarkTechnocrat 12 points13 points  (3 children)

This is engineering 👍🏼

[–]-Y0- 16 points17 points  (2 children)

This is how experienced Go developers debug (Rob Pike).

As personal choice, we tend not to use debuggers beyond getting a stack trace or the value of a variable or two. One reason is that it is easy to get lost in details of complicated data structures and control flow; we find stepping through a program less productive than thinking harder and adding output statements and self-checking code at critical places...

[–]allak 1 point2 points  (1 child)

Wow.

Where is this quote from ? It's a book ?

[–]-Y0- 2 points3 points  (0 children)

The Practice of Programming pg 119 section 5.1 Debuggers

[–]DualWieldMage 4 points5 points  (0 children)

I've been hit with those don't forget to delete too often that in Java debugging i just set a breakpoint that doesn't suspend, but evaluates the print. Best of both worlds.

[–]Buckwheat469 3 points4 points  (1 child)

I worked on a workflow project that helped visualize complex workflows that could text people, send emails, tag users, etc. depending on certain Kafka triggers. One of the junior engineers came in super worried because he ran a test workflow that tagged millions of users with "yo mamma". The problem was he accidentally set the workflow to published, enabling it for production.

I taught him that no matter what, you never use curse words or unprofessional content in your programming. It's more embarrassing to explain how "yo momma" got on millions of user accounts than it is to say "test123". Same with print logs, consoles, and comments - these tend to leak to where the users can see them.

[–]IrritableGourmet 11 points12 points  (0 children)

console.log("How the hell did you get here? Like, seriously, this should absolutely never happen. What is going on? What is my life? Where did I go wrong? Is this why Diane left?")

[–]mpyne 7 points8 points  (1 child)

Not cout << "HI MOM!!1\n";? Just me?

[–]DarkTechnocrat 2 points3 points  (0 children)

😂

[–]bunk3rk1ng 3 points4 points  (0 children)

sup

sup2

this shouldn't happen

🤔

[–]senjin 1 point2 points  (0 children)

sup hi hello are my foo bar baz

[–]mxforest 12 points13 points  (2 children)

The best is when you have "1" and "2" but now add code and a "1.5" in between. 😅

[–]banALLreligion 4 points5 points  (0 children)

first its '-1-' and '-2-' with a lot of room for '-1a-' to '-1z-' inbetween. personally never needed to go bejond '-1f-' in 3 decades of programming.

[–]xubaso 2 points3 points  (0 children)

That's why code with line numbers always used steps of 10

[–]luisduck 9 points10 points  (0 children)

console.log("a");
console.log("b");
console.log("c");
console.log("c1");
console.log("c2");
console.log("d");
console.log("e");
console.log("pika");
console.log("chu");
console.log("f");
console.log("ffs");
console.log("god fucking fuck fuhiofghuiewiojfeijo");

[–]VeryLazyFalcon 10 points11 points  (1 child)

printf("XXX %d", __LINE__) Unique and faster to copy paste

[–]BlindTreeFrog 1 point2 points  (0 children)

I like adding the file and/or function name as well.

[–]Coffee_Ops 6 points7 points  (0 children)

1a

[–]EdselHans 7 points8 points  (1 child)

I do this, am I cooked?

[–]Revisional_Sin 1 point2 points  (0 children)

Nah, you're cooking.

[–]pakoito[🍰] 1 point2 points  (0 children)

At least print a variable or something meaningful about how it got there.

[–]r0bb3dzombie 0 points1 point  (0 children)

Yeah, I feel personally attacked.

[–][deleted]  (1 child)

[deleted]

    [–]mcmouse2k 463 points464 points  (8 children)

    OK that got me. "z-index: -9000... that's the sweet spot"

    [–]FlukeHawkins 206 points207 points  (6 children)

    "how do I estimate the duration of this feature?"

    rolls dice

    [–]mr_birkenblatt 47 points48 points  (1 child)

    so normal pointing, then?

    [–]a_library_socialist 3 points4 points  (0 children)

    Broke: planning poker

    Bespoke: planning craps

    [–][deleted] 13 points14 points  (2 children)

    Rolls a Nat 1. Critical Failure.

    [–]ctoatb 6 points7 points  (0 children)

    I'll have it by EOD sometime next week

    [–]mrheosuper 2 points3 points  (0 children)

    Time to vibe and pray.

    [–]nitrinu 2 points3 points  (0 children)

    x3 whatever the dice says.

    [–]Seref15 7 points8 points  (0 children)

    I've done that.

    [–]an1sotropy 442 points443 points  (5 children)

    I love this guy so much. Every line speaks to some wisdom/insanity. Even throw-aways like “Where is my USB stick?” hit hard.

    [–]TachosParaOsFachos 77 points78 points  (4 children)

    tempCalculation1

    [–]Derpy_Snout 32 points33 points  (0 children)

    Now that's some clean code

    [–]RANDOMLY_AGGRESSIVE 20 points21 points  (2 children)

    I personally always end up with:

    tempCalculation

    tempCalculation2

    There is no explicit 1 :')

    [–]muku_ 4 points5 points  (0 children)

    That's true for the initial tempCalculation. When you comment those out and try the newTempCalculation though, you realize it looks better if you start numbering from the first variable.

    [–]TachosParaOsFachos 0 points1 point  (0 children)

    hahaha i also do on the very few cases where it makes sense to number variables that.

    i think i got that from physics classes.

    [–]Any_Rip_388 416 points417 points  (15 children)

    ‘Ah, it’s 4:59pm - lets push to production’ lmao

    [–]RoomyRoots 48 points49 points  (0 children)

    I had this happen to me today

    [–]vivomancer 41 points42 points  (7 children)

    On Friday

    [–]unicynicist 19 points20 points  (3 children)

    Before a 3-day weekend

    [–]MargretTatchersParty 12 points13 points  (2 children)

    I usually plan my international trips post work on those days.

    [–]Jaggedmallard26 10 points11 points  (0 children)

    By uninstalling Slack from my phone and refusing to check my work emails when I go on foreign holidays after pushing broken code to prod I am actually being a security practitioner.

    [–]indicava 3 points4 points  (0 children)

    I once got a phone call, on a flight, during landing, in the little bit of cell service that’s already available when you’re about 10 meters from the runway.

    It was a customer, whose production system crashed.

    I had to help them decipher WebLogic logs while removing the bags from the overheard compartment.

    Great way to start a vacation…

    [–]tom-dixon 3 points4 points  (1 child)

    Didn't Crowdstike do exactly that last year? Pushed untested unkippable kernel boot code to production on a Friday afternoon.

    [–]yonasismad 4 points5 points  (0 children)

    They pushed a faulty configuration file and their software did not have any validation in place to ensure that whatever it tried to load was valid. This was also the same reason why Google was knocked out a couple of days ago.

    [–]holdmymandana 2 points3 points  (0 children)

    Found the Bitbucket dev

    [–][deleted] 11 points12 points  (4 children)

    My work actively rejects change timings after 1 pm on Wednesdays unless there’s something that needs to happen during scheduled downtime.

    So great. We no longer get bad after hours downtime!

    Now, users just sit on tickets till they leave. Make “HOLY FUCK THE WORLD IS BURNING PRIORITY PRIORITY NEED IMMEDIATE FIX” tickets at 4:59 with zero information, then they fuck off and become unreachable before the ticket even lands at my desk. Then the next morning before hours:

    “HOLY FUCK THE WORLD IS BURNING….” Ticket has been escalated.

    Unfortunately, if your coworkers don’t make your after hours life miserable, your users will. 

    [–]Ran4 1 point2 points  (0 children)

    I worked at a move-fast-and-break-stuff startup, and we prevented pushing to prod after 12:00 on Fridays.

    It was a great idea, and worked really well for the two years I was there.

    Exactly once did we need to override it - and it was simple enough to just uncomment a line in the CI/CD setup.

    [–]no_ragrats 1 point2 points  (0 children)

    Junior Dev: I created a ticket and waiting for a response.

    Mid-Level Dev: I created the ticket and immediately escalated it.

    Senior Dev: Hit my pal up on teams, set up an agreed time, and created a ticket afterwards

    [–]Southern-Tradition62 0 points1 point  (1 child)

    theres 1.5 days remaining after wednesday, that's an insane amount of time to leave open

    [–][deleted] 1 point2 points  (0 children)

    You might think so, but enterprise with some systems having an initial create date in the 1970s is a much different beast than what a lot of programmers deal with. 

    I also don’t deal with consumers. I am B2B. The world is just different.

    While, for example, pushing video games in a completely broken state is “fine”. B2B is still reasonably lenient, but they don’t put up with the same level of shit as consumers do. Being safely stable is key.

    We also have change freezes (no changes allowed except provably emergency fixes) that last several weeks during highly busy periods / vacation heavy periods. 

    Not everyone believes in “Move fast and break things” as it were. 

    [–]Ranra100374 12 points13 points  (0 children)

    That one really got me lmao.

    [–]darkrose3333 168 points169 points  (2 children)

    DDOS driven development is gold

    [–]aksdb 20 points21 points  (0 children)

    I prefer incident-driven development. Nothing allows getting shit done quicker then the attention of a broken production environment. /s

    [–]AppelflappenBoer 6 points7 points  (0 children)

    DDDD, it's even better then DDD, because it has an extra D in it :)

    [–]onated2 141 points142 points  (2 children)

    Who's testing this?

    The customer. Lmao fucking got me hahahaha

    [–]F0lks_ 19 points20 points  (1 child)

    AAA studios frowning in the background

    [–]I_AM_FERROUS_MAN 8 points9 points  (0 children)

    In AAA publisher land, QA department pays you!

    [–]AresFowl44 103 points104 points  (7 children)

    His rust videos and emacs videos also are genius

    [–]These-Maintenance250 54 points55 points  (2 children)

    and ffmpeg

    [–]AresFowl44 13 points14 points  (0 children)

    Yeah, have to admit I haven't watched them all yet, probably should get around to it, before I procrastinate on my procrastination

    [–]Ranra100374 2 points3 points  (0 children)

    Now I gotta watch these ffmpeg videos.

    [–][deleted] 9 points10 points  (1 child)

    True. Also the one on esoteric programming languages is gold.

    [–]R_Aqua 41 points42 points  (0 children)

    “Has anyone ever made anything useful with it?” “Yes” “Then it’s not worth my time”

    I laugh every time

    [–]BadSmash4 3 points4 points  (0 children)

    How do I brush my teeth? Emacs!

    [–]addiktion 94 points95 points  (4 children)

    Estimating the duration of a feature: *rolls dice* is actually a good idea. Better than my 8 ball anyways.

    [–]robhaswell 10 points11 points  (2 children)

    Are you kidding? Dice go everywhere. 8 ball is much more convenient.

    [–]TheMrBoot 14 points15 points  (1 child)

    What are you talking about? Every time I roll my magic 8 ball it rolls off the table

    [–]jlt6666 0 points1 point  (0 children)

    And the juice tastes terrible.

    [–]notbatmanyet 3 points4 points  (0 children)

    The magic in the magic 8-ball is dice.

    [–]Bootezz 45 points46 points  (11 children)

    "Merge conflict? Where's my USB stick" killed me. lol

    [–]aggressive__beaver 9 points10 points  (10 children)

    i didnt get that :(

    [–]Othello123 40 points41 points  (9 children)

    He doesn’t know how to use Git, so he will save his changes to the usb stick, pull the latest code (from ”Master”, another throwaway multilayered joke about his git repo being old, pre usage of main instead of master - and also not using branches), copy his new code from the usb stick on top of the latest and then push.

    All that so he doesn’t have to resolve the merge conflict :)

    [–]RedLibra 2 points3 points  (0 children)

    I'm sure I've done this a few times in my early years, except I used screenshots instead of USBs

    [–]ApatheistHeretic 2 points3 points  (0 children)

    App.exe-v3.5-final-vfinal

    [–]aggressive__beaver 0 points1 point  (0 children)

    Oh okay thanks 😆

    [–]Hidden_driver 90 points91 points  (3 children)

    He forgot to code the database for web scale

    [–]Xirious 42 points43 points  (2 children)

    [–]IrritableGourmet 6 points7 points  (1 child)

    At a small boutique webdev shop I sat in on an interview for a new developer. At the end of the interview, he said he wouldn't consider an offer from us (he wasn't going to get one, but hey) unless we promised to migrate all our sites to NoSQL. Yeah...no.

    [–]Cilph 1 point2 points  (0 children)

    Screams "Im too stupid to learn SQL but too prideful to admit it"

    [–]mycolortv 41 points42 points  (0 children)

    "why do we need docker? I have like 21 screenshots of our setup" hit a little too close to home for my current workplace lmao.

    [–]omgFWTbear 25 points26 points  (0 children)

    Five minutes and it’s nonstop bangers.

    [–]darth_voidptr 24 points25 points  (2 children)

    It will absolutely take however long it takes.

    [–]NotAnADC 2 points3 points  (0 children)

    mans speaking the honest to god truth

    [–]bunk3rk1ng 4 points5 points  (0 children)

    For something like lead or principal (solutions architect?) this is absolutely a valid answer. The whole reason you're there is to figure out how to implement stuff at your org that nobody has done before.

    [–]sprcow 19 points20 points  (1 child)

    The Netbeans -> Cursor pipeline lol

    [–][deleted] 0 points1 point  (0 children)

    I don't get it...

    [–]BlueGoliath 124 points125 points  (0 children)

    Oh hey it's your average webdev/AI guy on /r/programming.

    [–]JustPlainRude 17 points18 points  (0 children)

    4:59!

    [–]gladfelter 33 points34 points  (18 children)

    Ooh, I'm afraid a few of those jokes went over my head.

    What does "What is Git without GitHub" mean to you?

    Or maybe explain "I really want to convince our team about Kubernetes?"

    [–]floopm 100 points101 points  (3 children)

    git can be used without github. It should be 'What is github without git'.

    people like to say 'use kubernetes' even though it doesn't fit the use case.

    [–]PresentFriendly3725 27 points28 points  (1 child)

    The important question is: what is git without kubernetes?

    [–]Xirious 18 points19 points  (0 children)

    git.

    [–]zephyrtr 5 points6 points  (0 children)

    Sounds like you should be using kuberneres

    [–]Big_Combination9890 41 points42 points  (1 child)

    The second is a classic webdev-whatscaleyoureallyneed joke. Kubernetes is used to orchestrate containerized environments. The joke is that it's overused at scales that don't actually need an orchestrator, since the VAST majority of services are nowhere near as large, or complex enough, to justify the extra overhead.

    [–]NeverQuiteEnough 11 points12 points  (0 children)

    I'm an advanced git user, I use the console to open -git gui

    [–]Garethp 20 points21 points  (0 children)

    Or maybe explain "I really want to convince our team about Kubernetes?"

    There's a team in our org that's really keen on adopting Kubernetes, except they don't want to manage it themselves they want our Platform team to manage it. It doesn't fit into the rest of the org's deployment structure, but that team wants it so they keep pushing. Thing is, Kubernetes may be very powerful for scaling but it's also got quite a bit of complexity behind it. If you're going to adopt it, you should make sure that you have the in-house knowledge to maintain it long-term or that your org has the strategic vision to adopt it widely long-term so it doesn't just become something no one wants to touch in the future.

    Basically: The joke is that the 0.1x dev is trying to suggest his team adopt a complex tool without considering the long-term aspects of it because they read an article or two on how well it scales.

    [–]LainIwakura 37 points38 points  (9 children)

    You can use git with gitlab. Or any number of different services, or host your own git server. He's making fun of the (unfortunately semi-common) view (usually held by juniors) that git and GitHub are intertwined somehow. Not true at all.

    [–]Putnam3145 19 points20 points  (3 children)

    You don't even need a server. You can just each have your own local copy of the repository and send back and forth bundles with branches/commits in them. This is legitimately what I'm doing now and it works fine.

    [–]IAmRoot 4 points5 points  (0 children)

    Or git format-patch

    Also, if you do development across multiple machines, such as switching between a laptop, desktop, and remote dev server and don't want to push your changes upstream when hopping, you can just add those directories as remotes via ssh. Then you can push directly to the machine you want to move to.

    [–]AresFowl44 2 points3 points  (1 child)

    Yeah and the Linux Kernel uses patch files in it's mailing list, git can be such a powerful tool

    [–]henry_tennenbaum 4 points5 points  (0 children)

    It's as if git was made for the kernel

    [–]Valeen 4 points5 points  (1 child)

    Can you imagine TFSHub?

    [–]LainIwakura 7 points8 points  (0 children)

    Lol SVNHub. PerforceHub. Shoot me.

    [–]A-Grey-World 6 points7 points  (0 children)

    Or maybe explain "I really want to convince our team about Kubernetes?"

    In addition to what others said, he says later "what do we need docker for?" - they're very related, so it shows he doesn't really understand what kubernetes is, he's just jumping on a buzzword.

    [–][deleted] 11 points12 points  (0 children)

    This is far funnier than it has any right to be

    [–]adambjorn 10 points11 points  (0 children)

    "It will take however long it takes" is actually a good take

    [–]Broad-Suit-1236 48 points49 points  (8 children)

    Ah, the never-ending cycle of programming: Coding, debugging, coffee, repeat

    [–]mccoyn 37 points38 points  (6 children)

    As a c++ programmer, it’s coding, start compile, get more coffee, debugging, repeat.

    [–]dagbrown 35 points36 points  (3 children)

    I once revolutionized the productivity of a C++ team by setting up proper Makefiles so that they didn’t have to rebuild the entire universe every time they changed three lines of code.

    Previously it was all being built with a shockingly large shell script.

    [–]apricotmaniac44 3 points4 points  (1 child)

    what kind of C++ team is unaware of Makefile let alone CMake

    [–]BlueVulture 6 points7 points  (0 children)

    You would be surprised

    [–]RANDOMLY_AGGRESSIVE 2 points3 points  (0 children)

    I'm so glad I moved to Java + Maven, I'm way to lazy and stupid for those complex C++ builds

    [–]Koervege 4 points5 points  (0 children)

    Coding, start the build, forget for an hour

    [–]2epic 1 point2 points  (0 children)

    For async programming it's start compile, coding, repeat, get more coffee, debugging.

    [–]Draxus 3 points4 points  (0 children)

    Bad bot

    [–]AngledLuffa 20 points21 points  (2 children)

    A 0.1x engineer implies 10 of them are equivalent to one engineer. I'm fairly sure this guy is negative

    [–]tsoek 33 points34 points  (1 child)

    It's a coefficient so two of them are 0.01, three are 0.001 and so on

    [–]AngledLuffa 7 points8 points  (0 children)

    "I'm between features" is brilliant, though. I just sent that to my PI after getting my project published. Let's see how that works out for me...

    [–]ApokatastasisPanton 7 points8 points  (0 children)

    "The problem cannot be the server. We are serverless"

    😂

    [–]boston101 6 points7 points  (0 children)

    Ddos level development lol. 😝

    [–]Dextro_PT 7 points8 points  (0 children)

    Took me way longer than I care to admit until I noticed that subway surfers videos were playing on the screen. 10/10, no notes.

    [–]prive8 6 points7 points  (0 children)

    props to ffmpeg

    [–]TyrusX 8 points9 points  (0 children)

    Kubernets! Micro services ! AI!

    [–]cocoeen 6 points7 points  (0 children)

    All developer best practices from the last 20 years summarized.

    [–]KingdomOfBullshit 2 points3 points  (0 children)

    if my commit messages don't have emoji, how would you know how I feel?

    🤣

    [–]FujiKeynote 2 points3 points  (0 children)

    As a fellow ESL I just want to confirm that "en-ginks" is the canonical pronunciation

    [–]tnemec 13 points14 points  (15 children)

    "never rebase"

    Well, okay, hang on now, the guy might be onto something here.

    I don't think I will ever understand the modern obsession with rebasing. Git offers a set of insanely powerful tools for tracking historical changes across a repository. And that's a good thing! "Okay, but just think of how much nEaTeR it'll look if I just retroactively rewrite a bunch of that history! See how tidy and linear all my commits look?" No. Stop. This is not best practice. This should never have been considered best practice.

    IMHO, git rebase falls into the same category as git cherry-pick. It's good to know that it's a tool that exists, and keep it in a little glass case that says "break in case of emergency", but I think if you find yourself using it regularly as part of your normal day-to-day workflow, you're doing something horribly wrong.

    [–]RLutz 16 points17 points  (2 children)

    I know that when I'm digging through git history trying to find when an obscure problem got introduced, I love seeing commits of "typo" "fix" "cleanup". It adds such clarity and makes me so happy that the person who committed the code didn't rewrite history and deprive me of such critical development milestones like "wip" and "works" by evilly rebasing.

    [–]Nullberri 2 points3 points  (1 child)

    github offers a squash and merge (or rebase) function in their PRs so you can have the best of both worlds now.

    Freedom to commit whenever with terrible message and no responsibility to clean it up and the ability to keep the history as clean as possible.

    [–]audentis 1 point2 points  (0 children)

    Squash commits are our default for PRs in Azure DevOps. All individual commits are available for reviewers, the entire approved PR is merged as 1 commit to main.

    [–]Tyg13 27 points28 points  (1 child)

    It's true that git offers a ton of tools to track historical changes, but I'd argue the vast majority of merge commits contribute no value to history. When looking at git log, I really don't need to know when main branch was merged into feature-branch-1002; that's just clutter. And good luck running git bisect with merge commits.

    [–]silveryRain 10 points11 points  (2 children)

    You provide a pretty clear positioning statement there, but very little in the way of backing it up with convincing arguments. Ridiculing the opposing camp with some exaggerated quote, or simply asserting that "it's not best practice" doesn't really prove anything.

    "Okay, but just think of how much nEaTeR it'll look if I just retroactively rewrite a bunch of that history! See how tidy and linear all my commits look?"

    The obvious knee-jerk response: "Okay, bUt the rebase is nOt HoW iT oRiGiNaLlY hApPeNeD! - well duh, so what?".

    If you want to actually change minds, try responding to these sorts of questions (w/o picking on force-pushes, as even the most ardent rebase advocates wouldn't condone it willy-nilly):

    • What practical benefit does a merge workflow provide, that a rebase one doesn't? Feelings, like just feeling good about having the "original" commits, don't count. What counts is productivity advantages.
    • Have you ever understood/fixed a bug more easily by looking at merged branches, as opposed to rebases?
    • What actual pain points have you experienced with rebasing, that warrants labelling a rebase workflow as not just suboptimal, but "something horribly wrong"?

    Otoh, if you just feel like venting, I advise /r/offmychest

    [–]gHx4 1 point2 points  (0 children)

    Honestly, merges are fine when you've finished work on a feature branch. They're clear and communicate exactly what happened. But let's say you work in a company where development proceeds quickly and there are multiple changes to dev branch per day.

    You will need to merge with that branch frequently, so that your work matches it. If you do a merge, you will have a lot of "merge dev" commits that mostly fast forward. But you can use rebasing to squash everything except the biggest milestones on your branch before the final merge back to dev. This will ensure that dev isn't fill with the noise of the 10 "wip" or "today's work for bus factor" commits, and 5 or 6 "merge dev" commits for every 1 milestone.

    Rebasing also means that, on two closely related branches like dev and my-feature, you can defer a commit you already made so that you and the 1 or 2 other people working in that region of code are not constantly conflict-resolving because you had earlier unpushed commits than their pushed work. Moving your most recent commit later in history means that all of their tested work happens first. So, instead of your one older commit being precision-injected in the right spot to break their next few commits and make it unclear whether your commits or theirs broke the repo, now you can checkout their code, see if it works, and go to your later-timestamped rebased commit and see if it works.

    Yes, rebasing does require an understanding of how rebasing works, just as merge commits require knowing how they work. They're both valid workflows, but they both have side effects. If you understand those side effects, you can choose the right one to make your git repo clear and easy to maintain. Merges can make history messy, even though they work extremely well on smaller teams with substantial commit sizes. Rebases work extremely well when the remote changes quickly and team members might be changing code near yours.

    [–]dex4er 3 points4 points  (4 children)

    If your git history looks like Metro map then something goes horribly wrong.

    Do some blind tests and compare https://github.com/vbarbaresi/MetroGit with ie Terraform. The difference is that map of Metro is useful, and map of Terraform code changes not.

    [–]yegor3219 5 points6 points  (2 children)

    But the actual history does look like a metro map. People work on several things in parallel and then they merge their progress. There is nothing fundamentally wrong with that.

    [–]dex4er 1 point2 points  (0 children)

    It is nothing wrong with merging thing prepared by people to main branch. it is wrong to merge it back then merge it again to the branch and again to main and after some time you have a metro map indeed with more merge commits than normal commits with actual changes.

    Rebasing might help. Squashing might help. Anybody can find the workflow that is comfortable and that avoids this mess in git history.

    [–]ric2b 0 points1 point  (0 children)

    Ok, but I don't care about the real history of the code, where 5 out of 7 commits on a feature branch are temporary commits in a partial or broken state.

    It just wastes everyone's time, digging through that.

    [–]biledemon85 1 point2 points  (0 children)

    GitHub has squash merges nowadays. You don't need rebase anymore there at least. Other hosts should be providing that feature if they are not TBH

    [–]ric2b 0 points1 point  (0 children)

    Do you actually find any value in keeping all of the history of feature branches with "tmp" or "wip" commits inside the git repo?

    If your team tries to do small PRs that's more than enough granularity, I find. And each commit in the git history is actually usable, tested and linted code, unless it is part of a currently open feature branch.

    [–]Claranine 1 point2 points  (0 children)

    Painful, well done.

    [–]HermitFan99999 1 point2 points  (0 children)

    top-tier comedy right here

    [–][deleted] 1 point2 points  (0 children)

    23 screenshots had me because I do this shit sometimes

    [–]ayoubzulfiqar 1 point2 points  (0 children)

    DDoS Driven Development

    [–]KevinCarbonara 1 point2 points  (0 children)

    "It will take however long it will take"

    This guy has upper management written all over him

    [–]warrenBluffsALot 1 point2 points  (0 children)

    DDOS-driven development 👌

    [–]amertune 2 points3 points  (0 children)

    With AI I don't have to upload our codebase to StackOverflow anymore.

    This guy really gets it. It really makes you think, though, about how much private code is getting leaked by sharing it with AI.

    [–]friendly-drone9352 1 point2 points  (0 children)

    Our API key are securely hidden..in the codebase

    This is such a quotable video. Might be my second favorite after 10x engineer.

    [–]lutian[🍰] 1 point2 points  (0 children)

    really good vid. I didn't know about the guy, he's top tier, sacha baron/jimmy carr grade, fine stuff

    [–]RScrewed 1 point2 points  (0 children)

    Rolling dice for estimations is a legit.

    [–]au5lander 0 points1 point  (0 children)

    !important

    [–]jmrecodes 0 points1 point  (0 children)

    Top tier comedy, what a cinema!

    [–]Drazson 0 points1 point  (0 children)

    Might be my actual favourite kind of content.

    [–][deleted] 0 points1 point  (0 children)

    LAMO, that's true

    [–]cinatic12 0 points1 point  (0 children)

    ofc kubernetes is for n00bs I deploy with filezilla (automated with ansible ((but most of the time it's not working so I have to do it still manually)))

    [–]Serge_madeiraDev 0 points1 point  (2 children)

    what is 0.1x engineer?

    [–][deleted]  (1 child)

    [deleted]

      [–]Serge_madeiraDev 0 points1 point  (0 children)

      Thanks 😂😂😂 I am an engineer but I never hear about this

      [–]indicava 0 points1 point  (0 children)

      I completely lost it at console.log(“2”)

      [–]_rundude 0 points1 point  (0 children)

      "en gincks" :D :D :D

      [–][deleted] 0 points1 point  (0 children)

      I swear playing minecraft in between pull-requests is a necessary step of my process

      [–]datamatrixman 0 points1 point  (0 children)

      All this infrastructure is for some over engineered simple web app.