I attend conferences and open spaces for more than 15 years but I can’t remember ever being keener to go to a conference than the DDD EU this year. But I still haven’t imagined that my list for “watch later”-videos will be almost as long as the number of talks – including the ones from the DDD Foundations (2 pre-conference days).
I was so full of expectations because I would be a speaker at an international conference for the first time and the opportunity to meet all those wonderful people who became friends in the last two years! (I won’t even try to list the names because I would surely miss a few). The most often repeated sentence on those five days wasn’t “Can you see my screen?” anymore but “Do you know that we never met before IRL?!” 🤗
This was only one of those great evenings meeting old friends and making new ones 🙂 (After two years of collaboration, the Virtual DDD organizers have finally met too!)
But now back to the lists:
Talks I haven’t seen but I should:
- DDD Foundations with clever people and interesting talks which should/could land in our ddd-crew repositories. (In general, the sessions are not too long, I will probably browse through all of them.)
- Main Conference
Talks to revisit
This list is not the list of “good talks”; I can’t remember being at any talk I wished I wouldn’t. But these here need to be seen and listened to more than once (at least I do).
Domain-Driven Design in ProductLand – Alberto Brandolini
Alberto speaking the truth about product development is exactly my kind of radical candour.
Independent Service Heuristics: a rapid, business-friendly approach to flow-oriented boundaries – Matthew Skelton and Nick Tune
The tweet tells it all: an essential new method in our toolbox
The Fractal Geometry of Software Design – Vladik Khononov
Mindblowing. I will probably have to re-watch this video a couple of times until I get my brain around all of the facets Valdik touches in his talk.
Sociotechnical Systems Design for the “Digital Coal Mines” – Trond Hjorteland
This talk is not something I haven’t understood – I understand it completely. I will still re-watch it because it contains historical and actual arguments and requirements for employers on how they have to re-think their organizational models.
This is the longest list of videos I have ever bookmarked (and published as a suggestion for you all). Still, it is how it is: the DDD-Eu 2022 was, in my opinion, the most mature conference I ever participated.
At the same time, there is always time for jokes when Mathias Verraes and Nick Tune are around (and we are around them, of course) 😃
Tl;dr: Continuous integration and delivery are not about a pipeline, it is about trust, psychological safety, a common goal and real teamwork.
What is needed for CI/CD – and how to achieve those?
- No feature branches but trunk-based development and feature toggles: feature branches mean discontinuous development. CI/CD works with only one temporary branch: the local copy on your machine getting integrated at the moment you want to push. “No feature branches” also means pushing your changes at least once a day.
- A feeling of safety to commit and push your code: trust in yourself and trust in your environment to help you if you fall – or steady you to not fall at all.
- Quality gates to keep the customer safe
- Observing and reducing the outcome of your work (as a team, of course)
- Resilience: accept that errors will happen and make sure that they are not fatal, that you can live with them. This means also being aware of the risk involved in your changes
What happens in the team, in the team-work:
- It enables a growing maturity, autonomy due to fast feedback, failing fast and early
- It makes us real team-workers, “we fail together, we succeed together”
- It leads to better programmers due to the need for XP practices and the need to know how to deliver backwards compatible software
- It has an impact on the architecture and the design (see Accelerate)
- Psychological safety: eliminates the fear of coding, of making decisions, of having code reviews
- It gives a common goal, valuable for everybody: customers, devs, testers, PO, company
- It makes everybody involved happy because of much faster feedback from customers instead of the feedback of the PO => it allows to validate the assumption that the new feature is valuable
- It drives new ideas, new capabilities bc it allows experiments
- Sets the right priorities: not to jump to code but to think about how to deliver new capabilities, to solve problems (sometimes even by deleting code)
How to start:
- Agree upon setting CI/CD as a goal for the whole team: focus on how to get there not on the reasons why it cannot work out
- Consider all requirements (safety net, coding and review practices, creating the pipeline and the quality gates) as necessary steps and work on them, one after another
- Agree upon team rules making CI/CD as a team responsibility (monitoring errors, fixing them, flickering tests, processes to improve leaks in the safety net, blameless post-mortems)
- Learn to give and get feedback on a professional manner (“I am not my work”). For example by reading the book Agile Conversations and/or practice it in the meetup
– – – – –
This bullet-point list was born during this year’s CITCON, a great un-conference on continuous improvement. I am aware that they can trigger questions and needs for explanations – and I would be happy to answer them 🙂
Last week I have realized that I had a blind spot: I thought that every developer is aware that selling software or delivering a product are not quite the same. As it turned out, I was wrong so I created this list to explain what I mean.
Goals And Interests In Project Development (aka Feature Factory):
- The main stakeholder is the company paying for the features (called client further on), not the customer who is using them.
- The responsibility for maintaining and evolving of the platform is not my job.
- The requirements are defined by the client: I have no way to validate them because I have no contact with the users of the features. Feedback-based decisions are not possible.
- Fast development but slow delivery.
- Features are defined as a whole and delivered as a whole, not iteratively. Visual requirements (mock-ups) are un-negotiable because they are ordered as-is, even if the end user might not see it that way.
- Perfection instead of usability.
- Innovation is limited by restricted access to the infrastructure or other 3rd party services used by the client.
- No involvement in long- and medium-term planning, as the goals of the client are not my goals. Very limited possibility to plan the architecture aligned with the strategy of the client.
- The product my company sells is time and/or LoC. (Disclaimer: this would not be the case when working with Extreme Contracts)
- The most important metrics are:
- hours per week,
- features per unit of time,
Goals And Interests In Product Development:
- The main stakeholders are the end customers and the company itself (me and my team included).
- The main goal is to identify users’ problems, develop solutions for them and solve them in the correct order. The job is no longer spending time with work or moving tasks on a Jira board, but to provide solutions.
- Nowadays, with a large number of competitors who could appear every day, time-to-market (i.e. time) is decisive, but not at the expense of quality.
- We own the maintenance and the evolution of the platform. It is our interest to produce high quality and robust software.
- Through the cooperation of business analysts, UX experts, software developers and cloud experts, we are able to deliver features (capabilities) step by step, measure their benefits and decide on the next measures.
- I can use all my skills and my company can benefit for them.
- The user stories are written in a business-oriented manner, they can be taken literally. They document the proposed solution, can be cut into meaningful slices to be implemented quickly and reliably and to be delivered fast.
- “Fail Fast” and “Inspect and Adapt” are the most important principles.
- Usability, not perfection.
- The most important metrics are:
- customer satisfaction (measured with business metrics and the usage of delivered features),
- lead time (time between idea and in use),
- time to recovery,
- change failure rate (Accelerate)