Thursday, March 16, 2023

Lean Software Development: Defer Commitment

Yesterday, I had the pleasure of presenting the talk "Lean Development: Defer Commitment" at the Madridagil offices. 

I'm sharing the slides here in case they can be helpful to anyone.

 


Thank you very much to Nexthink for being such fantastic hosts.

   

Related content


Sunday, February 19, 2023

Good talks/podcasts (Feb 2023 I)


 


These are the best podcasts/talks I've seen/listened to recently:
  • The Well-Balanced Programmer (J.B. Rainsberger) [Engineering Career, Inspirational] [Duration: 0:52:00] Inspiring talk for any developer. JB gives good insights and fundamental career advice for any software development professional.
  • Why we switched to serverless containers (Florian Forster) [Cloud, Developer Productivity, Operations, Serverless] [Duration: 1:08:00] Florian Forster, talked about why they switched to serverless containers. Zitadel has a really interesting workload that is both CPU intensive and latency sensitive.
  • Architecture for Flow with Wardley Mapping, DDD, and Team Topologies (Susanne Kaiser) [DDD, Engineering Culture, Technology Strategy, Wardley maps, team topologies] [Duration: 0:43:00] (⭐⭐⭐⭐⭐) This talk illustrates the concepts, connects the dots between DDD, Wardley mapping and team topologies, and demonstrates how these techniques help to evolve a fictitious legacy system for a fast flow of change.
  • Systems Thinking for Developers (Jessica Kerr) [Inspirational, Mental models] [Duration: 0:55:00] (⭐⭐⭐⭐⭐) Great explanation of how system thinking arises and its basic concepts. System thinking is a fundamental tool to work with/in complex systems such as software systems.
  • Episode 548: Alex Hidalgo on Implementing Service-Level Objectives (Alex Hidalgo) [Devops, Operations] [Duration: 0:48:00] The episode examines how to define error budgets and policies to influence engineering work, how to tell if your project is under or over budget, and how to respond to being over budget, as well as how to derive value from using up excess error budget.
  • #100 - Modern Software Engineering - Dave Farley (Dave Farley) [Continuous Delivery, Engineering Culture, Technical Practices, Technical leadership, Technology Strategy] [Duration: 1:02:00] Dave started by explaining his view on modern software engineering and why it emphasizes on practices for building better software faster. Dave described the foundations of the software engineering discipline and explained the core competencies we need to succeed by becoming experts at both learning and managing complexity. Dave also explained the importance of understanding technology fundamentals, improving software readability, and handling software complexity by managing concurrency and coupling. Towards the end, Dave shared some other tools in the modern software engineering toolkit that include Continuous Delivery.
Reminder, All these talks are interesting even just listening to them.

Related:

Saturday, January 28, 2023

Good talks/podcasts (Jan 2023 II)



These are the best podcasts/talks I've seen/listened to recently:
  • "Unembedding" embedded systems with TDD: benefits of going beyond the make-it-work phase (Francisco Climent) [Agile, Technical Practices, XP, tdd, testing] [Duration: 0:52:00] Interesting talk about the benefits of using TDD in embedded systems. The talk is full of useful tips, patterns, and strategies very useful in both embedded and non-embedded environments. Special mention to how Francisco uses mutation testing in the development process.
  • You Don’t Need CODE OWNERSHIP (Dave Farley) [Continuous Delivery] [Duration: 0:18:00] (⭐⭐⭐⭐⭐) Great explanation about Continous Integration, Continuous Delivery and some strategies that allow to work in small safe steps (Feature Flags, Branch by Abstraction and Dark Launching).
  • Ruby Conf 12 - Boundaries (Gary Bernhardt) [Functional, OOP, Software Design] [Duration: 0:45:00] interesting design proposal combining a functional core (without mutations) wrapped by an imperative object oriented shell.
  • How to become 37.78 times better at anything | Atomic Habits summary (James Clear) [Inspirational] [Duration: 0:28:00]
  • Create Web APIs with ASP.NET Core Using Outside In TDD (Pedro Moreira Santos) [Technical Practices, XP, testing] [Duration: 0:50:00] Pedro describes what his workflow usually is. Very good insights on Testing, boundaries, TDD. Very interesting.
  • Critical Program Reading (1975) - 16mm Film [Quality, Software Design] [Duration: 0:18:00] Interesting document explaining how to improve the maintainability of an application by improving the readability. It is very curious how almost everything that is recommended in this video from 1975 is still perfectly valid.
  • Facilitating Impact Mapping (Gojko Adzic) [Inspirational, Lean Product Management, Product, Product Strategy] [Duration: 0:45:00] Gojko presents early results of an ongoing research on how teams around the world apply impact mapping to speed up time to market and get maximum impact for minimum effort. You'll learn about five important ideas to ensure effective impact mapping sessions.
Reminder, All these talks are interesting, even just listening to them.

Related:

Sunday, January 08, 2023

Good talks/podcasts (Jan 2023 I)




These are the best podcasts/talks I've seen/listened to recently:
  • A Philosophical Look at System Dynamics (Donella Meadows) [Systems Thinking] [Duration: 0:53:00] Donella Meadows’ lecture on causal loop diagrams (The most interesting part starts at the 18th minute). Via @RuthMalan@mastodon.social.
  • "Unembedding" embedded systems with TDD: benefits of going beyond the make-it-work phase (Francisco Climent) [Agile, Technical Practices, XP, tdd, testing] [Duration: 0:52:00] Interesting talk about the benefits of using TDD in embedded systems. The talk is full of useful tips, patterns, and strategies very useful in both embedded and non-embedded environments. Special mention to how Francisco uses mutation testing in the development process.
  • You Build It, YOU Run It!' For Continuous Delivery (Dave Farley) [Devops, Engineering Culture] [Duration: 0:17:00] In this episode, Dave Farley describes the practice and implications of holding development teams accountable for their software and how this idea fits with a culture of continuous delivery.
  • Seven shipping principles (David Heinemeier Hansson, Gerhard Lazu) [Company Culture, Engineering Culture, Inspirational, Technical leadership] [Duration: 0:58:00] Very interesting conversation with DHH about various topics related to technology and technology companies. Interesting ideas about the shipping principles, the use of the cloud, and the different tradeoffs depending on the context of each application.
  • How much to invest in platform work (Jean-Michel Lemieux) [Devex, Platform, Platform as a product, Platform teams] [Duration: 0:52:00] Jean-Michel Lemieux, former CTO of Shopify and VP of Engineering at Atlassian, explains how to advocate for investing in platform work, which projects to fund, and what distinguishes a great platform leader.
  • Oredev 2011: Sleeping with the enemy (Gojko Adzic) [Engineering Culture, testing] [Duration: 0:52:00] (⭐⭐⭐⭐⭐) Gojko Adzic describes why independent testing should be a thing of the past. He explains how testers engaging with developers and business users create opportunities to accomplish things they cannot do otherwise.
Reminder, All these talks are interesting even just listening to them.

Related:

Monday, December 26, 2022

My premises about software development

It is very important that, as a software development team, we share certain premises about software and software development. This allows us to work more efficiently and effectively, as we are all aligned in terms of our vision and goals.

That is why I have tried to do an exercise in introspection to extract which are the basic premises that I almost unconsciously apply when I think about software and the process of developing it.



These are my premises for software system development:

  • Software development is a team activity: We cannot work in isolation but must collaborate with other developers, designers, and other professionals to create a high-quality product.
  • There is no real trade-off between quality and speed: The way to go fast is to have good quality. Low quality in the long run only ensures that we will go slower, as we will have to fix errors and problems.
  • Software is a means to achieve an impact: We are not working just for the software itself but to achieve an impact on the "business". We must keep this in mind when making decisions and prioritizing tasks.
  • Only one-third of the business ideas contribute effectively to the outcome we aim (Online Experimentation at Microsoft): We have to accept this and optimize for learning and distinguish between product development, prototyping, and experiments.
  • When developing software-based systems, there is always a high degree of uncertainty, so we must optimize for quick feedback and work iteratively and incrementally, always taking small, safe steps (https://www.eferro.net/p/small-safe-steps-3s-workshop.html).
  • Software has a basal cost (https://www.eferro.net/2021/02/basal-cost-of-software.html) that must be taken into account. When combined with the understanding that software is only a means to achieve an impact, it becomes clear that software can be considered a liability.
  • In software development, maintaining options and flexibility is valuable. To do this, it is essential to defer commitment and try to use reversible decisions whenever possible.

These are my personal premises with respect to software development, and they are not necessarily universal principles. However, they are essential for working efficiently and effectively in software development. These premises may not apply in the same way in all contexts, but I perceive them as accurate in the contexts in which I have worked.

Some of these ideas have been confirmed in the industry through data, but for others, I only have more support than my own experience. In any case, I would love to share and contrast ideas with more colleagues.

Do you share these premises? Do you have others that are similar? Do any of these premises seem contradictory or contradict your own premises?



Related:

Monday, December 12, 2022

Mini TejonesConf 2022 / Honey Badger team gathering

It's been almost three years since we last gathered as a small group of friends for a (reduced) TejonesConf. This time, with the challenges posed by the COVID-19 pandemic, we decided to prioritize reconnecting with the original Honey Badger team and some special guests. We wanted to enjoy each other's company and be able to have intimate, in-person conversations.


As in previous TejonesConfs, we decided to use the open space format for this edition. Due to the small size of our group, we opted for a single track to allow for more focused discussions and deeper conversations. As always, the open space format proved to be a success, providing us with a minimal structure that allowed us to share experiences and spend a lot of time enjoying each other's company.


During the conference, we still managed to share some interesting experiences and insights. We discussed topics like observability and the transition from unstructured logs to structured events, lean software development and the importance of deferring commitment, the challenges of Kubernetes packaging, and the differences between clean architecture and vertical slice architecture. We also touched on product development through experimentation.


As always, the format allowed for some great conversations during lunch and breaks. We discussed issues like power dynamics in pair programming, the toxicity of certain corporate cultures, and the challenges facing our profession.


It was an absolute pleasure to reconnect with old friends and catch up on each other's lives. While we couldn't get the entire group together due to logistical limitations, it was wonderful to spend time with those who could make it. Some of us even continued the conversation over dinner.


Until next time, friends!


BTW Thanks to Nextail for allowing us to use their offices and to Fran for managing it.


Related: