Comments by "Daniel Sandberg" (@ddanielsandberg) on "Continuous Delivery"
channel.
-
1
-
1
-
@vyli1 I have a question. What does it matter that trunk is broken just once-in-a-while (meaning seldom)? If it's broken so that unit tests, functional tests or acceptance tests fails it will be discovered (and fixed) quickly. If it's broken in such a way that it's only found during manual testing, you would probably have that happen anyway, and sometimes it's broken without us knowing - we call that a production bug.
There is this misunderstanding that "always releasable" means "mainline never broken, always pristine, represents production, etc". "Always" is not black and white! While we should strive to minimize the time mainline is broken (because it blocks everyone else) the goal is not to eradicate all mistakes (impossible). The purpose of CI, CD and TBD is fast feedback IF we broke something. It's okay if it was due to an honest mistake, if it was due to sloppiness then the team have some difficult learning to do. In both cases we have learned something we can act on. To para-quote Jez Humble: "Every build is a release candidate. The goal of the CI/CD pipeline is not to prove that it works, it is to prove that it does NOT work. If you can't prove that it doesn't work you should be able to deploy that version (if you choose to)." .
As I have written elsewhere, you don't release a branch, you don't deploy a branch, you deploy a good known commit/version of your code. If the mainline is broken the same hour that we need to deploy to production - it doesn't matter - because we always use/deploy the latest known working commit/version. Version control is not a file server and a branch is not a directory, it is a versioned graph of snapshots in time so we can use whichever one we'd like.
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
1
-
Copy-pasting my usual long rant regarding the belief that "we must have reviews to stop bad code from other bad programmers getting into the code base".
I think there is this idea that we programmers only get one chance to implement something. Everything is a one-off "task/project" and then we move on to the next thing. Nothing is ever perfect, learn to accept that and then do something about it. Life is messy, sh*t happens, deal with it and move on.
Committing unperfect code, unperfect design, janky solutions (that nevertheless works) is actually OK. What it requires is that people actually have to learn to refactor, redesign, and do continuous improvement *all* the time. It's never perfect, it's never done, so get into the mindset of always fixing and improving things that looks "off". It is a good idea for the team to have recurring reviews of the current state of the software and always improve issues as they are found. Keeping the code clean and working is more important than adding more features, or following a project plan or some rules put down by people not doing the job, all separated by 5 levels of management.
The second problem is that every programmer appears to believe that programming is a solemn activity. That is wrong; it's a social activity. In a company setting I see FB/PR as a symptom of missing teamwork and/or bad organizational leadership. If every developer wants to work alone in their corner with headphones and only intermittently "communicate" and "integrate" using PRs and "do their own stuff" you do not have a team. Don't you talk? And yes, we love to use dumb excuses like "but I'm an introvert", etc which is just BS to avoid having to talk with other people while getting paid to do our hobby.
1
-
Not looking for an argument here, just wanting to point some things out.
CI and TBD is designed to "solve" the problems you describe by exposing them instead of trying to work around them with band aids, processes, phases, hand-offs, etc. I would go so far as to say that the whole point/secret to (agile) software development has been forgotten in-place of process-itis and navel gazing. Just my opinion.
Here is a great quote about agile "Agile's biggest strength lies not in solving problems, per se, but rather in exposing your buried problems and making them visible so you can deal with them. For a team switching to agile it can feel like things are getting worse, not better, but that’s often because they’re being made aware of pre-existing problems they didn’t know they had. It may not seem like it but this is actually a good thing." - Someone over 10 years ago.
Or in the words of Jez Humble (co-author of continuous delivery) "If it hurts, do it more frequently, and bring the pain forward."
Instead of getting bogged down in the thinking that "we can't" or "we must", what if you asked yourself a different question? "What would need to change for master/main to no longer be blocked/deployable for new features, fixes, etc; to be able to do any of these things as needed, when needed, and never be more than a few minutes from being able to deploy to production?"
Problem-solving is more about asking the right questions than providing solutions. Adding complicated processes to hide the systemic issues is seldom the answer.
1
-
1
-
1
-
1
-
1
-
Yes, lets!
Like all the people that learned to code alone at night pumped up on cola. Like all the the people that can't collaborate, work together, interact and solve problems together. Like all the people that wants to sit alone in their corner, typing code and get paid to do their hobby. Like all the people that thinks that software engineering is just about tech, has no emotional intelligence, that don't understand that soft skills are 80% of the work and that always blames "introversion" why they can't. And all the people that's driven by nothing but ego, personal gain and only got into it due to the money. You mean, like those people?
You are right, there are a lot of idiots in the industry, it's just not the people you think.
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
-
1
-
1
-
1
-
1
-
1