Comments by "Daniel Sandberg" (@ddanielsandberg) on "Continuous Delivery" channel.

  1. 36
  2. The problem is that you end up with developers that has no clue how their things actually works in the real world so they can't make informed decisions, or even know who to ask the right questions. How do you expect to grow seniors, innovate and be competitive when you have devs that has no clue about CI/CD, TDD/BDD, observability, operability or how their decisions affects the system in production and are stuck with the some kind of "I write code, then magic happen" culture? While a good developer-friendly platform is a good thing, it should be there to help with the everyday BAU work and add constraints (governance and compliance). It shall not be an excuse to "dumb it down for developers". An anti-pattern I see all the time is seniors "controlling" and doing "programming by remote control" with an attitude of "I must review everything because I'm the senior". So many organizations hire juniors to just fill a seat and expects them to be productive and because of all the new people they try to control the work with processes and the aforementioned programming by remote control, not (wanting to) understand that for every junior developers they add they are actually removing a senior developer for the next six months. Because that is the job of seniors - to mentor and coach so that the new people *can* be a trusted productive member of the team. An organization with senior devs that does not understand these "sociological" things is not a good place to be. I don't care if they have been doing it for 20 years and can write the most beautiful code ever written; if these things are alien to them they are *not* seniors (you'd be surprised how common this is). The primary job of a senior engineer is to create more senior engineers.
    24
  3. 23
  4. 14
  5. 14
  6. 13
  7. 10
  8. 9
  9. 8
  10. 7
  11. 7
  12. 7
  13. 6
  14. 5
  15. 5
  16. 4
  17. 4
  18. 4
  19. 4
  20. Do you mean "trying TBD" just like organizations "tries Scrum" by replacing requirement with user-story, milestone with sprint, deadline with release-trains, keep assigning devs by "percentage utilization" and doing annual budgets, writing 500 pages of "design" for a year before starting, developers communicating using Jira-tickets instead of talking, and nothing really changes, culturally or behavioral, et. al? You can't just decide to "go CI/TBD" unless you have the practices and tools that makes it possible. Like pairing, TDD, good fast build system, being able to make changes by many-many small steps without ripping 23 modules apart for 3 days and a culture that supports it. CI/TBD is a skill, and just like everything else it takes time to get there. I would suggest to start by setting up some things: 1. Make sure there are high-level tests covering the most important happy-paths. 2. Make these tests fast, unfragile, and make them/the system runnable on developers machines. 3. No changes gets committed without some kind of test covering the code being changed. 4. No feature branch lasts for more than 1 day. 5. Get a build system that tests main at every merge/commit. 6. If the build turn red - you have 10 minutes to fix it, or revert it. 7. If you can't get the build back to green EVERYBODY in the team stops what they are doing and do anything they can to get it back to green. There is no situation where a failing build is OK to just leave and keep doing other work (which usually happens with branches - habits matters). Getting these things into place, and making them a habit will go a long way. Next we turn the heat up: 8. Pair program as much as possible. Not every change requires a review (and some changes can be reviewed after the fact. See "Ship / Show / Ask" by martin fowler). 9. Try to slice changes into small parts that takes a couple of hours or less. 10. No feature branch lasts longer than a couple of hours. 11. TDD and refactor mercilessly. Make changes easy. 12. Make it hot: Any changes that has made it into main may be deployed 30 minutes after you commit, when you're on lunch. Now code-hygiene, care and practices really starts to matter. 13. Start doing some changes without a feature branch/PR. Evaluate, practice, habit. 14. Remove organizational/cultural issues: The entire team succeeds or fails together. As long as everything is driven by "individual tasks" (and associated rewards), stupid "sprint commitments", and "done" that means - "I coded it, it's done, right? Then a separate QA-department is trying to inspect quality in after the fact and it's someone elses problem after that" - nothing you do will matter. Culture eats strategy and intentions for breakfast. 15. Expect things to go wrong, learn to deal with it and improve. It takes years for a team to get good at CI/TBD. It takes even more years for an organization to get good at CD.
    3
  21. 3
  22. 3
  23. 3
  24. 3
  25. 3
  26. 3
  27. 3
  28. 3
  29. In part. Continuous Integration is a human practice where it is expected that the developers pulls the latest changes and run the unit tests, lint, checkstyle, findbugs, (and component integration tests) before pushing. Those same checks are then run at push, which is called a "commit build" and should give you a high confidence that everything works. In CD there are other kinds of tests and checks downstream that takes different aspects of the entire system into account. As I understand it, the embargo shown here is seldom used. Again, CI is a human practice and a social contract: if the build is not fixed within 10 minutes, anyone can revert the commit that broke it. The key here is to be disciplined and don't break things all the time, and the few times it breaks we do whatever we can to get back to a working state. Shit happens, learn from it and move on. Part of the issue with feature branches is that it optimizes for individual developers working alone in their corner with headphones on. This is a bad thing. Sure, you can use short-lived feature branches if you must; where (in my view) short means a couple of hours. But if most only live 30 minutes to a few hours what's the point of branching in the first place? Look, I'm just an opinionated a-hole that's tired of arguing with people and also thinks that part of the popularity around FB/PR is an amazing feat of social engineering by the tool-vendors that has even the oil and tobacco companies in awe. So I'm just going to give up and drop this Twitter thread by Jez Humble: https://twitter.com/jezhumble/status/982988370942025728
    3
  30. 3
  31. 3
  32. 3
  33. 3
  34. 3
  35. 2
  36. 2
  37. 2
  38. 2
  39. 2
  40. 2
  41. 2
  42. 2
  43. 2
  44. 2
  45. 2
  46. 2
  47. First of all, don't get hung up on the "18 months" thing. That was just an example how bad it can get, i.e a slippery-slope scenario. The first thing (that is painfully obvious in this comment section) is that apparently everyone are working alone, everyone is focusing on finishing "their" tasks, their changes. This is so wrong it hurts. The second worst scenario you can have in an IT organization is a bunch of developers working alone in their corners with headphone on, thinking they are a team. The absolute worst scenario you can have is a lead/manager assigning tasks to individual developers and keeping some kind of tabs/score and handing out gold stars like in first grade. Combining these two scenarios will just create a culture where Bob won't give a sh*t if Anna is in trouble and need help, because he "got to get his tasks done on time or the manager will get angry at him". And then if there is some kind of (merge) conflict it will escalate into a personal conflict. Why not also start paying testers for the number of bugs found, and developers for the number of lines of code written? Wait, we tired that in the 80's - disaster! As a developer you are supposed to refactor. If you are making changes to a module anyway and spot something that's a bit off, just fix it, now! It's there, right in-front of you, you know how it should be, pair up and just do it. This is a really good habit. Look up the term "refactor mercilessly". Regarding OSS: Feature branching and pull-requests were invented for and by the open source community. A situation where you have maybe 1000s of untrusted contributers and just a few trusted committers. This is where FB/PR shines. If you do not find yourself in that situation, there are better ways, like TBD and CI.
    2
  48. 2
  49. 2
  50. 2