<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Fernando Machado</title>
    <description>The latest articles on DEV Community by Fernando Machado (@fernandomachado).</description>
    <link>https://dev.to/fernandomachado</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F527197%2Fcb035bea-a69c-4696-8b47-cac4e8e6153e.jpeg</url>
      <title>DEV Community: Fernando Machado</title>
      <link>https://dev.to/fernandomachado</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/fernandomachado"/>
    <language>en</language>
    <item>
      <title>Agile like Water</title>
      <dc:creator>Fernando Machado</dc:creator>
      <pubDate>Fri, 20 Sep 2024 09:38:07 +0000</pubDate>
      <link>https://dev.to/fernandomachado/be-agile-like-water-3l0l</link>
      <guid>https://dev.to/fernandomachado/be-agile-like-water-3l0l</guid>
      <description>&lt;p&gt;&lt;em&gt;Agile like a river pouring water from the source to the sea.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5pspwv59cv48stlwxpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp5pspwv59cv48stlwxpn.png" alt="Photograph of the Amazon River as seen from space (by Alexander Gerst)" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Decades after the publication of the &lt;a href="https://agilemanifesto.org/iso/en/manifesto.html" rel="noopener noreferrer"&gt;Agile Manifesto&lt;/a&gt; (2001), there is still a lot of confusion about what &lt;strong&gt;agile development&lt;/strong&gt; means.&lt;/p&gt;

&lt;p&gt;Certainly, through a naive association of words, someone might think that &lt;strong&gt;agile development&lt;/strong&gt; of software means &lt;strong&gt;&lt;em&gt;fast&lt;/em&gt; development&lt;/strong&gt; of software. Although this is not untrue, this association is &lt;strong&gt;insufficient&lt;/strong&gt; because it does not explicitly state the main goal of &lt;strong&gt;delivering value constantly&lt;/strong&gt;, in other words, &lt;strong&gt;delivering the correct product to the correct public as continously as possible&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;More experienced technologists might suggest that &lt;strong&gt;agile development&lt;/strong&gt; means applying XP or Scrum, using Jira or Trello, or ritualizing &lt;strong&gt;standups&lt;/strong&gt;, &lt;strong&gt;plannings&lt;/strong&gt; and &lt;strong&gt;retrospectives&lt;/strong&gt;. Once again, this is only partially correct, since these &lt;strong&gt;practices&lt;/strong&gt; are useless if the &lt;strong&gt;theory&lt;/strong&gt; that underpins the agile mindset is not shared by the team or the organization.&lt;/p&gt;

&lt;p&gt;Before diving into this &lt;strong&gt;theory&lt;/strong&gt;, let's understand how we got here.&lt;/p&gt;

&lt;h2&gt;
  
  
  📉 Cascade (like a Waterfall)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8iaztv2m0zmt6kccdq6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi8iaztv2m0zmt6kccdq6.png" alt="Photograph of a stone water fountain with four cascading levels. (Image taken from outdoorartpros.com)" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the early days of the IT industry, &lt;strong&gt;no one&lt;/strong&gt; knew exactly how to build software.&lt;/p&gt;

&lt;p&gt;Lacking particular processes and conventions, the &lt;strong&gt;Software Engineering&lt;/strong&gt; field inherited standards and ways of working from other engineering fields and, as a result, established a &lt;strong&gt;rigid and linear process to plan and execute software projects&lt;/strong&gt;, later known as &lt;strong&gt;Waterfall&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;For decades, software products were built in the same way as cars or buildings: projects marked by &lt;strong&gt;distinct, timed, and chained phases&lt;/strong&gt; that began with &lt;strong&gt;requirements&lt;/strong&gt; gathering and &lt;strong&gt;architectural&lt;/strong&gt; design, moved to code &lt;strong&gt;development&lt;/strong&gt; and ended with &lt;strong&gt;quality&lt;/strong&gt; assurance.&lt;/p&gt;

&lt;p&gt;When all the steps occurred as expected, the product could reach the public &lt;strong&gt;on time and without defects&lt;/strong&gt;. However, when something unexpected happened along the way - whether due to poorly gathered requirements or a change in market needs or, worse, a critical bug found in the already released product - building and shipping &lt;strong&gt;corrections&lt;/strong&gt; was not trivial at all.&lt;/p&gt;

&lt;p&gt;Since the process was set in stone - with distinct phases taking place &lt;strong&gt;sequentially&lt;/strong&gt; (at different times) and &lt;strong&gt;separately&lt;/strong&gt; (by different people with different roles) - there was no space or time for assuring &lt;strong&gt;quality&lt;/strong&gt; along the way, gathering &lt;strong&gt;feedback&lt;/strong&gt;, collaboration between roles, or experimenting on iterative ideas - it was all or nothing.&lt;/p&gt;

&lt;p&gt;In the early 2000s, in an attempt to transform this archaic process into something more &lt;strong&gt;fluid&lt;/strong&gt;, a group of technologists got together to write the &lt;a href="https://agilemanifesto.org/iso/en/manifesto.html" rel="noopener noreferrer"&gt;Agile Manifesto&lt;/a&gt; (2001), a set of &lt;strong&gt;values and principles&lt;/strong&gt; ​​that paved the way to a &lt;strong&gt;new era&lt;/strong&gt; in software development and continues to evolve to this day.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌊 Agile (like a River)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bg2t12drbio4r8lg007.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7bg2t12drbio4r8lg007.png" alt="Olho D'água river source, Bruna Mello" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can imagine &lt;strong&gt;agile software development&lt;/strong&gt; like &lt;strong&gt;a river pouring from the source&lt;/strong&gt; and daily discovering the best path to &lt;strong&gt;flow into the sea&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  💧 Source (inception)
&lt;/h3&gt;

&lt;p&gt;The beginning of an &lt;strong&gt;agile project&lt;/strong&gt; can be compared to &lt;strong&gt;discovering&lt;/strong&gt; the &lt;strong&gt;source of the river&lt;/strong&gt;, where a collective of people interested in the product come together to discuss &lt;strong&gt;what this product does&lt;/strong&gt; (and what it doesn't) and define &lt;strong&gt;a minimal viable path&lt;/strong&gt; so that the first drops of water of river can start flowing into the sea.&lt;/p&gt;

&lt;p&gt;In more practical terms, this means involving team members in activities such as &lt;strong&gt;inceptions&lt;/strong&gt; (to align product goals) and &lt;strong&gt;team normings&lt;/strong&gt; (to reach agreements on team practices and workflows), performing &lt;strong&gt;user researches&lt;/strong&gt;, designing &lt;strong&gt;interface prototypes&lt;/strong&gt;, sketching an initial &lt;strong&gt;architecture&lt;/strong&gt; for the system and developing iterative &lt;strong&gt;proofs of concept&lt;/strong&gt; (POCs) that can potentially be delivered to the end user and start validating the feasibility of these ideas.&lt;/p&gt;

&lt;p&gt;During &lt;strong&gt;daily standups&lt;/strong&gt;, team members share their &lt;strong&gt;status&lt;/strong&gt; and the team builds a &lt;strong&gt;shared vision&lt;/strong&gt; of where &lt;strong&gt;we are now&lt;/strong&gt; and where &lt;strong&gt;we are going&lt;/strong&gt;, what are the immediate &lt;strong&gt;blockers&lt;/strong&gt; and what are the needed &lt;strong&gt;adaptations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Instead of a having a distinct dedicated phase for testing at the end, the &lt;strong&gt;quality&lt;/strong&gt; of the project is rather assured every day through a variety of practices like &lt;strong&gt;code reviews&lt;/strong&gt;, &lt;strong&gt;test driven development&lt;/strong&gt;, &lt;strong&gt;monitoring&lt;/strong&gt;, &lt;strong&gt;continuous integration&lt;/strong&gt;, &lt;strong&gt;continuous delivery&lt;/strong&gt; and/or &lt;strong&gt;continuous deploymeny&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Regular activities like &lt;strong&gt;retrospectives&lt;/strong&gt; and &lt;strong&gt;showcases&lt;/strong&gt; (with different crowds) should be performed to gather feedback about the &lt;strong&gt;team&lt;/strong&gt; and the &lt;strong&gt;product&lt;/strong&gt;. Along the way, discovered action items, bugs and improvements should be constantly added to a backlog regularly prioritized and refined during &lt;strong&gt;plannings&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Working &lt;strong&gt;in sync&lt;/strong&gt; and with &lt;strong&gt;short feedback cycles&lt;/strong&gt;, every team member understands not only &lt;strong&gt;what&lt;/strong&gt;, but also &lt;strong&gt;how&lt;/strong&gt; and, more importantly, &lt;strong&gt;why&lt;/strong&gt; they are doing what they are doing (and not doing), creating a fertile environment for not only &lt;strong&gt;reaching the sea&lt;/strong&gt; but also &lt;strong&gt;collaboration, experimentation and innovation&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  🛶 Current (development)
&lt;/h3&gt;

&lt;p&gt;Like in real life, a river is rarely able to flow in a straight line from the source to the sea. A change in weather conditions or unexpected geographical challenges can pose a threat to the &lt;strong&gt;current flow of the river&lt;/strong&gt; and will test its &lt;strong&gt;adaptation&lt;/strong&gt; abilities.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When a rock or a tree trunk appears in its course, the river responds in a naturally agile way, never stopping but seamlessly spreading itself through all the possible gaps in the scenery in order to find the best path to keep the current flowing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The &lt;strong&gt;agility&lt;/strong&gt; of a river can be perceived more in &lt;strong&gt;how seamlessly&lt;/strong&gt; it than in &lt;strong&gt;how fast&lt;/strong&gt; it overcomes its obstacle. Harder challenges and new problems can take longer to be overcome. But more important than getting to the other side &lt;strong&gt;as soon as possible&lt;/strong&gt; is getting there &lt;strong&gt;as effectively as possible&lt;/strong&gt;, avoiding interruptions in the river flow and establishing a safe path so that more water can flow in the future. The river learns.&lt;/p&gt;

&lt;p&gt;In dev terms, this means establishing effective &lt;strong&gt;monitoring&lt;/strong&gt; and &lt;strong&gt;rollback&lt;/strong&gt; strategies, &lt;strong&gt;documenting bugs&lt;/strong&gt; as unit tests, releasing selected &lt;strong&gt;branches&lt;/strong&gt; with &lt;strong&gt;blue/green deployments&lt;/strong&gt; or &lt;strong&gt;canary releases&lt;/strong&gt;, using &lt;strong&gt;feature toggles&lt;/strong&gt; to protect experimental features and so on... When handling bigger incidents, activities like &lt;strong&gt;post-mortem retrospectives&lt;/strong&gt; can help identify causes, lessons and action items.&lt;/p&gt;

&lt;p&gt;A team needs to be provided not only with &lt;strong&gt;material&lt;/strong&gt; resources (like computers, chairs, tables, snacks and post-its) but also &lt;strong&gt;immaterial&lt;/strong&gt; resources (like information, training, access, security and autonomy). In a team, values like &lt;strong&gt;trust&lt;/strong&gt;, &lt;strong&gt;empathy&lt;/strong&gt; and &lt;strong&gt;curiosity&lt;/strong&gt; help encourage mutual growth, support what is working and embrace mistakes as learning opportunities. Practices like regular &lt;strong&gt;1:1&lt;/strong&gt; sessions and &lt;strong&gt;team outings&lt;/strong&gt; can also help solidify  &lt;strong&gt;interpersonal&lt;/strong&gt; relationships, match &lt;strong&gt;talents and aspirations&lt;/strong&gt; with existing work opportunities and also spark &lt;strong&gt;innovation&lt;/strong&gt; with &lt;strong&gt;unexpected collaborations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjf6qh0iumc3upye0eos.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frjf6qh0iumc3upye0eos.png" alt="An aerial view of the mighty Amazon River, seen here in Peru. DEA/PUBBLI AER FOTO/De Agostini/Getty Images" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the source to the sea, the current of a river is never &lt;strong&gt;uniform&lt;/strong&gt;. Different stretches of a river will present &lt;strong&gt;different characteristics&lt;/strong&gt; - a &lt;strong&gt;reflection&lt;/strong&gt; of the conditions this river faced so far. Some of these conditions come from unfortunate external restrictions, but some are self-imposed and can be changed. Projects, teams, and organizations should be alert and act to avoid:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;rough water&lt;/strong&gt;: from bug fix to big feature, the &lt;strong&gt;path to production&lt;/strong&gt; should always be &lt;strong&gt;smooth&lt;/strong&gt; - pressure and tensions are often symptoms of &lt;strong&gt;improvement&lt;/strong&gt; opportunities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;scarce water&lt;/strong&gt;: an overworked team loses the &lt;strong&gt;flexibility&lt;/strong&gt; needed to &lt;strong&gt;reorganize&lt;/strong&gt; to face &lt;strong&gt;unseen challenges&lt;/strong&gt; or engage in &lt;strong&gt;continuous improvement&lt;/strong&gt; activities like &lt;strong&gt;refactoring&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;murky water&lt;/strong&gt;: no &lt;strong&gt;access&lt;/strong&gt; to &lt;strong&gt;necessary&lt;/strong&gt; information and discussion forums reduces the feeling of &lt;strong&gt;ownership&lt;/strong&gt; and the potential for &lt;strong&gt;innovation&lt;/strong&gt; and &lt;strong&gt;contextual thinking&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;water puddle&lt;/strong&gt;: lack of &lt;strong&gt;collaboration&lt;/strong&gt; between &lt;strong&gt;different roles and seniority levels&lt;/strong&gt; can make a team overly dependent on someone and reduce its ability to &lt;strong&gt;respond&lt;/strong&gt; to unseen circunstances;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bottlenecked water&lt;/strong&gt;: bureaucracy and hierarchy can create &lt;strong&gt;artificial bottlenecks&lt;/strong&gt; and reduce a team's &lt;strong&gt;flow&lt;/strong&gt; and &lt;strong&gt;work output&lt;/strong&gt;;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  🌅 Sea (delivery)
&lt;/h3&gt;

&lt;p&gt;From the moment the first drop of water rises on the source until it reaches the sea on mouth of the river, a lot of things can happen. An &lt;strong&gt;agile&lt;/strong&gt; team needs to constantly be able to &lt;strong&gt;handle&lt;/strong&gt; and, whenever possible, &lt;strong&gt;leverage change&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;fresh water&lt;/strong&gt;: a very complex feature can mostly always be delivered in iterative &lt;strong&gt;slices&lt;/strong&gt; of reliable code, properly tested and able to constantly evolve according to &lt;strong&gt;current requirements&lt;/strong&gt; (instead of something we planned months ago before a single line of code was written);&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;bottled water&lt;/strong&gt;: usage metrics and data analysis might reveal that a planned feature is not as desired as imagined, allowing you to either &lt;strong&gt;change priorities&lt;/strong&gt; or develop specific &lt;strong&gt;customization&lt;/strong&gt; options for the correct clients;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;reusable water&lt;/strong&gt;: from extracting web components to creating new teams to handle specific shared microservices or, even, partnering with an existing product from another company can help a company &lt;strong&gt;save resources&lt;/strong&gt; or pave the way to &lt;strong&gt;new market opportunities&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua2lz13o6lcd96qz71o6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fua2lz13o6lcd96qz71o6.png" alt="Aerial photograph of a river delta mouth with several channels. (Image taken from newsela.com)" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A sustainable river is constantly &lt;strong&gt;delivering the best possible water from the source to the sea&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;life cycle&lt;/strong&gt; of a river does not end when it flows into the sea. By following the &lt;strong&gt;waves&lt;/strong&gt;, a river can take lessons from the mouth back to the source and &lt;strong&gt;improve the current of the water&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The shorter the feedback cycle, the better will be the product callibration - allowing an enginering team to create the correct products and priorize the truly expected features.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;From end to end, the river must be understood as a &lt;strong&gt;unit&lt;/strong&gt;. An agile team restricted by &lt;strong&gt;authoritarian leadership or rigid processes&lt;/strong&gt; unable to reflect their &lt;strong&gt;current reality&lt;/strong&gt; invariably end up building software in a cascade form and run the risk of repeating &lt;strong&gt;classic&lt;/strong&gt; mistakes.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;digital transformation&lt;/strong&gt; proposed by the &lt;a href="https://agilemanifesto.org/iso/en/manifesto.html" rel="noopener noreferrer"&gt;Agile Manifesto&lt;/a&gt; (2001) takes place beyond the lines of code. To be &lt;strong&gt;agile today&lt;/strong&gt; takes &lt;strong&gt;courage&lt;/strong&gt; to abandon ready-made manuals and pragmatically reevaluate all work models - from talent recruitment to the monitoring of a deployed application - in order to discover how to be &lt;strong&gt;naturally agile&lt;/strong&gt; (like a river) in every situation: responding to the &lt;strong&gt;ever changing business requirements with flexibility&lt;/strong&gt; while always leveraging &lt;strong&gt;human potential&lt;/strong&gt; to ensure that &lt;strong&gt;every stretch of the river is always able to deliver the best value to the sea&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>agile</category>
    </item>
  </channel>
</rss>
