Comments by "DR" (@dafyddrees2287) on "Continuous Delivery" channel.

  1. 656
  2. 100
  3. 24
  4. 20
  5. 14
  6. 12
  7. 12
  8. 10
  9. 10
  10. 9
  11. 8
  12. 7
  13. 7
  14. 6
  15. 6
  16. 5
  17. 5
  18. 5
  19. 5
  20. 5
  21. 5
  22. 4
  23. 4
  24. 4
  25. 4
  26. 4
  27. 4
  28. 4
  29. 3
  30. 3
  31. 3
  32. 3
  33. 3
  34. 2
  35. 2
  36. 2
  37. 2
  38. 2
  39. 2
  40. 2
  41. 2
  42. 2
  43. 2
  44. 1
  45. 1
  46. 1
  47. 1
  48. ​ @edwardcullen1739  "people pull-before-push, their merge will be trivial" I used to think that too. How do I get an isolated renaming into a gitflow repo? It won't allow me to make a trivial renaming in isolation. If I'm working on a story don't I have to package up all the changes on a feature branch into a giant change (that comes from squashing the changes on my feature branch.) If I follow the gitflow rules and my renaming is on the feature branch (because the rename occurs naturally as part of the feature) I get a great big change with loads of refactorings AND behavioural changes that no other developer will want to swallow when they review the PR. Now that is a nightware - trying to understand multiple refactorings AND behaviour changes all in one - i.e. gitflow actually making it hard to understand because all the changes have been concentrated together. I understand I could make a separate refactoring branch (if I knew in advance what I needed to refactor). I mean I could make an experimental throwaway branch and use it to work out what needs to be simplified to support the new behaviour and then create a series of "single refactoring only branches", and then make a "real" feature branch to work on top of that. The certified-professional-meeting attender class (i.e. non-engineers) won't like "single refactoring only" branches because forcing all devs to commit features as the merge of a single feature branch makes release management easier (at the expense of CI)... and of course refactoring and keeping the code simple isn't a problem for them so why would they care? I often see refactorings and how features could be really simple - and then remember that level of refactoring would never survive in a gitflow environment - so the other devs I work with never get to see how much simpler the codebase could be and I end up spending a lot of time being frustrated by working on code that's much more complicated than it needs to be and it can only get worse.
    1
  49. 1
  50. 1
  51. 1
  52. 1
  53. 1
  54. 1
  55. 1
  56. 1
  57. 1
  58. 1
  59. 1
  60. 1
  61.  @vyli1  1) Pair programming IS code review. Continuous review and that is better than review when it is too late - as happens most of the time with branches. 2) "if you use trunk based development and you are working on a MASSIVE refactoring, you're in fact still in the risk of having tons of merge conflicts" That's possible - and that is why you have to work WITH people instead of pretending they don't exist for a while. How we have staged MASSIVE refactorings in the past: i) tell everybody in advance - have a discussion and make sure everybody is on board. Everybody gets a say because of "common code ownership". ii) on a specific day (preferably a Friday) have an agreement that we won't be attempting anything big today. Get everything checked in (and the build passing of course because that's expected) by mid day. Use the rest of the day to plan, investigate, experiment, spike - anything but DON'T leave any unused code around. Devs of course aren't glued to specific stories so they move around as needed to HELP EACH OTHER clean the decks. iii) when everybody is clear, and if necessary on the next day (Saturday the day after the decks have been cleared) send in a pair to do the refactoring. It should be purely just that refactoring in isolation. It could be as simple as "rename commonly used interface" or "split commonly used interface into two parts". The goal is to restate the entire codebase in the new terms. NOT adding functionality, NOT changing functionality. The purer and simpler the better. This won't cause a problem if the entire team as cooperated. There won't be any fighting or crying because a consensus was achieved in point i) - and there shouldn't be any broken junk because everybody helped each other clear the decks before this was done - due to point ii) iv) the refactoring pair need to hang around and make sure the build goes through - and validate that refactoring helps them express what they need. (There must have been a justification in point (i) right?) v) when everybody gets back in the refactoring pair can spend some time rotating around the pairs helping anybody that needs it to get up to speed There's no technical fix to making big changes - only minimising the impact which involved working MORE closely with people rather than hiding behind branches. "Other people working off from trunk not having your massive refactoring code available will still have problems" - I worked for about four years on a huge codebase with about 30 developers. We almost NEVER had another branch running alongside trunk. We branched very, very rarely and then for the shortest possible time. I can see that it would hurt if we branched a lot - so don't do it eh? Trunk-based development. "Trunk doesn't save you here at all." - oh Yes it did. It worked consistently for four years - with about 30 developers in 3 different timezones, with multiple customers and all developers jointly owning all the code. Not only is this possible and I have done it multiple times - but it's teachable. 3) "if it is such a massive refactoring, there's a slight chance (although I admit often it's not possible) that the change can actually be split across multiple small feature branches" You're not gaining anything here - you just like to have branches. If you want to make things hard for yourself - go for it. What pisses me off is people forcing me to do things that are riskier and less efficient because they can't imagine a better way of doing it and are determined not to listen to people with my experience. 4) "how do you protect developers from accidentally pushing changes, that fail to build the project?" Design and code are a team activity. Programmers are not typists - when you design code in a pair you have to explain your ideas to somenbody else. That's usually when you discover that it's not as well thought out as you assumed - because explaining it is harder than you think and the other developer probably can see things you can't. Fixing the design and reviewing the design is a much deeper activity than you can expect a tool to do for you. At very least, there's a set of unit tests and acceptance tests that you run BEFORE you check in - and then the CI/CD pipeline runs to verify that everything stacks up consistently. "It's fairly easy to do with feature based approach" Bullshit. The "feature based approach" means you can't actually do many refactorings that I would normally do and that means that I have to leave the codebase messier than it would otherwise be. The bigger factor that nobody talks about is also that developers are pitted against each other with the "feature based approach" because reviews are adversarial whereas TBD with pairing is about cooperation - i.e. both devs are working to get it done rather than one person "owning the change" and another person being "captain nitpick" when it's really too late to have any real influence (and not enough time anyway to really get stuck into critiquing a desing properly.) Git is designed to support Linus - and he's not a team player. The team is there to support him. That's the opposite way around to how we're supposed to work in most projects. Just because Linus does something doesn't mean we should.
    1
  62. 1
  63. 1
  64. 1
  65. 1
  66. 1
  67. 1
  68. 1
  69. 1
  70. 1
  71. 1
  72. 1
  73. 1
  74. 1
  75. 1
  76. 1
  77. 1
  78. 1
  79. 1
  80. 1
  81. 1
  82. 1
  83. 1
  84. 1
  85. 1
  86. 1
  87. 1
  88. 1
  89. 1
  90. 1
  91. 1
  92. 1
  93. 1
  94. 1
  95. 1
  96. 1
  97. 1
  98. 1
  99. 1
  100. 1
  101. 1
  102. 1
  103. 1