<?xml version="1.0" encoding="UTF-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title>Chemaclass - xp</title><subtitle>Tech Lead sharing practical insights on software craftsmanship, TDD, leadership, Bitcoin, and AI. Blog posts, book summaries, and conference talks.</subtitle><link rel="self" type="application/atom+xml" href="https://chemaclass.com/tags/xp/atom.xml"/><link rel="alternate" type="text/html" href="https://chemaclass.com"/><generator uri="https://www.getzola.org/">Zola</generator><updated>2024-05-30T00:00:00+00:00</updated><id>https://chemaclass.com/tags/xp/atom.xml</id><entry xml:lang="en"><title>What Kills Agility?</title><subtitle>Why Agile if you already do Scrum, Kanban, SAFe, or Waterfall?</subtitle><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><category term="team-management" scheme="https://chemaclass.com/tags/team-management/" label="Team Management"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><published>2024-05-30T00:00:00+00:00</published><updated>2024-05-30T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/what-kills-agility/"/><id>https://chemaclass.com/blog/what-kills-agility/</id><summary type="html">Why Agile, if you already do Scrum, Kanban, SAFe, or Waterfall? How we manage an organization defines its quality. Excellent management is crucial to avoid the Waterfall trap if we aim to build an Agile environment. But why would we want that? What's wrong with the way we already work?</summary><content type="html">&lt;p>Dozens of documents and spreadsheets, meetings over meetings, and yet without much impact, result in team misalignments, realized too late.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;p>How we manage an organization defines its quality. Excellent management is crucial to avoid the Waterfall trap if we aim to build an Agile environment. But why would we want that? What’s wrong with the way we already work?&lt;/p>
&lt;p>If you are already happy with how you and your team work together, that’s okay. However, what about reevaluating how you work to look for potential improvements?&lt;/p>
&lt;p>I am referring to evaluating your system and how you and the people around you act within it. What worked months or years ago might differ from what we could discover today, as part of continuous improvement.&lt;/p>
&lt;p>I dislike politics in the workplace, where each team looks out for themselves instead of having a bigger shared direction. This results in daily work filled with fear from above, passed down to the people below, maintaining an &lt;a href="/blog/unhealthy-working-environment">unhealthy working environment&lt;/a>. Game of Thrones is great as a fictional series, but not something to deal with in daily business.&lt;/p>
&lt;p>Agile was born precisely as a response to the excessive waste generated by politics and organizational micromanagement.&lt;/p>
&lt;p>Controlling and “slow performance” needed a more flexible approach. When people adopt a fixed mindset, they resist change, fear failure, and prioritize rigid processes and hierarchies. This conflicts with Agile’s core ideas of embracing change, continuous delivery with iterative development, flexible planning, and fostering collaboration and innovation.&lt;/p>
&lt;p>A fixed mindset leads to fear of experimentation and a reluctance to challenge the status quo, reducing progress and the potential for learning and growth.&lt;/p>
&lt;hr />
&lt;h2 id="what-kills-agility">What kills agility?
&lt;a class="heading-anchor" href="#what-kills-agility" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>Fixed mindset&lt;/strong>: Resistance to change, fear of failure, and prioritizing rigid processes over learning and adaptation strangle innovation and flexibility.&lt;/li>
&lt;li>&lt;strong>Excessive bureaucracy&lt;/strong>: Complex processes and excessive documentation slow down decision-making and responsiveness.&lt;/li>
&lt;li>&lt;strong>Micromanagement&lt;/strong>: Over-controlling leadership undermines team autonomy.&lt;/li>
&lt;li>&lt;strong>Lack of collaboration&lt;/strong>: Poor communication and teamwork hinder progress.&lt;/li>
&lt;li>&lt;strong>Ineffective feedback loops&lt;/strong>: Prevent adjustments and continuous improvement.&lt;/li>
&lt;li>&lt;strong>Fear of experimentation&lt;/strong>: A culture that punishes failure discourages experimentation and learning from mistakes.&lt;/li>
&lt;li>&lt;strong>Inflexible processes&lt;/strong>: Strict adherence without adapting to project needs.&lt;/li>
&lt;li>&lt;strong>Misaligned goals&lt;/strong>: Conflicting priorities reduce efficiency.&lt;/li>
&lt;li>&lt;strong>Lack of leadership’s support&lt;/strong>: Without backing from upper management, Agile initiatives can struggle to gain the necessary resources and commitment.&lt;/li>
&lt;li>&lt;strong>Poor technical practices&lt;/strong>: Neglecting technical excellence and good design can lead to a fragile codebase that is difficult to adapt and extend.&lt;/li>
&lt;/ul>
&lt;h3 id="what-can-you-do-about-it">What can you do about it?
&lt;a class="heading-anchor" href="#what-can-you-do-about-it" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Learn the basics of Extreme Programming (XP) and Lean Software Development.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>XP&lt;/strong>: Focused on software development practices and technical excellence, with specific practices like pair programming and Test-Driven Development (TDD).&lt;/li>
&lt;li>&lt;strong>Lean&lt;/strong>: Takes a broader approach, focusing on removing waste, optimizing flow, and improving processes across the organization.&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="/images/blog/2024-05-30/footer.webp" alt="blog-cover" />&lt;/p></content></entry><entry xml:lang="en"><title>Effective Pair Programming</title><subtitle>Embracing quality practices in your engineering culture</subtitle><category term="pair-programming" scheme="https://chemaclass.com/tags/pair-programming/" label="Pair Programming"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="tdd" scheme="https://chemaclass.com/tags/tdd/" label="Tdd"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><category term="clean-code" scheme="https://chemaclass.com/tags/clean-code/" label="Clean Code"/><published>2024-03-28T00:00:00+00:00</published><updated>2024-03-28T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/effective-pair-programming/"/><id>https://chemaclass.com/blog/effective-pair-programming/</id><summary type="html">A practical guide to pair programming that works: roles, rotation, when to pair, common pitfalls, and how to make sessions productive.</summary><content type="html">&lt;p>What is pair programming? Two people working together on the same problem, at the same time.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;p>It is not about one person showing off their skills in front of another, nor one person afraid of making mistakes due to an impostor syndrome.&lt;/p>
&lt;p>Each person will have a role:&lt;/p>
&lt;ul>
&lt;li>Navigator: he will pay attention to the bigger picture; eg: architecture, relation between collaborators, object design, etc.&lt;/li>
&lt;li>Driver: she will pay attention to the small details; eg: naming, code conventions, writing syntax, object design, etc.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>The pair could, and should, switch roles occasionally; eg: every X commits pushed, every 10 mins, … up to them.&lt;/p>
&lt;/blockquote>
&lt;p>Pair programming should not be considered a practice only for “seniors” to juniors, but regardless of the team members’ experience level.&lt;/p>
&lt;p>It is about the &lt;strong>collaboration flow&lt;/strong>, the quality communication, the absence of feeling judged, and the idea of welcoming vulnerability with your peers, knowing they will support and help you.&lt;/p>
&lt;p>It is about constantly challenging each other, seeking the most pragmatic solution while keeping it simple. Always looking for &lt;strong>quick feedback&lt;/strong> when speaking to each other, but also on the solution you agreed to implement and its direction.&lt;/p>
&lt;p>It is about the short, quick, and immediate feedback loop while talking to your partner, who &lt;strong>reviews your code on the fly&lt;/strong>. You can guide as a navigator or help the driver validate their ideas in a broader picture.&lt;/p>
&lt;p>It is about the constant &lt;strong>sharing&lt;/strong> of &lt;strong>knowledge&lt;/strong> atmosphere by default, reducing bus-factors and silo-knowledge areas to the maximum. Increasing the focus by having two minds working on the same task simultaneously.&lt;/p>
&lt;p>It is about &lt;strong>team cohesion&lt;/strong> and sharpening the feeling that we belong. When we understand each other’s strengths and weaknesses, we will realize how much we can help each other grow.&lt;/p>
&lt;p>&lt;img src="/images/blog/2024-03-28/footer.webp" alt="blog-img" />&lt;/p>
&lt;h2 id="how-can-you-practice-pair-programming">How can you practice pair programming?
&lt;a class="heading-anchor" href="#how-can-you-practice-pair-programming" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Pair programming can be done in different ways:&lt;/p>
&lt;ul>
&lt;li>You can start and finish a task with pairing. You can time-box it to 30, 60, 90 minutes. Either way, it is recommended to have pauses in the middle - Pomodoro.&lt;/li>
&lt;li>You can start the task together and stop when one of your peers feels confident enough to continue alone.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>It is up to the team, and the task in context, to decide when and how to apply pairing to get the best out of it.&lt;/p>
&lt;/blockquote>
&lt;p>This does not mean you must constantly work “no matter what” in pair. This is not about creating rules; on the contrary, it is about embracing this practice to the point you feel confident to choose when and how to use it to get the best out of it.&lt;/p>
&lt;p>Pair programming might become one of the best tools in your team toolbox for daily interactions. Not because you read it somewhere but because of the benefits you and your team will find.&lt;/p>
&lt;h3 id="common-patterns">Common Patterns
&lt;a class="heading-anchor" href="#common-patterns" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;h4 id="different-strategies-for-effective-pairing">Different strategies for effective pairing
&lt;a class="heading-anchor" href="#different-strategies-for-effective-pairing" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>Driver-Navigator&lt;/strong>: One person is driving the code (with the keyboard), focusing on the detail aspect of the task itself. The other is a navigator (no keyboard), having a more abstract picture of the task in mind.&lt;/li>
&lt;li>&lt;strong>Ping-Pong&lt;/strong>: Frequent switching driver-navigator roles in small interactions, e.g., every N minutes, every N commits, etc.&lt;/li>
&lt;li>&lt;strong>Backseat driver&lt;/strong>: The navigator engages actively with the driver.&lt;/li>
&lt;li>&lt;strong>Tourist guide&lt;/strong>: The navigator passively learns with the driver.&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="/images/blog/2024-03-28/good-pair-prog.jpg" alt="effective pair programming patterns" />&lt;/p>
&lt;h4 id="anti-patterns-while-pairing">Anti-patterns while pairing
&lt;a class="heading-anchor" href="#anti-patterns-while-pairing" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>&lt;strong>The silent partner&lt;/strong>: The navigator is not participating, and they are being silent.&lt;/li>
&lt;li>&lt;strong>The solo act&lt;/strong>: The driver ignores all inputs from the navigator.&lt;/li>
&lt;li>&lt;strong>Distracted pair&lt;/strong>: The pair does not focus on the problem to solve.&lt;/li>
&lt;li>&lt;strong>The Dictator&lt;/strong>: One person is telling what to do, ignoring the input from the other.&lt;/li>
&lt;li>&lt;strong>Philosophical pair&lt;/strong>: The pair is &lt;a href="/blog/bikeshedding/">bikeshedding&lt;/a> into irrelevant topics.&lt;/li>
&lt;li>&lt;strong>The code war&lt;/strong>: The pair does not reach an agreement and starts an unnecessary war, which wastes time and effort.&lt;/li>
&lt;/ul>
&lt;p>&lt;img src="/images/blog/2024-03-28/anti-pair-prog.jpg" alt="pair programming anti-patterns" />&lt;/p>
&lt;p>&lt;strong>Want more?&lt;/strong> Check this out: &lt;a rel="external" href="https://www.figma.com/file/FCmGwRPIO8cLowDRraJhgr/Learning-TDD">Learning Through KATAS&lt;/a>&lt;/p>
&lt;p>&lt;img src="/images/blog/2024-03-28/learning-through-katas.jpg" alt="learning through katas" />&lt;/p>
&lt;h2 id="the-takeaway">The takeaway
&lt;a class="heading-anchor" href="#the-takeaway" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Pairing is not a rule to enforce, it is a tool to reach for. Use it when the task is complex, the knowledge is siloed,
or the stakes are high. Skip it when the work is trivial. The goal is never “always pair”, it is &lt;strong>better software and a
stronger team&lt;/strong>. Pick one real task this week, pair on it, and switch roles often. The benefits show up faster than you
expect.&lt;/p>
&lt;aside class="kudos">
&lt;span class="kudos__icon" aria-hidden="true">🧠&lt;/span>
&lt;div class="kudos__content">
&lt;p>Thanks to my friend &lt;a rel="external" href="https://x.com/evrtrabajo">Manu&lt;/a>, who helped me with this post. We even share a &lt;a rel="external" href="https://phpconference.com/agile-culture/practical-tdd-workshop/">workshop&lt;/a> on this topic.&lt;/p>
&lt;/div>
&lt;/aside></content></entry><entry xml:lang="en"><title>Deployments on Fridays</title><subtitle>Why "should we not" deploy to production on Fridays?</subtitle><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><category term="productivity" scheme="https://chemaclass.com/tags/productivity/" label="Productivity"/><published>2024-02-25T00:00:00+00:00</published><updated>2024-02-25T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/deployments-on-fridays/"/><id>https://chemaclass.com/blog/deployments-on-fridays/</id><summary type="html">I have heard multiple times, from various people, the idea of panic towards deploying on Fridays. How good is that idea of banning the day before weekend from delivering new value to our clients or customers?</summary><content type="html">&lt;p>I have heard multiple times, from various people, the idea of panic towards deploying on Fridays. How good is that idea of banning the day before weekend from delivering new value to our clients or customers?&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;p>The main argument in favor of NOT deploying on Friday is based on the idea that we “should be paranoid” with our software and that it could fail when we touch it. So, we “should assume” the worst whenever we deploy a new release version of our system.&lt;/p>
&lt;p>However, the critical factor here is Why? Why should we not deploy on Fridays? Is it OK to be afraid of our own software system, that we live in a constant panic of breaking it the day after we have done a deployment? How much impact should our releases have? How can we make sure the deployment won’t break the live system?&lt;/p>
&lt;p>Your Continuous Integration/Delivery pipelines, end-to-end and other types of tests in place, automated scaling policies, a previous staging sandbox to perform even manual tests if necessary, etc., will determine the security and confidence for any of your releases. However, the quality of these topics is a deal-breaker to have enough confidence on how, when and why would it make sense to release to production.&lt;/p>
&lt;p>The goal is build a system where deployments to production should be as often, smooth and easy as possible; any time, any day. Being afraid of your system should not be the aim. On the contrary, it should be something to work towards to fix it.&lt;/p>
&lt;p>The team dynamics are also an essential factor here. If we establish fear of deployments on Fridays, and fear of our system, that will end up in lack of accountability by default. This reminds me of &lt;a href="/readings/the-five-dysfunctions-of-a-team/">The Five Dysfunctions of a Team&lt;/a>.&lt;/p>
&lt;p>&lt;img src="/images/blog/2024-02-25/middle.jpg" alt="deploying on fridays" />&lt;/p>
&lt;p>If you deploy small and frequent changes as soon as they can guarantee 100% quality value success, why delay such an incremental improvement to your system?&lt;/p>
&lt;p>Coming back to “Why should we not deploy on Fridays?” The only reason I can think of is being afraid that we have to work on Saturday on the broken thing we delivered on Friday. However, I wonder if any option was available, so we could have identified such a broken thing during the working Friday itself.&lt;/p>
&lt;p>Monitoring your live system is crucial to guarantee the health after each deployment. This is essential to ensure everything is working fine and smoothly. To build a resilience system, this should trigger alarms to notify someone responsible for addressing the issue, disable or revert the latest “broken” feature… there are many techniques to create awareness and act on them.&lt;/p>
&lt;p>In case of doubt, you could use feature flags to disable the feature you will deploy. Still, you prefer not to enable it during the weekend while keeping the option of adding value and deploying anytime always open.&lt;/p>
&lt;p>I believe &lt;strong>frequent&lt;/strong> and &lt;strong>small releases&lt;/strong> to production &lt;strong>are key&lt;/strong>; any time, any date, as far as it makes sense, and there is a clear path to bringing value soon to the customer to get feedback ASAP.&lt;/p>
&lt;blockquote>
&lt;p>Deliver quality value in small increments, as frequently as possible.&lt;/p>
&lt;/blockquote>
&lt;p>Being able to deploy on Fridays (if needed or wanted) impacts the team’s confidence. Similarly, forbidding deployments on Fridays impacts the team’s self-esteem as well.&lt;/p>
&lt;p>&lt;img src="/images/blog/2024-02-25/footer.webp" alt="frequent small releases" />&lt;/p></content></entry><entry xml:lang="en"><title>How Do You Get Everyone on Board?</title><subtitle>How do you deal with people reluctant to change?</subtitle><category term="leadership" scheme="https://chemaclass.com/tags/leadership/" label="Leadership"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><category term="team-management" scheme="https://chemaclass.com/tags/team-management/" label="Team Management"/><category term="mentoring" scheme="https://chemaclass.com/tags/mentoring/" label="Mentoring"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><published>2023-08-02T00:00:00+00:00</published><updated>2023-08-02T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/how-do-you-get-everyone-on-board/"/><id>https://chemaclass.com/blog/how-do-you-get-everyone-on-board/</id><summary type="html">I was invited to the WeAreDevelopers World Congress to give a tech talk about my experience with Extreme Programming and the profound benefits of embracing change in your work and life.</summary><content type="html">&lt;p>I was invited to the WeAreDevelopers World Congress to give a tech talk about my experience with XP and the profound benefits of embracing change in your work and life.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;p>With more than 12k attendees, 300 speakers, and ~10 tracks in parallel, I was invited to give not one but two talks. One is about my experience with Extreme Programming and the profound benefits of embracing change in your work and life.&lt;/p>
&lt;p>I especially enjoyed the audience engagement and feedback they gave me after each talk. In particular, a question I had faced many times during my career: “&lt;strong>How do you deal with people reluctant to change?&lt;/strong>”&lt;/p>
&lt;hr />
&lt;p>This is one of the most complex topics affecting any team, regardless of their profession. But, especially in our constantly changing software industry, if you are reluctant to embrace change, you will do more harm than good to your team, career, and yourself.&lt;/p>
&lt;p>As stated in &lt;a href="/readings/peopleware/">Peopleware&lt;/a>, “&lt;em>our software profession is less about computers and more about humans and their interactions&lt;/em>”. This is usually the root problem for people; it’s a human problem first.&lt;/p>
&lt;p>To become truly agile, you must have a good foundation of &lt;strong>trust&lt;/strong> among your peers. Without trust, there is &lt;a href="/readings/the-five-dysfunctions-of-a-team/">no team&lt;/a>, and the primary responsibility of a &lt;a href="/blog/great-leadership/">good leader&lt;/a> is to help create a trusted environment without fear of healthy conflicts. Everyone feels they can speak and express freely in a safe environment.&lt;/p>
&lt;p>A &lt;strong>safe environment&lt;/strong> means you don’t need to carry on armor the whole day to protect yourself from others, so you will have more energy to drive excellence in your workplace.&lt;/p>
&lt;p>But still, despite your effort to create a trustable and safe environment, you might encounter people reluctant to change. For those, you might need to try different approaches. How can you help create trust among everyone?&lt;/p>
&lt;blockquote>
&lt;p>Don’t be afraid of failure; instead, think that everything you do is an experiment from which you will learn something. And anything that brings you closer to a better state is better than nothing.&lt;/p>
&lt;/blockquote>
&lt;p>The key here is to find a way to connect with people by understanding how they understand their potential so you can empower them and help them grow.&lt;/p>
&lt;p>&lt;img src="/images/blog/2023-08-02/middle.jpg" alt="middle" />&lt;/p>
&lt;h3 id="grant-time-for-reading">Grant time for reading
&lt;a class="heading-anchor" href="#grant-time-for-reading" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>1:1 meetings are ideal for establishing personal connections with your peers. However, you might feel that the situation requires an additional push, especially if you have someone who doesn’t like to speak about themselves, and it is hard to know what they think about what’s happening.&lt;/p>
&lt;p>Here is an idea you could try:&lt;/p>
&lt;ul>
&lt;li>Give them a book containing ideas or knowledge that could benefit the whole.&lt;/li>
&lt;li>Allow reading this book during work time, eg: on Fridays after lunch. This is a company investment for the development of your team.&lt;/li>
&lt;li>The book should be read in 3-4 hours, or a couple of Fridays, depending on the number of pages.&lt;/li>
&lt;li>Don’t wait until the book is finished to talk about it. Follow the progress.&lt;/li>
&lt;li>You will have great topics to discuss during your next 1:1.&lt;/li>
&lt;/ul>
&lt;h3 id="you-could-use-any-book-for-this-exercise">You could use any book for this exercise
&lt;a class="heading-anchor" href="#you-could-use-any-book-for-this-exercise" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Any book would be fine. Still, if you are looking for great examples, these are my favourite three to start thriving a conversation:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="/readings/who-moved-my-cheese/">Who moved my cheese?&lt;/a>&lt;/strong> is a metaphor of the different attitudes that people adopt as part of their identity in life when they have to confront any change.&lt;/li>
&lt;li>&lt;strong>&lt;a href="/readings/extreme-programming-explained/">Extreme Programming Explained&lt;/a>&lt;/strong> contains a compilation of values, principles, and practices highly related to the human touch in our software industry. Focusing on the team aspect, collaboration with your peers, and creating a sense of mastery and purpose in our craft.&lt;/li>
&lt;li>&lt;strong>&lt;a href="/readings/start-with-why/">Start with Why&lt;/a>&lt;/strong> addresses the importance of starting with “Why?” in order to define a purpose for anything we do.&lt;/li>
&lt;/ul>
&lt;p>Experiment with any book, timeframe, person, or group to create a shared understanding of the team’s foundational values and motivations. The goal is to engage in active knowledge-sharing while cultivating a team that feels they belong, fostering passion at work. This will help create trust, and you can start building on top of it.&lt;/p>
&lt;blockquote>
&lt;p>If you are looking for books to help scale up your leadership skills, there you go: “&lt;a href="/blog/great-leadership">Great Leadership&lt;/a>”.&lt;/p>
&lt;/blockquote>
&lt;hr />
&lt;p>You cannot force people to change. On the contrary, the more you try to force it, the harder they will make it for you. Instead, focus on understanding them by acknowledging what they feel and thinking about what they do to create a common ground of &lt;a href="/blog/understanding-people">understanding each other&lt;/a>.&lt;/p>
&lt;p>&lt;img src="/images/blog/2023-08-02/footer.jpg" alt="footer" />&lt;/p>
&lt;blockquote>
&lt;p>Photos from me at WeAreDevelopers World Congress, Berlin 2023.&lt;/p>
&lt;/blockquote></content></entry><entry xml:lang="en"><title>Interview About XP and Agile</title><subtitle>Agile is about HOW you do certain things</subtitle><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="tdd" scheme="https://chemaclass.com/tags/tdd/" label="Tdd"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><published>2023-01-09T00:00:00+00:00</published><updated>2023-01-09T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/interview-about-xp-and-agile/"/><id>https://chemaclass.com/blog/interview-about-xp-and-agile/</id><summary type="html">My interview with devm.io regarding Agile and Extreme Programming. Agile is more about HOW you do certain things, rather than WHAT things you do.</summary><content type="html">&lt;p>My interview with &lt;strong>devm.io&lt;/strong> regarding Agile and Extreme Programming.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;hr />
&lt;p>&lt;strong>devm.io: We talked to Chema, a software developer and an Extreme Programming expert, about his favourite topic and his upcoming live event &lt;a rel="external" href="https://devm.io/update-your-team-to-be-more-extreme/">Update Your Team To Be More Extreme&lt;/a>.&lt;/strong>&lt;/p>
&lt;h2 id="could-you-tell-us-a-little-about-yourself-who-you-are-and-what-you-do">Could you tell us a little about yourself, who you are, and what you do?
&lt;a class="heading-anchor" href="#could-you-tell-us-a-little-about-yourself-who-you-are-and-what-you-do" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Chema: My name is Jose Maria Valera Reales, but everyone calls me Chema. I’m originally from Spain but have lived in Berlin since 2015. I’ve been working as a software developer since 2013. In recent years, I have focused on achieving excellence and figuring out how to help my peers and, with them, the entire software community to improve in our profession.&lt;/p>
&lt;p>I am currently a Tech Lead at &lt;a rel="external" href="https://teufel.de/">Lautsprecher Teufel GmbH&lt;/a>, where I work with the e-commerce webshop team. I also enjoy &lt;a rel="external" href="https://github.com/Chemaclass">open-source software&lt;/a>, so I enjoy creating pull requests for other repositories, and I also love when I receive pull requests from others.&lt;/p>
&lt;h2 id="how-would-you-describe-extreme-programming-what-makes-it-so-extreme">How would you describe Extreme Programming? What makes it so “extreme?”
&lt;a class="heading-anchor" href="#how-would-you-describe-extreme-programming-what-makes-it-so-extreme" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Extreme Programming is the most straightforward and pragmatic approach to embracing Agile in your software team. It incorporates solutions based on values, principles, and practices. You don’t have to use or do everything, but rather whatever fits you and your team in your context. However, these are helpful general solutions that work better when combined.&lt;/p>
&lt;p>From my experience, the word “extreme” can be misleading, but I see it as an opportunity to emphasise the difficulty of the fundamentals behind it. The critical point is realising that our “common sense” is not as “common” as we tend to think, nor the best practices for practical teamwork. Therefore, this is about pushing ourselves to extreme effectiveness, collaboration, and satisfaction while working with others.&lt;/p>
&lt;h2 id="you-will-host-a-live-event-on-devm-io-on-the-topic-on-january-19th-could-you-give-us-a-sneak-peek-of-what-your-audience-can-expect">You will host a live event on devm.io on the topic on January 19th. Could you give us a sneak peek of what your audience can expect?
&lt;a class="heading-anchor" href="#you-will-host-a-live-event-on-devm-io-on-the-topic-on-january-19th-could-you-give-us-a-sneak-peek-of-what-your-audience-can-expect" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>We will explore how a software team works nowadays, the common issues we encounter, and what solutions we could apply to improve our team routines. We will look for the real meaning of Agile, focusing on Extreme Programming ideas.&lt;/p>
&lt;p>In addition, I will share some ideas to help your team create learning opportunities with concrete examples that any team can incorporate into their current work.&lt;/p>
&lt;h2 id="during-the-event-you-will-also-tell-us-something-about-katas-what-exactly-are-katas">During the event, you will also tell us something about Katas. What exactly are Katas?
&lt;a class="heading-anchor" href="#during-the-event-you-will-also-tell-us-something-about-katas-what-exactly-are-katas" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>The term “kata” comes from the repetitive movements done in karate that help you improve your fighting skills.&lt;/p>
&lt;p>Why “code katas?” Because as a group, we need to practice more. Most of our learning takes place on the job, so most of our mistakes are also made there. And because we want to keep PROD, we’re reluctant to try new things.&lt;/p>
&lt;p>Katas exist to help developers get the same benefits you would get from practice in any other profession. These simple, simulation exercises let you experiment and learn without the pressure of PROD. There are no right or wrong answers in any software kata: the benefit comes from the process, not the result.&lt;/p>
&lt;p>There are katas to help you improve your refactoring skills (such as Gilded Rose Refactoring Kata by Emily Bache) or your testing skills (easy ones like Fizz Buzz or Roman Numerals, or more advanced ones like the Bank Kata by Sandro Mancuso). They’re also great for building confidence when programming with others, watching and practising different roles collaboratively, fostering team cohesion, etc.&lt;/p>
&lt;h2 id="what-role-do-agile-methods-play-in-software-development-for-you">What role do Agile methods play in software development for you?
&lt;a class="heading-anchor" href="#what-role-do-agile-methods-play-in-software-development-for-you" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>The very first question here is to define what Agile methods are. In the end, everyone communicates somehow, provides feedback to others, and simplifies to some level. Sometimes people have the courage to speak their minds and sometimes they do not, and usually, they try to respect their peers. So, for me, Agile is more about “how” you do certain things rather than “what” things you do.&lt;/p>
&lt;p>Agile is a highly collaborative working process at any level, which might have a challenging learning curve at the beginning, but it pays off sooner than you might expect.&lt;/p>
&lt;h2 id="which-topic-in-the-area-of-agile-should-receive-more-attention">Which topic in the area of agile should receive more attention?
&lt;a class="heading-anchor" href="#which-topic-in-the-area-of-agile-should-receive-more-attention" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Team building and embracing agility, starting with asking “why?” We need to challenge the status quo more often and ask ourselves why we work the way we do and how and what we could do differently to keep improving and never stop learning.&lt;/p>
&lt;blockquote>
&lt;p>You can also read the interview from the original link: &lt;a rel="external" href="https://devm.io/agile/extreme-programming-agile">https://devm.io/agile/extreme-programming-agile&lt;/a>.&lt;/p>
&lt;/blockquote></content></entry><entry xml:lang="en"><title>Working Agile with Non-Agile Teams</title><subtitle>How can you work with other teams that aren't agile?</subtitle><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><category term="team-management" scheme="https://chemaclass.com/tags/team-management/" label="Team Management"/><published>2022-11-11T00:00:00+00:00</published><updated>2022-11-11T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/working-agile-with-non-agile-teams/"/><id>https://chemaclass.com/blog/working-agile-with-non-agile-teams/</id><summary type="html">Let's assume you already know what the agile manifesto is. Let's consider that you apply most of the extreme programming values, principles, and practices. How can you work with other teams that aren't agile?</summary><content type="html">&lt;p>Let’s assume you already know what the agile manifesto is. Let’s consider that you apply most of the “extreme
programming” values, principles, and practices. How can you work with other teams that aren’t agile?&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;blockquote>
&lt;ul>
&lt;li>Individuals and interactions over processes and tools&lt;/li>
&lt;li>Working software over comprehensive documentation&lt;/li>
&lt;li>Customer collaboration over contract negotiation&lt;/li>
&lt;li>Responding to change over following a plan&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;p>You’re using short feedback loops, where things are constantly changing. You can feel that the team is alive and
every one is essential.&lt;/p>
&lt;p>You &lt;strong>embrace the change&lt;/strong> to the point that you &lt;strong>enjoy&lt;/strong> going out of your comfort zone whenever needed. Seeking to
create &lt;strong>value&lt;/strong> for your team and its dynamics, and always considering personal growth.&lt;/p>
&lt;p>But sure, let’s assume all that, and everything else I might have missed regarding “&lt;strong>agility&lt;/strong>,” how could you work
with an external team that is not agile? How could your “perfectly agile team” work with another group of people with
nothing to do with software? For example, a doctor.&lt;/p>
&lt;p>A doctor has no time to learn about your “agile values and principles for software development.” A doctor has no time to
learn about “extreme programming.” Similarly, they don’t have time to learn about testing, design, architecture, and
&lt;strong>good practices&lt;/strong> related to software in general.&lt;/p>
&lt;p>How could you create a &lt;strong>bridge&lt;/strong> between that doctor and your software team?&lt;/p>
&lt;h2 id="how-could-you-work-agile-with-that-doctor">How could you work agile with that doctor?
&lt;a class="heading-anchor" href="#how-could-you-work-agile-with-that-doctor" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>If you need to work with that doctor is because he/she should be a domain expert. I suggest getting one or two of your
team members to meet with that expert for 30/60 min, so they can talk and share their impressions. And then repeat this
as much as possible to shorten the feedback loop. For example, once a week.&lt;/p>
&lt;p>Collecting those requirements and impressions from the experts and then driving the design of your software according to
that is &lt;a rel="external" href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain-Driven Design&lt;/a>. You can find a lot of documentation
about &lt;em>DDD&lt;/em> in books (like &lt;em>&lt;a href="/readings/domain-driven-design-distilled">Domain-Driven Design Distilled&lt;/a>&lt;/em>) or in many
blogs on the Internet.&lt;/p>
&lt;p>However, the critical aspect here is not what requirements or impressions are &lt;em>being resolved&lt;/em> but &lt;strong>how&lt;/strong>.
How could you work agile with that doctor?&lt;/p>
&lt;p>&lt;img src="/images/blog/2022-11-11/middle.jpg" alt="blog-middle" />&lt;/p>
&lt;blockquote>
&lt;p>Agile is about quick feedback. It’s about effective communication and reducing waste while aiming for simplicity.&lt;/p>
&lt;/blockquote>
&lt;h3 id="by-truly-applying-these-five-values-you-re-already-acting-agile">By truly applying these five values, you’re already acting agile
&lt;a class="heading-anchor" href="#by-truly-applying-these-five-values-you-re-already-acting-agile" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Communication&lt;/li>
&lt;li>Feedback&lt;/li>
&lt;li>Simplicity&lt;/li>
&lt;li>Courage&lt;/li>
&lt;li>Respect&lt;/li>
&lt;/ul>
&lt;p>These &lt;strong>abstract goals&lt;/strong> apply to any profession, and even life, not just software.&lt;/p>
&lt;blockquote>
&lt;p>Continuous communication helps shorten the feedback loop, which simplifies the tasks. Always with the courage to
address the truth and respect for each other.&lt;/p>
&lt;/blockquote>
&lt;h3 id="practices-are-the-things-that-you-do">Practices are the things that you do
&lt;a class="heading-anchor" href="#practices-are-the-things-that-you-do" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Sit Together&lt;/li>
&lt;li>Pair Programming&lt;/li>
&lt;li>Test First&lt;/li>
&lt;li>Incremental Design&lt;/li>
&lt;li>and many more&lt;/li>
&lt;/ul>
&lt;p>And despite having a technical name, they might apply to any profession:&lt;/p>
&lt;blockquote>
&lt;ul>
&lt;li>Sit Together &amp;amp; Pair Programming: &lt;strong>think and do&lt;/strong> with other peers&lt;/li>
&lt;li>Test First: &lt;strong>verify your assumptions&lt;/strong> first, then solve the problem&lt;/li>
&lt;li>Incremental Design: whatever you do, &lt;strong>make it better&lt;/strong> incrementally&lt;/li>
&lt;/ul>
&lt;/blockquote>
&lt;h3 id="principles-guide-and-motivate-the-practices-to-the-values">Principles guide and motivate the practices to the values
&lt;a class="heading-anchor" href="#principles-guide-and-motivate-the-practices-to-the-values" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Mutual Benefit&lt;/li>
&lt;li>Diversity&lt;/li>
&lt;li>Failure&lt;/li>
&lt;li>Opportunity&lt;/li>
&lt;li>Baby Steps&lt;/li>
&lt;li>Quality&lt;/li>
&lt;li>and many more&lt;/li>
&lt;/ul>
&lt;p>Mutual benefit is the most important because it’s about finding practices that benefit us now, us later, and the
customer too.&lt;/p>
&lt;blockquote>
&lt;p>Other principles include the diversity of ideas. Don’t be afraid of failure. Look at everything you do as
an opportunity for learning. Avoid giant steps because they have a higher risk of failing. Aim for a high-quality system
because they are more predictable and easier to change.&lt;/p>
&lt;/blockquote>
&lt;h2 id="the-question-remains-are-you-agile">The question remains: are you agile?
&lt;a class="heading-anchor" href="#the-question-remains-are-you-agile" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>I truly believe an agile team is the one who can cope with change at team level. Therefore, you must first master
agile within your team, and then you can collaborate with other teams in an “agile way”.&lt;/p>
&lt;p>Once you have internalized these points above, you can apply them while working with anyone from any team.&lt;/p>
&lt;p>While these isolated ideas are good, they are even more powerful when combined. They create an atmosphere of curiosity
and active learning. It might even wake up some &lt;strong>passion&lt;/strong> for your profession that builds an aura of team cohesion, and
just like that, the team breathes on its own.&lt;/p>
&lt;p>Everyone cares and takes full responsibility for keeping the team healthy by building &lt;strong>trust&lt;/strong>. There is no fear of healthy
&lt;strong>conflicts&lt;/strong>. They feel empowered and &lt;strong>accountable&lt;/strong> to their commitments. The team &lt;strong>celebrates&lt;/strong> their results and
learns from their &lt;strong>mistakes&lt;/strong>; there is no need for masks anymore.&lt;/p>
&lt;p>That’s when the magic starts to happen, and suddenly you can work agile with any team, especially yours.&lt;/p>
&lt;p>&lt;img src="/images/blog/2022-11-11/footer.jpg" alt="blog-footer" />&lt;/p></content></entry><entry xml:lang="en"><title>Different Beliefs About Software Quality</title><subtitle>Some thoughts about software quality among your team</subtitle><category term="clean-code" scheme="https://chemaclass.com/tags/clean-code/" label="Clean Code"/><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><category term="career" scheme="https://chemaclass.com/tags/career/" label="Career"/><published>2022-10-08T00:00:00+00:00</published><updated>2022-10-08T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/different-beliefs-about-software-quality/"/><id>https://chemaclass.com/blog/different-beliefs-about-software-quality/</id><summary type="html">What to do when working on "bad software" and you can't improve it because it is against the beliefs of your peers? Should you change the company?</summary><content type="html">&lt;p>I recently got a great question on Twitter which got me thinking for a while and I decided to share my thoughts about it.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;hr />
&lt;h2 id="the-tweet-that-started-this">The tweet that started this
&lt;a class="heading-anchor" href="#the-tweet-that-started-this" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>But first, some context: I am feeling great because the codebase where I work is getting better and better, so I am tweeting this:&lt;/p>
&lt;blockquote>
&lt;p>“As software improves with time, you can feel you’re doing right.”&lt;/p>
&lt;/blockquote>
&lt;p>And then I got a question asking for suggestions:&lt;/p>
&lt;p>&lt;img src="/images/blog/2022-10-08/tweet.jpg" alt="blog-tweet" />&lt;/p>
&lt;p>So there we go…&lt;/p>
&lt;hr />
&lt;h2 id="my-answer">My answer
&lt;a class="heading-anchor" href="#my-answer" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="create-agreements">Create agreements
&lt;a class="heading-anchor" href="#create-agreements" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The first thing is to create agreements about what quality software means for your team and yourself. This helps clarify
what software culture you want to establish and work towards that direction. Leaving your company should be the &lt;em>last
resort&lt;/em> once you have no other option.&lt;/p>
&lt;p>Before thinking about leaving your company, I would ask you:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Why do you think&lt;/strong> you cannot improve the working codebase of your company?&lt;/li>
&lt;li>&lt;strong>What can you do&lt;/strong> to reduce the friction between your different beliefs regarding what quality means for software?&lt;/li>
&lt;/ul>
&lt;p>There is no perfect codebase to work on because software is a living entity and constantly changes. So, at least for me,
quality software is the one that can cope with change smoothly.&lt;/p>
&lt;p>Once you have agreed on that goal, and while there are multiple ways to achieve that result, my favorite way of working
is keeping an &lt;strong>agile mindset&lt;/strong> with doses of &lt;strong>extreme programming&lt;/strong> values, principles, and practices in mind.&lt;/p>
&lt;h3 id="software-is-about-people">Software is about people
&lt;a class="heading-anchor" href="#software-is-about-people" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Software is not just about writing &lt;em>clean and solid code&lt;/em>. This is indeed desired, and we should aim for that, but we must
first understand why we want that. The “&lt;em>why&lt;/em>” is based on the &lt;strong>values&lt;/strong> that you have as a team.&lt;/p>
&lt;p>If you don’t share the same purpose, the same “why,” then you won’t &lt;em>enjoy&lt;/em> working together, and in such a case, I would
advise looking for another company that shares your values. But, before that, I would strongly suggest fixing the deeper
issue and helping your team improve.&lt;/p>
&lt;h3 id="understanding-your-why">Understanding your why
&lt;a class="heading-anchor" href="#understanding-your-why" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>You first need to deeply understand your “&lt;em>why&lt;/em>” so you can transmit this to your peers and the people around you. Have
you tried all you can to create awareness about your “&lt;em>why&lt;/em>”?&lt;/p>
&lt;p>Some ideas include encouraging collaborative programming (pair/mob), presenting some internal tech talks, creating a
culture of sharing knowledge on a regular daily basis, creating awareness about the current status quo, and looking for
opportunities to improve everywhere.&lt;/p>
&lt;h3 id="your-career-path">Your career path
&lt;a class="heading-anchor" href="#your-career-path" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>If, after several months of (really) trying these ideas, none of them work, look for a new company that shares your
beliefs. After all, you’re the first and primary responsible person for taking care of your career path.&lt;/p>
&lt;blockquote>
&lt;p>Original &lt;a rel="external" href="https://x.com/Chemaclass/status/1578425454562021376">twitter thread&lt;/a>.&lt;/p>
&lt;/blockquote>
&lt;hr />
&lt;p>&lt;img src="/images/blog/2022-10-08/footer.webp" alt="blog-footer" />&lt;/p>
&lt;h2 id="extra-thoughts">Extra thoughts
&lt;a class="heading-anchor" href="#extra-thoughts" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>If &lt;strong>you want something to be different&lt;/strong>, don’t wait till it’s changed automatically. Try to &lt;strong>change it&lt;/strong>; if it’s not
working, leave it. Maybe you don’t belong in that place.&lt;/p>
&lt;p>On the other hand, it’s crucial to reflect if you see that pattern often repeating (changing companies too quickly). In
such a case, maybe the problem isn’t the companies but yourself.&lt;/p>
&lt;p>Software development is not just about code but &lt;strong>business&lt;/strong>. It’s essential to be aware of finding a fair &lt;em>trade-off&lt;/em>
between speed, costs, and quality, depending on the situation. You might want to use some &lt;em>tech debt&lt;/em> to conquer the
market as soon as possible.&lt;/p>
&lt;p>It doesn’t make sense to have “low quality” as part of the identity of any team. Every team has certain quality
expectations. Therefore, the &lt;strong>key&lt;/strong> here is to &lt;strong>agree on what good quality is&lt;/strong>.&lt;/p>
&lt;aside class="kudos">
&lt;span class="kudos__icon" aria-hidden="true">🧠&lt;/span>
&lt;div class="kudos__content">
&lt;p>Thanks to my former Engineer Manager, Evgenii Sokolov, who inspired me to write these extra lines after sharing the original post.&lt;/p>
&lt;/div>
&lt;/aside></content></entry><entry xml:lang="en"><title>Clean Craftsmanship</title><subtitle>Disciplines, Standards, and Ethics</subtitle><category term="clean-code" scheme="https://chemaclass.com/tags/clean-code/" label="Clean Code"/><category term="tdd" scheme="https://chemaclass.com/tags/tdd/" label="Tdd"/><category term="refactoring" scheme="https://chemaclass.com/tags/refactoring/" label="Refactoring"/><category term="testing" scheme="https://chemaclass.com/tags/testing/" label="Testing"/><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><published>2022-07-11T00:00:00+00:00</published><updated>2022-07-11T00:00:00+00:00</updated><author><name>
Robert C. Martin</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/readings/clean-craftsmanship/"/><id>https://chemaclass.com/readings/clean-craftsmanship/</id><summary type="html">Robert C. Martin covers the three pillars of software craftsmanship: TDD disciplines with practical examples, professional standards for teams, and the ethical responsibilities of programmers.</summary><content type="html">&lt;span id="continue-reading">&lt;/span>
&lt;p>The book is divided into three parts: the disciplines, the standards, and the ethics.&lt;/p>
&lt;p>The 1st part is the most technical one. It guides you with TDD examples, showing how testing can help you to design your code.&lt;/p>
&lt;p>The 2nd part is about productivity, quality, and courage.&lt;/p>
&lt;p>The 3rd part is about how did we get here in terms of people who develop software, and our responsibility within
our ethics about do no harm, integrity, and teamwork.&lt;/p>
&lt;hr />
&lt;p>One of my favourite parts from the book:&lt;/p>
&lt;blockquote>
&lt;p>Our software industry is wildly dynamic and changing; therefore, we must all be continuously aggressive learners.&lt;/p>
&lt;p>How and when do you do this learning? If your employer provides you the time and space to do this kind of learning, then
take as much advantage of it as you can. If your employer is not helpful, then you’ll have to learn on your own time.&lt;/p>
&lt;p>Be prepared to spend several hours per month on it. Make sure you have the personal time set aside for it.&lt;/p>
&lt;p>Yes, I know you have family obligations, bills to pay, planes to catch, and you’ve got a life. Okay, but you also have a
profession. And professions need care and maintenance. I expect us all to be continuous aggressive learners.&lt;/p>
&lt;p>&lt;code>Chapter 11. Courage - Continuous Aggressive Learning&lt;/code>&lt;/p>
&lt;/blockquote>
&lt;hr />
&lt;h2 id="index">Index
&lt;a class="heading-anchor" href="#index" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="part-i-the-disciplines">Part I: The Disciplines
&lt;a class="heading-anchor" href="#part-i-the-disciplines" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;h4 id="chapter-1-craftsmanship">Chapter 1. Craftsmanship
&lt;a class="heading-anchor" href="#chapter-1-craftsmanship" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Extreme Programming&lt;/li>
&lt;li>Test-Driven Development&lt;/li>
&lt;li>Refactoring&lt;/li>
&lt;li>Simple Design&lt;/li>
&lt;li>Collaborative Programming&lt;/li>
&lt;li>Acceptance Tests&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-2-test-driven-development">Chapter 2. Test-Driven Development
&lt;a class="heading-anchor" href="#chapter-2-test-driven-development" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Overview&lt;/li>
&lt;li>The Basics&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-3-advanced-tdd">Chapter 3. Advanced TDD
&lt;a class="heading-anchor" href="#chapter-3-advanced-tdd" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Getting Stuck&lt;/li>
&lt;li>Arrange, Act, Assert&lt;/li>
&lt;li>Test Doubles&lt;/li>
&lt;li>Architecture&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-4-test-design">Chapter 4. Test Design
&lt;a class="heading-anchor" href="#chapter-4-test-design" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Testing Databases&lt;/li>
&lt;li>Testing GUIs&lt;/li>
&lt;li>Test Patterns&lt;/li>
&lt;li>Test-Specific Subclass&lt;/li>
&lt;li>Humble Object&lt;/li>
&lt;li>Test Design&lt;/li>
&lt;li>Breaking the Correspondence&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-5-refactoring">Chapter 5. Refactoring
&lt;a class="heading-anchor" href="#chapter-5-refactoring" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>What Is Refactoring?&lt;/li>
&lt;li>The Basic Toolkit&lt;/li>
&lt;li>Extract Method&lt;/li>
&lt;li>The Disciplines&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-6-simple-design">Chapter 6. Simple Design
&lt;a class="heading-anchor" href="#chapter-6-simple-design" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>YAGNI&lt;/li>
&lt;li>Covered by Tests&lt;/li>
&lt;li>Coverage&lt;/li>
&lt;li>Design?&lt;/li>
&lt;li>Maximize Expression&lt;/li>
&lt;li>The Underlying Abstraction&lt;/li>
&lt;li>Minimize Duplication&lt;/li>
&lt;li>Minimize Size&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-7-collaborative-programming">Chapter 7. Collaborative Programming
&lt;a class="heading-anchor" href="#chapter-7-collaborative-programming" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;h4 id="chapter-8-acceptance-tests">Chapter 8. Acceptance Tests
&lt;a class="heading-anchor" href="#chapter-8-acceptance-tests" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>The Discipline&lt;/li>
&lt;li>The Continuous Build&lt;/li>
&lt;/ul>
&lt;h3 id="part-ii-the-standards">Part II: The Standards
&lt;a class="heading-anchor" href="#part-ii-the-standards" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;h4 id="chapter-9-productivity">Chapter 9. Productivity
&lt;a class="heading-anchor" href="#chapter-9-productivity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>We Will Never Ship S**T&lt;/li>
&lt;li>Inexpensive Adaptability&lt;/li>
&lt;li>We Will Always Be Ready&lt;/li>
&lt;li>Stable Productivity&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-10-quality">Chapter 10. Quality
&lt;a class="heading-anchor" href="#chapter-10-quality" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Continuous Improvement&lt;/li>
&lt;li>Fearless Competence&lt;/li>
&lt;li>Extreme Quality&lt;/li>
&lt;li>We Will Not Dump on QA&lt;/li>
&lt;li>QA Will Find Nothing&lt;/li>
&lt;li>Test Automation&lt;/li>
&lt;li>Automated Testing and User Interfaces&lt;/li>
&lt;li>Testing the User Interface&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-11-courage">Chapter 11. Courage
&lt;a class="heading-anchor" href="#chapter-11-courage" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>We Cover for Each Other&lt;/li>
&lt;li>Honest Estimates&lt;/li>
&lt;li>You Must Say NO&lt;/li>
&lt;li>Continuous Aggressive Learning&lt;/li>
&lt;li>Mentoring&lt;/li>
&lt;/ul>
&lt;h3 id="part-iii-the-ethics">Part III: The Ethics
&lt;a class="heading-anchor" href="#part-iii-the-ethics" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>The First Programmer&lt;/li>
&lt;li>Seventy-Five Years&lt;/li>
&lt;li>Nerds and Saviors&lt;/li>
&lt;li>Role Models and Villains&lt;/li>
&lt;li>We Rule the World&lt;/li>
&lt;li>Catastrophes&lt;/li>
&lt;li>The Oath&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-12-harm">Chapter 12. Harm
&lt;a class="heading-anchor" href="#chapter-12-harm" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>First, Do No Harm&lt;/li>
&lt;li>Best Work&lt;/li>
&lt;li>Repeatable Proof&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-13-integrity">Chapter 13. Integrity
&lt;a class="heading-anchor" href="#chapter-13-integrity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Small Cycles&lt;/li>
&lt;li>Relentless Improvement&lt;/li>
&lt;li>Maintain High Productivity&lt;/li>
&lt;/ul>
&lt;h4 id="chapter-14-teamwork">Chapter 14. Teamwork
&lt;a class="heading-anchor" href="#chapter-14-teamwork" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;ul>
&lt;li>Work as a Team&lt;/li>
&lt;li>Estimate Honestly and Fairly&lt;/li>
&lt;li>Respect&lt;/li>
&lt;li>Never Stop Learning&lt;/li>
&lt;/ul>
&lt;hr />
&lt;p>I found this chat in YouTube where Uncle Bob talks about most of the topics form his book &lt;strong>Clean Craftsmanship&lt;/strong>.&lt;/p>
&lt;div style="position:relative;aspect-ratio:16/9;width:100%;">
&lt;iframe
src="https://www.youtube-nocookie.com/embed/sPXk11hrWTM"
title="YouTube video"
width="560"
height="315"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
referrerpolicy="strict-origin-when-cross-origin"
style="position:absolute;inset:0;width:100%;height:100%;border:0;"
allowfullscreen>
&lt;/iframe>
&lt;/div>
&lt;pre class="giallo" style="color-scheme: light dark; color: light-dark(#24292E, #E1E4E8); background-color: light-dark(#FFFFFF, #24292E);">&lt;code data-lang="plain">&lt;span class="giallo-l">&lt;span>Listen out for:&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Quote &amp;amp; Intro - [00:00:00]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Career Journey - [00:07:29]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Clean Craftsmanship - [00:10:53]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Programmer as a Profession - [00:15:31]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Craftsmanship - [00:18:45]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Disciplines - [00:22:45]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Disciplines: Test-Driven Development - [00:28:49]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Disciplines: Refactoring - [00:34:31]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Code Coverage - [00:39:02]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Standard: Never Ship S**t - [00:42:35]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Standard: Always Be Ready - [00:47:15]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Ethics: Do No Harm - [00:50:00]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* Ethics: Estimate Honestly - [00:53:56]&lt;/span>&lt;/span>
&lt;span class="giallo-l">&lt;span>* 2 Tech Lead Wisdom - [00:57:50]&lt;/span>&lt;/span>&lt;/code>&lt;/pre></content></entry><entry xml:lang="en"><title>Update Your Team to Be More Extreme</title><subtitle>How can you help your peers to embrace the change?</subtitle><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="team-management" scheme="https://chemaclass.com/tags/team-management/" label="Team Management"/><category term="mentoring" scheme="https://chemaclass.com/tags/mentoring/" label="Mentoring"/><category term="tdd" scheme="https://chemaclass.com/tags/tdd/" label="Tdd"/><published>2022-02-26T00:00:00+00:00</published><updated>2023-03-23T00:00:00+00:00</updated><author><name>
Chemaclass</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/blog/update-your-team-to-be-more-extreme/"/><id>https://chemaclass.com/blog/update-your-team-to-be-more-extreme/</id><summary type="html">Our profession is constantly evolving; therefore, it demands a non-stop learning process. Embracing the change is not optional in our software industry. We need to create spaces to get out of our comfort zone.</summary><content type="html">&lt;p>Our software profession is constantly evolving; it demands a non-stop learning process. We must embrace the change in our industry.&lt;/p>
&lt;span id="continue-reading">&lt;/span>
&lt;p>We need to create spaces to get out of our comfort zone, so our cognitive brain can train and improve how to adapt to our surroundings, which are constantly transforming.&lt;/p>
&lt;h2 id="why-code-katas-tech-talks-or-research-fridays">Why code katas, tech talks or research Fridays?
&lt;a class="heading-anchor" href="#why-code-katas-tech-talks-or-research-fridays" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>The goal is to help create an environment that aims for continuous improvement towards looking for learning everywhere, all the time, as the core attitude for the individuals and the group.&lt;/p>
&lt;h3 id="create-learnings-opportunities">Create learnings opportunities
&lt;a class="heading-anchor" href="#create-learnings-opportunities" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;blockquote>
&lt;p>Schedule some time every X weeks for practicing together.&lt;/p>
&lt;/blockquote>
&lt;p>At the end of each iteration, or even 2 or 4 weeks, we celebrate and work on katas in pairs/mob for 2 hours. That space is also an opportunity to create an internal tech-talk presentation to share exciting knowledge with the team non-directly-related to our “regular daily business”.&lt;/p>
&lt;p>The goal is to get out of our comfort zone, improving our recognition for change in general while learning other subjects regularly.&lt;/p>
&lt;h2 id="what-is-a-code-kata">What is a code kata?
&lt;a class="heading-anchor" href="#what-is-a-code-kata" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>As a group, software developers don’t practice enough. Most of our learning takes place on the job, so most of our mistakes get made there as well.&lt;/p>
&lt;p>The term “kata” comes from the repetitive movements done in karate that help you improve your fighting skills.&lt;/p>
&lt;p>Code Katas exists to help developers get the same benefits as practicing in any other profession. There are simple, artificial exercises that let you experiment and learn without the pressure in a production environment.&lt;/p>
&lt;blockquote>
&lt;p>There are no right or wrong answers in any software kata: the benefit comes from the process, not the result.&lt;/p>
&lt;/blockquote>
&lt;h3 id="motivation">Motivation
&lt;a class="heading-anchor" href="#motivation" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Work on refactoring techniques.&lt;/li>
&lt;li>Work on TDD examples.&lt;/li>
&lt;li>Work on SOLID principles.&lt;/li>
&lt;li>Work on live coding sessions.&lt;/li>
&lt;li>Work on driver-navigator concepts.&lt;/li>
&lt;li>Work on team cohesion.&lt;/li>
&lt;li>Have fun while learning and practicing together.&lt;/li>
&lt;/ul>
&lt;p>If you’re interested in my thoughts about TDD and katas, I wrote a post about it not long ago:
&lt;a href="/blog/test-driven-development/">Test-Driven Development&lt;/a>.&lt;/p>
&lt;h2 id="what-is-a-tech-talk">What is a tech-talk?
&lt;a class="heading-anchor" href="#what-is-a-tech-talk" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Tech talks allow us to share some knowledge related to our tech industry with our team members.&lt;/p>
&lt;p>It can be any FrontEnd, BackEnd, DevOps related. But I encourage also:&lt;/p>
&lt;ul>
&lt;li>a new programming language that you are learning,&lt;/li>
&lt;li>a summary of one book that you finished,&lt;/li>
&lt;li>a new technology that you are studying or feeling curious about,&lt;/li>
&lt;li>a piece of software that you would like to share and present thoughts about it,&lt;/li>
&lt;li>a new tool that helps you to improve your productivity,&lt;/li>
&lt;li>really: &lt;u>anything related to creating value or knowledge.&lt;/u>&lt;/li>
&lt;/ul>
&lt;h3 id="how-can-i-present-a-tech-talk">How can I present a tech talk?
&lt;a class="heading-anchor" href="#how-can-i-present-a-tech-talk" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>I wrote this article with some tips about &lt;a href="/blog/improve-your-tech-talk/">how to improve your tech-talk&lt;/a>. Some key
questions that might help you to find something on your own:&lt;/p>
&lt;ul>
&lt;li>What have you learned recently (in the last X months)?&lt;/li>
&lt;li>What knowledge might be interesting to be shared with your peers?&lt;/li>
&lt;li>Which aspect of yourself you’d like to improve professionally and/or personally?&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Just one rule: Be curious and “&lt;a href="/blog/embrace-the-change/">embrace the change&lt;/a>.”&lt;/p>
&lt;/blockquote>
&lt;h2 id="research-and-learning-fridays">Research and learning Fridays
&lt;a class="heading-anchor" href="#research-and-learning-fridays" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Block the last Friday of the month for research and learning purposes.
The whole team will have a dedicated space for growth and experiment.&lt;/p>
&lt;p>It’s crucial to build trust with your team, so you all know everyone will use this time as good as possible. Don’t micromanage this time forcing keeping a record in a wikipage with what everyone does in detail.&lt;/p>
&lt;p>Although, it would be nice that the team shares what they do during this time, mostly to create transparency among themselves. A verbal announcement to the peers the day before, with their intentions. Even the day after with the learnings key-takeaways.&lt;/p>
&lt;h3 id="summary">Summary
&lt;a class="heading-anchor" href="#summary" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>You can help your team to be more extreme by helping with a dedicated team space for growth and experimentation.&lt;/p>
&lt;ul>
&lt;li>Provide flexibility to experiment with these ideas as they see fit.&lt;/li>
&lt;li>It is an opportunity for self-growth and learning at the same time.&lt;/li>
&lt;li>It is, ultimately, up to the person and the team.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Do not micromanage this dedicated time. Focus on the outcome. Help your team to grow, and they will enjoy growing with you.&lt;/p>
&lt;/blockquote>
&lt;p>&lt;img src="/images/blog/2022-02-26/footer.webp" alt="blog-footer" />&lt;/p>
&lt;h2 id="tech-talk">Tech Talk
&lt;a class="heading-anchor" href="#tech-talk" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>After writing this blog post (originally in Feb, 2022), I was invited to do
a &lt;a href="/talks/update-your-team-to-be-more-extreme">tech talk&lt;/a> in different conferences about this topic.&lt;/p></content></entry><entry xml:lang="en"><title>Extreme Programming Explained</title><subtitle>Embrace Change</subtitle><category term="xp" scheme="https://chemaclass.com/tags/xp/" label="Xp"/><category term="agile" scheme="https://chemaclass.com/tags/agile/" label="Agile"/><category term="tdd" scheme="https://chemaclass.com/tags/tdd/" label="Tdd"/><category term="pair-programming" scheme="https://chemaclass.com/tags/pair-programming/" label="Pair Programming"/><category term="communication" scheme="https://chemaclass.com/tags/communication/" label="Communication"/><published>2020-03-05T00:00:00+00:00</published><updated>2020-03-05T00:00:00+00:00</updated><author><name>
Kent Beck</name></author><link rel="alternate" type="text/html" href="https://chemaclass.com/readings/extreme-programming-explained/"/><id>https://chemaclass.com/readings/extreme-programming-explained/</id><summary type="html">Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software, and higher quality of life for the development team. XP is the most specific of the agile frameworks regarding appropriate engineering practices for software development.</summary><content type="html">&lt;span id="continue-reading">&lt;/span>&lt;h2 id="definition">Definition
&lt;a class="heading-anchor" href="#definition" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Extreme Programming (XP) is an agile software development framework that aims to produce higher quality software, and
higher quality of life for the development team. XP is the most specific of the agile frameworks regarding appropriate
engineering practices for software development.&lt;/p>
&lt;hr />
&lt;h2 id="values">Values
&lt;a class="heading-anchor" href="#values" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>The five values of XP are communication, simplicity, feedback, courage, and respect and are described in more detail
below.&lt;/p>
&lt;h3 id="communication">Communication
&lt;a class="heading-anchor" href="#communication" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Software development is inherently a team sport that relies on communication to transfer knowledge from one team member
to everyone else on the team. XP stresses the importance of the appropriate kind of communication: face to face
discussion with the aid of a white board or other drawing mechanism.&lt;/p>
&lt;h3 id="simplicity">Simplicity
&lt;a class="heading-anchor" href="#simplicity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Simplicity means “what is the simplest thing that will work?” The purpose of this is to avoid waste and do only
absolutely necessary things such as keep the design of the system as simple as possible so that it is easier to
maintain, support, and revise. Simplicity also means address only the requirements that you know about; don’t try to
predict the future.&lt;/p>
&lt;h3 id="feedback">Feedback
&lt;a class="heading-anchor" href="#feedback" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Through constant feedback about their previous efforts, teams can identify areas for improvement and revise their
practices. Feedback also supports simple design. Your team builds something, gathers feedback on your design and
implementation, and then adjust your product going forward.&lt;/p>
&lt;h3 id="courage">Courage
&lt;a class="heading-anchor" href="#courage" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Kent Beck defined courage as “effective action in the face of fear”. This definition shows a preference for action based
on other principles so that the results aren’t harmful to the team. You need courage…&lt;/p>
&lt;ul>
&lt;li>to raise organizational issues that reduce your team’s effectiveness.&lt;/li>
&lt;li>to stop doing something that doesn’t work and try something else.&lt;/li>
&lt;li>to accept and act on feedback, even when it’s difficult to accept.&lt;/li>
&lt;/ul>
&lt;h3 id="respect">Respect
&lt;a class="heading-anchor" href="#respect" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The members of your team need to respect each other in order to communicate with each other, provide and accept feedback
that honors your relationship, and to work together to identify simple designs and solutions.&lt;/p>
&lt;hr />
&lt;h2 id="principles">Principles
&lt;a class="heading-anchor" href="#principles" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;h3 id="humanity">Humanity
&lt;a class="heading-anchor" href="#humanity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Human beings are the ones developing software. It is a fact. The book mentions 5 points that are needed for developers
to become good: basic safety, accomplishment, belonging, growth, and intimacy.&lt;/p>
&lt;p>The magic of great teams is that after the team members develop trust they find that they are free to be more themselves
as a result of their work together.&lt;/p>
&lt;h3 id="economics">Economics
&lt;a class="heading-anchor" href="#economics" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Software costs. Someone or multiple people paid or invested in it.&lt;/p>
&lt;p>Make sure what you are doing has business value, meets business goals, and serves business needs. For example, solving
the highest priority business need first maximizes the value of the project.&lt;/p>
&lt;p>The earlier software makes money, the sooner the development is valuable.&lt;/p>
&lt;h3 id="mutual-benefit">Mutual Benefit
&lt;a class="heading-anchor" href="#mutual-benefit" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Mutual benefit in XP is about activities benefitting all concerned. This principle is about finding practices that
benefit me now, me later, and the customers as well.&lt;/p>
&lt;p>The book brings up 3 points how XP mutually deals with communication-with-the-future problems:&lt;/p>
&lt;ul>
&lt;li>I write automated tests that help me design and implement better today. I leave these tests for future programmers to
use as well. This practice benefits me now and maintainers down the road.&lt;/li>
&lt;li>I carefully refactor to remove accidental complexity, giving me both satisfaction and fewer defects and making the
code easier to understand for those who encounter it later.&lt;/li>
&lt;li>I choose names from a coherent and explicit set of metaphors which speeds my development and makes the code clearer to
new programmers.&lt;/li>
&lt;/ul>
&lt;h3 id="self-similarity">Self-Similarity
&lt;a class="heading-anchor" href="#self-similarity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>This principle is about copying the structure of one solution into a new context.&lt;/p>
&lt;p>For example, the basic structure of development is that you write a failing test and then make it work. This structure
operates at all different scales. Take into account, this principle is a good start, but it may not always work.&lt;/p>
&lt;h3 id="improvement">Improvement
&lt;a class="heading-anchor" href="#improvement" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Do your best today but strive to do better tomorrow, strive to have a deeper understanding tomorrow. XP shines in this
aspect, it is about always improving.&lt;/p>
&lt;blockquote>
&lt;p>Put improvement to work by not waiting for perfection. Find a starting place, get started, and improve from there.&lt;/p>
&lt;/blockquote>
&lt;h3 id="diversity">Diversity
&lt;a class="heading-anchor" href="#diversity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Teams need to bring in people from different backgrounds, with different experiences, attitudes, etc. In order for the
team to have different ways of thinking and solving a problem.&lt;/p>
&lt;p>The principle of diversity suggests that the programmers should work together on the problem and both opinions should be valued.&lt;/p>
&lt;h3 id="reflection">Reflection
&lt;a class="heading-anchor" href="#reflection" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Good teams reflect after action, regularly. They think about why and how they are working.&lt;/p>
&lt;ul>
&lt;li>Why did we succeed? What should we continue doing?&lt;/li>
&lt;li>Why did we fail? What can we do better or differently?&lt;/li>
&lt;/ul>
&lt;p>Reflect and strive to improve. Even if everything seems perfect, know that there is always room for improvement and
throw in the question:&lt;/p>
&lt;ul>
&lt;li>Why do things seem perfect? What are we doing well? What can we do better in order to succeed even more?&lt;/li>
&lt;/ul>
&lt;h3 id="flow">Flow
&lt;a class="heading-anchor" href="#flow" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Flow in software development is delivering a steady flow of valuable software by engaging in all the activities of
development simultaneously. Don’t deliver software in big portions. Deploy smaller increments of value more frequently.&lt;/p>
&lt;h3 id="opportunity">Opportunity
&lt;a class="heading-anchor" href="#opportunity" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Learn to see problems as opportunities for learning and improving.&lt;/p>
&lt;blockquote>
&lt;p>Part of being extreme is consciously choosing to transform each problem into an opportunity:
an opportunity for personal growth, deepening relationships, and improved software.&lt;/p>
&lt;/blockquote>
&lt;h3 id="redundancy">Redundancy
&lt;a class="heading-anchor" href="#redundancy" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The difficult problems in software development should be solved in multiple ways.&lt;/p>
&lt;blockquote>
&lt;p>The cost of the redundancy is more than paid for by the savings from not having a disaster.&lt;/p>
&lt;/blockquote>
&lt;h3 id="failure">Failure
&lt;a class="heading-anchor" href="#failure" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Sometimes it is extremely difficult to implement something, we don’t know which way or approach to take, try the ideas
you have, even if they fail! Failure isn’t a waste, rather a learning experience.&lt;/p>
&lt;p>Be aware of falling into the trap of discussing or thinking forever and not getting things done.&lt;/p>
&lt;blockquote>
&lt;p>When you don’t know what to do though, risking failure can be the shortest, surest road to success.&lt;/p>
&lt;/blockquote>
&lt;h3 id="quality">Quality
&lt;a class="heading-anchor" href="#quality" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Projects don’t go faster by lowering the quality. Actually it’s often the other way around (if not always). It results
in later and less predictable delivery, especially due to the amount of time spent on fixing bugs for example.&lt;/p>
&lt;p>Pushing quality higher often results in faster delivery.&lt;/p>
&lt;blockquote>
&lt;p>A concern for quality is no excuse for inaction. If you don’t know a clean way to do a job that has to be done,
do it the best way you can. If you know a clean way but it would take too long, do the job as well as you have time
for now. Resolve to finish doing it the clean way later.&lt;/p>
&lt;/blockquote>
&lt;h3 id="baby-steps">Baby Steps
&lt;a class="heading-anchor" href="#baby-steps" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Take baby steps. Making big changes in big steps is dangerous. People and teams can take many small steps so they appear
to be moving forward rapidly.&lt;/p>
&lt;blockquote>
&lt;p>Baby steps acknowledge that the overhead of small steps is much less than when a team wastefully recoils from aborted big changes.&lt;/p>
&lt;/blockquote>
&lt;h3 id="accepted-responsibility">Accepted Responsibility
&lt;a class="heading-anchor" href="#accepted-responsibility" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;blockquote>
&lt;p>Responsibility cannot be assigned; it can only be accepted. If someone tries to give you responsibility, only you can decide if you are responsible or if you aren’t.&lt;/p>
&lt;/blockquote>
&lt;hr />
&lt;h2 id="practices">Practices
&lt;a class="heading-anchor" href="#practices" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>While it is possible to do these practices in isolation, many teams have found some practices reinforce the others and
should be done in conjunction to fully eliminate the risks you often face in software development.&lt;/p>
&lt;h3 id="sit-together">Sit Together
&lt;a class="heading-anchor" href="#sit-together" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Since communication is one of the five values of XP, have your team sit together in the same space without barriers to
communication, such as cubicle walls.&lt;/p>
&lt;h3 id="whole-team">Whole Team
&lt;a class="heading-anchor" href="#whole-team" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Include on the team people with all the skills and perspectives necessary for the project to succeed.&lt;/p>
&lt;h3 id="informative-workspace">Informative Workspace
&lt;a class="heading-anchor" href="#informative-workspace" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Set up your team space to facilitate face to face communication, allow people to have some privacy when they need it,
and make the work of the team transparent to each other and to interested parties outside the team.&lt;/p>
&lt;h3 id="energized-work">Energized Work
&lt;a class="heading-anchor" href="#energized-work" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>You are most effective at software development and all knowledge work when you are focused and free from distractions.&lt;/p>
&lt;h3 id="pair-programming">Pair Programming
&lt;a class="heading-anchor" href="#pair-programming" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Pair Programming means all production software is developed by two people sitting at the same machine. The idea behind
this practice is that two brains and four eyes are better than one brain and two eyes. You effectively get a continuous
code review and quicker response to nagging problems that may stop one person dead in their tracks.&lt;/p>
&lt;p>Teams that have used pair programming have found that it improves quality and does not actually take twice as long
because they are able to work through problems quicker, and they stay more focused on the task at hand, thereby creating
less code to accomplish the same thing.&lt;/p>
&lt;p>Pair programmers:&lt;/p>
&lt;ul>
&lt;li>Keep each other on task.&lt;/li>
&lt;li>Brainstorm refinements to the system.&lt;/li>
&lt;li>Clarify ideas.&lt;/li>
&lt;li>Take initiative when their partner is stuck, thus lowering frustration.&lt;/li>
&lt;li>Hold each other accountable to the team’s practices.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>Pair programming is a dialog between two people simultaneously programming (and analyzing and designing and testing)
and trying to program better.&lt;/p>
&lt;/blockquote>
&lt;p>Though, if you need privacy and time to work on an idea, go ahead and do it. We need both companionship and privacy.
Make sure to rotate pairs frequently and take frequent breaks, pairing can be tiring, but surely is rewarding.&lt;/p>
&lt;h3 id="stories">Stories
&lt;a class="heading-anchor" href="#stories" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Describe what the product should do in terms meaningful to customers and users. These stories are intended to be short
descriptions of things users want to be able to do with the product that can be used for planning and serve as reminders
for more detailed conversations when the team gets around to realizing that particular story.&lt;/p>
&lt;p>Give the stories a short title and a description. Write them on cards and put them on a wall that is often being passed.&lt;/p>
&lt;p>In XP stories are estimated extremely early, which gets the team thinking about how to get the largest return from the
tiny investment.&lt;/p>
&lt;h3 id="weekly-cycle">Weekly Cycle
&lt;a class="heading-anchor" href="#weekly-cycle" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The Weekly Cycle is synonymous to an iteration. In the case of XP, the team meets on the first day of the week to
reflect on progress to date, the customer picks the stories they would like delivered in that week, and the team
determines how they will approach those stories.&lt;/p>
&lt;p>The intent behind the time boxed delivery period is to produce something to show to the customer for feedback.&lt;/p>
&lt;h3 id="ten-minute-build">Ten-Minute Build
&lt;a class="heading-anchor" href="#ten-minute-build" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The goal with the Ten-Minute Build is to automatically build the whole system and run all of the tests in ten minutes.&lt;/p>
&lt;h3 id="continuous-integration">Continuous Integration
&lt;a class="heading-anchor" href="#continuous-integration" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Continuous Integration is a practice where code changes are immediately tested when they are added to a larger code
base. The benefit of this practice is you can catch and fix integration issues sooner.&lt;/p>
&lt;p>This practice requires some extra discipline and is highly dependent on Ten Minute Build and Test First Development.&lt;/p>
&lt;h3 id="test-first-programming">Test-First Programming
&lt;a class="heading-anchor" href="#test-first-programming" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;blockquote>
&lt;p>Write a failing automated test before changing any code.&lt;/p>
&lt;/blockquote>
&lt;p>The book mentions 4 problem Test-First Programming addresses at once:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Scope creep: It’s easy to get carried away programming and put in code “just in case.” By stating explicitly and
objectively what the program is supposed to do, you give yourself a focus for your coding. If you really want to put
that other code in, write another test after you’ve made this one work.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Coupling and cohesion: If it’s hard to write a test, it’s a signal that you have a design problem, not a testing
problem. Loosely coupled, highly cohesive code is easy to test.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Trust: It’s hard to trust the author of code that doesn’t work. By writing clean code that works and demonstrating
your intentions with automated tests, you give your teammates a reason to trust you.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Rhythm: It’s easy to get lost for hours when you are coding. When programming test-first, it’s clearer what to do
next: either write another test or make the broken test work. Soon this develops into a natural and efficient rhythm:
test, code, refactor, test, code, refactor.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="incremental-design">Incremental Design
&lt;a class="heading-anchor" href="#incremental-design" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;blockquote>
&lt;p>Invest in the design of the system every day.&lt;/p>
&lt;/blockquote>
&lt;p>You do a little bit of work up front to understand the proper breadth-wise perspective of the system design, and then
dive into the details of a particular aspect of that design when you deliver specific features.&lt;/p>
&lt;p>This approach reduces the cost of changes and allows you to make design decisions when necessary based on the most
current information available.&lt;/p>
&lt;hr />
&lt;h2 id="roles">Roles
&lt;a class="heading-anchor" href="#roles" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h2>
&lt;p>Although XP specifies particular practices for your team to follow, it doesn’t really establish specific roles for the
people on your team.&lt;/p>
&lt;p>Depending on which source you read, there is either no guidance, or there is a description of how roles typically found
in more traditional projects behave on XP projects.&lt;/p>
&lt;h3 id="the-customer">The Customer
&lt;a class="heading-anchor" href="#the-customer" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The Customer role is responsible for making all of the business decisions regarding the project including:&lt;/p>
&lt;p>The XP Customer is assumed to be a single person, however experience has shown that one person cannot adequately provide
all of the business related information about a project.&lt;/p>
&lt;h3 id="the-developer">The Developer
&lt;a class="heading-anchor" href="#the-developer" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>Because XP does not have much need for role definition, everyone on the team (with the exception of the customer and a
couple of secondary roles listed below) is labeled a developer. Developers are responsible for realizing the stories
identified by the Customer.&lt;/p>
&lt;h3 id="the-tracker">The Tracker
&lt;a class="heading-anchor" href="#the-tracker" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>The main purpose of this role is to keep track of relevant metrics that the team feels necessary to track their progress
and to identify areas for improvement.&lt;/p>
&lt;h3 id="the-coach">The Coach
&lt;a class="heading-anchor" href="#the-coach" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h3>
&lt;p>This is usually an outside consultant (or someone from elsewhere in your organization) who has used XP before and is
included in your team to help mentor the other team members on the XP Practices and to help your team maintain your
self-discipline.&lt;/p>
&lt;hr />
&lt;h4 id="what-is-xp-in-2-min">What is XP? (in 2 min)
&lt;a class="heading-anchor" href="#what-is-xp-in-2-min" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;div style="position:relative;aspect-ratio:16/9;width:100%;">
&lt;iframe
src="https://www.youtube-nocookie.com/embed/hbFOwqYIOcU"
title="YouTube video"
width="560"
height="315"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
referrerpolicy="strict-origin-when-cross-origin"
style="position:absolute;inset:0;width:100%;height:100%;border:0;"
allowfullscreen>
&lt;/iframe>
&lt;/div>
&lt;h4 id="tech-talk-by-kent-beck-xp-20-years-later">Tech Talk by kent Beck: XP 20 years later
&lt;a class="heading-anchor" href="#tech-talk-by-kent-beck-xp-20-years-later" title="Copy link" aria-label="Link to this section">#&lt;/a>
&lt;/h4>
&lt;div style="position:relative;aspect-ratio:16/9;width:100%;">
&lt;iframe
src="https://www.youtube-nocookie.com/embed/cGuTmOUdFbo"
title="YouTube video"
width="560"
height="315"
loading="lazy"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
referrerpolicy="strict-origin-when-cross-origin"
style="position:absolute;inset:0;width:100%;height:100%;border:0;"
allowfullscreen>
&lt;/iframe>
&lt;/div></content></entry></feed>