Sunday, July 12, 2020

Good talks/podcasts (Jul 2020 I)

These are the best podcast/talks I've seen/listen to recently:
  • Boundaries (Gary Bernhardt) [Architecture, Architecture patterns, Design, Evolutionary Design] (⭐⭐⭐⭐⭐) An exploration of the boundaries between pieces of code, including: isolated testing, behavior vs. data, mutation vs. immutability, how data shape affords parallelism, transforming interface dependencies into data dependencies, and what a system optimizing each of these for natural isolation might look like.
  • Cross-functional Leadership for High-Performance Product Teams (Dan Olsen) [Engineering Culture, Inspirational, Lean, Product] Interesting intro about modern product management. Interesting to understand concepts as product market fit and the Product-Market Fit Pyramid.
  • Habits, Practices & Strategy For Building Viral Products (Oji Udezue) [Inspirational, Product, Product Strategy] A discussion on the habits, practices and strategy for building products that are extremely viral and able to catch the attention of your target market, so you can grow your business faster.
  • Ask for the unreasonable… and then get out of the way (Andrew Harcourt) [Engineering Culture, Inspirational, Teams, Technology Strategy] The talk describe some ways to map strategy to execution by setting “unreasonable” goals - and then working out how to get organisational constraints - and ourselves - out of the way.
  • Life as a Chief Architect (Gregor Hohpe) [Architecture, Inspirational, Technical leadership, Technology Strategy] Gregor Hohpe will share insights from his life as a Chief Architect.

Reminder, All these talks are interesting even just listening to them, without seeing them.


Continuous learning. What / How

“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
“Working software is the primary measure of progress.”

But making software is complex and requires a good understanding of the customer's needs, the market (WHAT), and the reactions of the system we are developing (HOW). Let's remember that current software systems are complex systems, and that implies that they have emerging behaviors that we don't know when we create them.
“The main idea behind complex systems is that the ensemble behaves in way not predicted by the components. The interactions matter more than the nature of the units. ... This is called an “emergent” property of the whole, by which parts and whole differ because what matters is the interactions between such parts. And interactions can obey very simple rules.” 
Nassim Nicholas Taleb

Therefore the bottleneck to create software that meets customer needs is continuous learning. But learning is useless if we bring the system down or piss off our customers.

Each of these iterations allows us to learn and make decisions for the next steps. Therefore we are interested in shortening the learning and decision cycles as much as possible.

What is Agile delivery's strategy for doing so?

Agile Delivery's strategy is to deliver increments in small safe steps (3S), each of which must attempt to generate learning about the WHAT (user needs) or the HOW (technology/system).

Learning WHAT / User needs / Valuable software

If we have a lean product development process, we will try to validate and learn this aspect by generating as little software as possible. This implies generating hypotheses and trying to achieve validated learning using everything we have at our disposal: data analysis, prototypes with or without code, or software increments. For the latter, we will have to divide using Vertical Slicing in increments so small as possible.
Of course, to learn about user behavior, it is also essential that we instrument the product to learn continuously from the use that the customer makes of the system.

Learning HOW / Technology/System / Working software

Software is a complex system. This means that we can't foresee the final behavior when we develop each of its parts independently. That is why it is essential to make small safe changes (technical Slicing) that allow us to learn from the behavior of the system in production without affecting the user. Of course, in order to get these learnings, we need to decouple the deployments (putting into production a change) from the releases (activating a change for the end-user).


In summary, the sure way to achieve this continuous learning of the WHAT and HOW that agile delivery offers is the Continuous Delivery of Small Safe Steps (both purely technical increases and increases in value for the user).
It seems that the data confirm that this is the right approach for making digital products.


Vertical Slicing Continuous Delivery

Sunday, June 28, 2020

Good talks/podcasts (Jun 2020 II)

These are the best podcast/talks I've seen/listen to recently:
  • Monolith Decomposition Patterns (Sam Newman) [Architecture patterns, DDD, Microservices] (⭐⭐⭐⭐⭐) Sam Newman shares some key principles and a number of patterns to use to incrementally decompose an existing system into microservices. He covers patterns that can work to migrate functionality out of systems hard to change, and looks at the use of strangler patterns, change data capture, database decomposition and more.
  • Strategic Autonomous Design: Patterns & Heuristics (Nick Tune) [DDD, Design] Practical techniques for identifying effective modules in your software systems and enabling autonomous teams in your organization, and you’ll see modeling patterns based on real-world examples from a variety of domains. Along the way, you’ll learn about the theoretical concepts underpinning the techniques, touching on DDD, Systems Thinking, Promise Theory, Theory of Constraints, and more. 

  • Product Discovery: Engineering perspective (Eduardo Ferro) [Engineering Culture, Product, Teams] A product team with excellent product discovery habits has a tremendous competitive advantage.​​​​​​​ Engineers must get involved in the continuous product discovery process. Learn how to leverage technology, team organization, and practices to facilitate this learning process. The talk tries to explain why every team needs Product Discovery, what does an effective team look like​​​​ and how our systems should facilitate Product Discovery.
    Additional Notes:
    Disclaimer: This is my first public talk in English, and I think the delivery is awful, but I think the content adds value, so I decided to include it in this post.
Reminder, All these talks are interesting even just listening to them, without seeing them.


Sunday, June 21, 2020

Charlas/Podcasts interesantes (Castellano) (2020 Junio)

Estas son algunas charlas y podcast interesantes que he visto o escuchado ultimamente:

Sunday, June 14, 2020

Good talks/podcasts (Jun 2020 I)

These are the best podcast/talks I've seen/listen to recently:

  • GOTO 2020 • Advanced Feature Flagging: It's All About The Data (Dave Karow) [Continuous Delivery, Engineering Culture, Product, Product Discovery] (⭐⭐⭐⭐⭐) A great talk on one of the fundamental techniques for making product discovery and continuous release. Excellent information about how to use them, define experiments, and interpret results.
  • The Marty Cagan special - ProductTank #27 Singapore (Marty Cagan) [Product, Product Discovery] (⭐⭐⭐⭐⭐) An open discussion on Modern Product Management. The talk contains a lot of interesting discussions during the Q&A. I think it covers all the underpinnings of modern product management.
  • YOW! 2019 Evolutionary Design Animated (James Shore) [Agile, Design, Engineering Culture, Evolutionary Design, XP] (⭐⭐⭐⭐⭐) Modern software development welcomes changing requirements, even late in the process, but how can we write our software so that those changes don’t create a mess? Evolutionary design is the key. It’s a technique that emerges from Extreme Programming, the method that brought us test-driven development, merciless refactoring, and continuous integration. James Shore first encountered Extreme Programming and evolutionary design nearly 20 years ago. Initially skeptical, he’s explored its boundaries ever since. In this session, James will share what he’s learned through in-depth animations of real software projects. You’ll see how designs evolve over time and you’ll learn how and when to use evolutionary design for your own projects.

Reminder, All these talks are interesting even just listening to them, without seeing them.