<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://cron.je/feed.xml" rel="self" type="application/atom+xml" /><link href="https://cron.je/" rel="alternate" type="text/html" /><updated>2026-05-25T20:08:25+00:00</updated><id>https://cron.je/feed.xml</id><title type="html">martin cronjé</title><subtitle>My experiences in leading, building and transforming teams to deliver well-crafted software.</subtitle><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><entry><title type="html">Measuring productivity</title><link href="https://cron.je/2023/02/07/measuring-productivy.html" rel="alternate" type="text/html" title="Measuring productivity" /><published>2023-02-07T21:39:48+00:00</published><updated>2023-02-07T21:39:48+00:00</updated><id>https://cron.je/2023/02/07/measuring-productivy</id><content type="html" xml:base="https://cron.je/2023/02/07/measuring-productivy.html"><![CDATA[<p><em>Disclaimer: Each company has different tech stack and delivery challenges, but the methodology for measuring and improving productivity applies equally.</em></p>

<p>In a previous role, I was hired to “Improve Delivery Flow” (<a href="https://teamtopologies.com/?ref=cron.je">ref Team Topologies</a>) across an org of about ~400, with an emphasis on process improvements, platform capabilities and debt-recovery work.</p>

<h1 id="problem">Problem</h1>
<p>Delivery in the company slowed down over the years and they needed to find a way to unblock and speed it up to the “good old days”. Anecdotal observations showed that:</p>
<ul>
  <li>Engineers hated the toolchain and were waiting for ages for local and remote builds.</li>
  <li>There was very low confidence that releases would go without failure which resulted in expensive regression test cycles.</li>
  <li>Deployments required manual intervention due to legacy interpretation of PCI compliance.</li>
  <li>The slow speed to meant that merges became bigger and large merge conflicts were common.</li>
  <li>Product managers had to wait until late in the process to see features work end-to-end.</li>
</ul>

<h1 id="measurement">Measurement</h1>
<p>To improve something, one must first measure it, and we found that <a href="https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance?ref=cron.je">DORA</a> is incomplete as it focuses too much on CD and not enough on teams getting shit done. <a href="https://queue.acm.org/detail.cfm?id=3454124&amp;ref=cron.je">SPACE</a> as a framework proved valuable but needed to be interpreted for our needs. We landed on:</p>
<ul>
  <li>Satisfaction: Internal Developer NPS and CSAT</li>
  <li>Performance: Change Failure rate (and Product Management satisfaction implied)</li>
  <li>Activity: Merge &amp; Deploy Frequency and Cycle time (looking at the merge and deploy size was interesting too)</li>
  <li>Collaboration: Only measure in the platform by looking at incoming Service Requests and adoption of services</li>
  <li>Efficiency: Qualitative measurement of Toil from Developer Interviews (mainly Staff and Principal engineers)</li>
</ul>

<h1 id="north-star">North Star</h1>
<p>We encouraged product, platform, and sub-speciality (aka practice) teams to calibrate their improvement projects to the above measurements working towards the following north star metrics:
<strong>Year 1:</strong></p>
<ul>
  <li>Code integrated within 10 min to Test</li>
  <li>Non-prod provisioned within hours</li>
  <li>Refactored team ownership scope to enable deploying independently where relevant</li>
</ul>

<p><strong>Year 2</strong></p>
<ul>
  <li>Code integrated within 10 min to Prod</li>
  <li>Prod can be provisioned within hours</li>
  <li>Refactored team ownership scope to enable deploying independently where relevant</li>
</ul>

<p><strong>This led to projects such as:</strong></p>
<ul>
  <li>Build automation improvement to provide developer feedback on merge within 10 minutes</li>
  <li>Provide self-service build for teams refactoring (fracturing) their ownership scope</li>
  <li>Create base images for non-prod environment to facilitate automated provisioning</li>
  <li>Reduce manual regression test cycle to hours by removing unneeded tests</li>
</ul>

<h2 id="key-learnings">Key learnings</h2>
<ul>
  <li>Using a framework like SPACE forced us to think about what productivity means for us.</li>
  <li>Setting a North Star for our tech strategy enabled teams to rally around the goal</li>
  <li>Defining what productivity meant enabled us to have effective conversations about improving delivery with stakeholders such as the CEO and Product Management</li>
</ul>]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[Disclaimer: Each company has different tech stack and delivery challenges, but the methodology for measuring and improving productivity applies equally.]]></summary></entry><entry><title type="html">The importance of WIP limits</title><link href="https://cron.je/2019/02/19/wip-limits-and-flow.html" rel="alternate" type="text/html" title="The importance of WIP limits" /><published>2019-02-19T21:25:56+00:00</published><updated>2019-02-19T21:25:56+00:00</updated><id>https://cron.je/2019/02/19/wip-limits-and-flow</id><content type="html" xml:base="https://cron.je/2019/02/19/wip-limits-and-flow.html"><![CDATA[<p>I once came across a team of 9 (yeah, I know it is too many) with five deliverables in flight. Looking at their work allocations, it seems 0.5 to 2.5 people were working on each deliverable. This immediately raised alarm bells because you can safely conclude that people are shared across tasks and that some work in isolation.</p>

<p>This approach is sub-optimal as it causes invisible* side-effects, which slow down the overall delivery of the team;</p>

<ul>
  <li>People shared across tasks causes situations they wait for others, which slows delivery down. This causes a traffic jam because people start waiting for people who are waiting for others.</li>
  <li>Quality is typically lower because people work in isolation, so their mistakes are only detected when bugs are discovered during testing or in production. Quality is everyone’s responsibility, and our goal is to prevent bugs from happening in the first place.</li>
  <li>Some teams never form because people work as individuals, which means they never get to the point where they build the deep trust required for high performance and innovation.</li>
</ul>

<p>There may be valid scenarios where teams share subject-matter experts (problem space or module) or specialists (like quality assistance) across the work. Even here, there are problems because ;</p>

<ul>
  <li>the shared persons’ own ability to contribute is reduced because they are spending a lot of time switching work,</li>
  <li>their ability to mentor the team is reduced because they are only working with a small subset and also not for the whole time, and</li>
  <li>It drives “hero culture”, which causes people to pool knowledge and negatively affects others’ growth.</li>
</ul>

<p>A natural consequence is that these teams tend to be VERY busy while not producing much.</p>

<p><em>Solutions to consider:</em></p>

<ul>
  <li>Reduce work in flight to one per team</li>
  <li>With a <em>team</em> think of a group of people who work on one piece of business value together.</li>
  <li>Try to structure teams working as pods of 3-4 people.</li>
  <li>Focus everyones’ effort on finishing work as opposed to starting. Finishing the goal should be achieving business objectives instead of simply deploying production software.</li>
</ul>

<p>Other observations:</p>

<ul>
  <li>The team is also assigning work to people at the beginning of the week, which means that people don’t get the opportunity to choose the best person for the task when the task is picked up.</li>
</ul>

<p><em>*The idea of a Kanban board is to make these things visible so people can manage the flow and prevent flow impediments early.</em> The team has numerous kanban boards, which means they cannot identify these flow problems effectively. Each cohesive team should ideally have one Kanban board and one only.</p>

<p><em>Further reading:</em></p>

<ul>
  <li><a href="https://less.works/less/principles/lean-thinking.html">Nice summary of Lean Thinking</a> (I’m not the biggest fan of LeSS)</li>
  <li><a href="https://hbr.org/2012/05/six-myths-of-product-development">HBR: Six Myths of Product Development</a></li>
  <li>Cool video on <a href="https://www.youtube.com/watch?v=CostXs2p6r0">the resource utilization trap</a></li>
  <li><a href="https://www.youtube.com/watch?v=rc1MqHsiiKo">The Logic of Flow: Some Indispensable Concepts</a></li>
  <li><a href="https://www.amazon.com/Principles-Product-Development-Flow-Generation-ebook/dp/B007TKU0O0">Principles of Product Development Flow</a>
<!--kg-card-end: markdown--></li>
</ul>]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[I once came across a team of 9 (yeah, I know it is too many) with five deliverables in flight. Looking at their work allocations, it seems 0.5 to 2.5 people were working on each deliverable. This immediately raised alarm bells because you can safely conclude that people are shared across tasks and that some work in isolation.]]></summary></entry><entry><title type="html">Making teams faster</title><link href="https://cron.je/2018/09/13/making-teams-faster.html" rel="alternate" type="text/html" title="Making teams faster" /><published>2018-09-13T18:07:42+00:00</published><updated>2018-09-13T18:07:42+00:00</updated><id>https://cron.je/2018/09/13/making-teams-faster</id><content type="html" xml:base="https://cron.je/2018/09/13/making-teams-faster.html"><![CDATA[<p>I often get asked how to make teams faster, so I decided to jot down a few thoughts.</p>

<p>The key to success is working with the team over time through continuous feedback loops to identify and implement improvements.</p>

<h2 id="team-formation">Team formation</h2>

<p>Before even looking at mechanisms to make teams “faster”, the starting point is proper team formation.</p>

<p>Russell Ackoff did an <a href="https://www.youtube.com/watch?v=OqEeIG8aPPk">excellent talk</a> on system-thinking, which summarises how I approach teams formation and management.</p>

<p>A few notes:</p>

<ul>
  <li><strong>Size:</strong> Based on personal experience, I typically work on an ideal team size of 4-7 people with a preference on five as the most effective engineering team size. <em>(note: There are quite a few studies on the topic, but nothing I want to link because I want to publish this post and not spend hours finding data that I’m 100% comfortable with)</em></li>
  <li><strong>Bootstrapping:</strong> Psychological safety and team chartering is the most critical building block to team effectiveness. In any environment, this should be the starting point to ensure teams form well,
    <ul>
      <li>people are comfortable to give each other feedback and are comfortable to be themselves at work,</li>
      <li>people know what they need expect from each other, and</li>
      <li>the reason for the team’s existence relative to the company is crystal clear.</li>
    </ul>
  </li>
  <li><strong>Mutability:</strong> Teams are immutable meaning with every team staffing change we reset the team’s formation. With that, I am reluctant to move people between teams without proper consideration.</li>
  <li><strong>Environment and tools:</strong> Give people the tools and the environment in which they can do their best work and trust them to get the job done (drives tool efficacy, team engagement and creativity).</li>
</ul>

<p>Have a look at <a href="https://rework.withgoogle.com/blog/five-keys-to-a-successful-google-team/">Google Project Aristotle</a> and the <a href="https://pragprog.com/book/liftoff/liftoff-second-edition">Liftoff book</a>.</p>

<h2 id="effectiveness-maximising-value">Effectiveness (Maximising value)</h2>

<p>The best software is the software that we don’t build while still bringing the value to our customers. To achieve this requires close collaboration between product, experience and engineering to find those magical solutions the customer problems. Techniques that have served me well are things like (in order of breath):</p>

<ul>
  <li>Business Model- / Lean Canvas</li>
  <li>Impact mapping</li>
  <li>Auftragsklärung</li>
  <li>Story mapping</li>
  <li>Hamburger method / MOSCOW / Kano / etc.</li>
</ul>

<p>Examples where my colleagues and I did this:</p>

<ul>
  <li>Legal process automation (as coach): Only automated 2 out of 42 processes to get 98% usage coverage effectively reducing timeline from 10 months to 6 weeks. The team used manual data capture for the remaining flows.</li>
  <li>Tourism product (as an engineer): Reduced scope to 10% of initially thought to build a top grossing app (1 year reduced to 3 months).</li>
  <li>Accounting software (as manager): Reduced work from months to days with numerous projects. In another example, we built low-fidelity solutions in days instead of months.</li>
</ul>

<h2 id="efficiency-hidden-capacity">Efficiency (Hidden capacity)</h2>

<p>The name of the game here is to eliminate waste. To eliminate waste teams need time to find and remove wasteful activities, which means that they need to reduce the active work-hours for the teams to create time for improvement.</p>

<p>The seven forms of waste in Lean Software Development is an excellent place to start (one of those “unnecessary features” fall into Effectiveness above).</p>

<blockquote>
  <p>Tip: Detecting and fixing these different types of waste isn’t as easy as reading the book and then magically doing it the next day. Experiment with various hypotheses, measures, and solutions. Allow yourself to try out things that feel wrong!</p>
</blockquote>

<p>Some areas to look at with supporting data where I can still remember (not an exhaustive list):</p>

<ul>
  <li><strong>Focus:</strong> Maximise collaboration within the team by introducing team rooms. The result was between 50 and 300% improvement in velocity.</li>
  <li><strong>Defects (in development):</strong> Find ways to prevent rejections (user, experience, testing, etc.) by creating cross-functional groups that do pair- and mob-programming. I repeatably saw the velocity increase 20-100% with some teams going down to zero-defects (in dev).</li>
  <li><strong>Defects (from production):</strong> Run post-incident reviews, to understand what the team missed during the engineering process.</li>
  <li><strong>Work in progress:</strong> Focussing on throughput (velocity) instead of utilisation (busyness) results in higher focus fewer defects, shorter cycle times, and also reduces partially done (often thrown away). I’ve seen teams reduce cycle times from:
    <ul>
      <li>100 to 4 days with single piece flow (Freight software)</li>
      <li>90 to 5 days with mob- and pair-programming (Accounting software)</li>
      <li>3 months to 2 weeks with WIP-limits at one-per-person (Email marketing)</li>
    </ul>
  </li>
  <li><strong>Decision making:</strong> I’ve seen teams and even companies lose years. Observe decision making across functions as well as intra- and inter-team.
    <ul>
      <li>Inter: Ensure teams can make decisions without seeking external help.</li>
      <li>Intra: Ensure there are leaders in the team (hopefully emergent) to help avoid groupthink and paralysis</li>
    </ul>
  </li>
  <li><strong>Automation:</strong> Identifying repetitive tasks and automating it where needed. I am currently experimenting with people focussed on developer productivity</li>
</ul>

<h2 id="adding-more-people">Adding more people</h2>

<p>An option but often not feasible because of financial and productivity reasons.</p>

<p>On the productivity side, I would avoid having more than nine people on a shared codebase. Numerous studies show that teams of 9+ produce less with higher defects numbers on shared codebases.</p>

<!--kg-card-end: markdown-->]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[I often get asked how to make teams faster, so I decided to jot down a few thoughts.]]></summary></entry><entry><title type="html">The Technical Debt metaphor is broken</title><link href="https://cron.je/2015/11/07/technical-debt-is-broken.html" rel="alternate" type="text/html" title="The Technical Debt metaphor is broken" /><published>2015-11-07T11:43:28+00:00</published><updated>2015-11-07T11:43:28+00:00</updated><id>https://cron.je/2015/11/07/technical-debt-is-broken</id><content type="html" xml:base="https://cron.je/2015/11/07/technical-debt-is-broken.html"><![CDATA[<p>I was first introduced to the Technical Debt metaphor in 2008 in this <a href="https://www.youtube.com/watch?v=pqeJFYwnkjE">video</a>. The key takeaway for me is the Technical Debt metaphor to help us explain how the disorder within a system affects future development work.</p>

<p>Martin Fowler went further to classify the different causes of Technical Debt into a very helpful <a href="http://martinfowler.com/bliki/TechnicalDebtQuadrant.html">quadrant</a>. For me, this quadrant is a very complete classification of the things that cause disorder within a software system.</p>

<blockquote>
  <p>“A particular benefit of the debt metaphor is that it’s very handy for communicating to non-technical people.” - Martin Fowler</p>
</blockquote>

<p>The important keyword for me here is “metaphor”. Metaphors only serve as symbolic description of what something is and shouldn’t be used as a literal interpretation. Metaphors (like most models) are abstractions and aim to highlight certain characteristics or behaviours through analogy.</p>

<p>In the instance of Technical Debt the metaphor is intended to <strong>highlight the compounding effect</strong> of that disorder (entropy) has within a system. This effect applies equally to all states of disorder whether it is <a href="https://sites.google.com/site/unclebobconsultingllc/a-mess-is-not-a-technical-debt">just a mess</a> or deliberate prudent technical debt.</p>

<p>There are two problems with the wide use of this metaphor:</p>

<ul>
  <li>People continually try to draw a direct correlation between Technical Debt and Financial Debt and that causes confusion. We are using the metaphor only to explain the compounding effect on future maintenance costs. Unlike financial debt, the classification of technical debt is quite subjective and hard to measure, causing a wide variety of alternative uses and disagreement on meaning. The prime example being: <em>“Is a mess technical debt?”</em></li>
  <li>The term Technical Debt is benign enough for people to continue doing it. <em>(Credit to Ron Jeffries for saying this in an open space during Agile2015)</em>. We should give it a more severe name like “disrepair” or “disorder” as caused by entropy.</li>
</ul>

<p><em>(It is worth mentioning that synonyms to entropy are deterioration, degeneration, crumbling, decline, degradation, decomposition, breaking down, collapse.)</em></p>

<p><strong>Solution: See software as an depreciating asset</strong></p>

<p>I propose another approach where we rely less on an incomplete metaphor. By addressing the problem directly.</p>

<p>Software is an asset and in the US custom software is even classified as a fixed asset (<a href="http://businessecon.org/2013/01/the-definition-of-fixed-assets/">here</a> and <a href="http://www.accountingtools.com/definition-fixed-asset">here</a>). An asset’s value is determined by the condition in which that asset exists and its value depreciates as it falls into disrepair.</p>

<blockquote>
  <p>In Mythical Man Month, Fred Brooks said of entropy <em>“All repairs tend to destroy the structure, to increase the entropy and disorder of the system. Less and less effort is spent on fixing the original design flaws; more and more is spent on fixing flaws introduced by earlier fixes.”</em></p>
</blockquote>

<p>From an asset perspective refactoring synonymous to upkeep (maintenance). As with upkeep, through refactoring we avoid having the system fall into disorder. Our system’s usefulness and value depreciates as it falls into disrepair. This state of disorder behaves similarly to financial debt in that it compounds. This lack of upkeep causes a compounded increase in the cost of further development and fixes within the codebase.</p>

<p>A further merit is that software <strong>IS</strong> an asset as we can use established reasoning about asset freely. We don’t have to rely on flaky financial markets analogies anymore.</p>

<p>We shouldn’t forget about the merit of the Technical Debt metaphor as well. When you talk to non-technical people just say that the lack of upkeep has a compounding effect and only when they really struggle to understand should you use the “Debt” metaphor.</p>

<p>Aside, I see immense value in the Technical Debt quadrant and simply propose that we call it something more appropriate such as the “Entropy Quadrant” or even more evocative the “Deterioration Quadrant”.</p>

<!--kg-card-end: markdown-->]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[I was first introduced to the Technical Debt metaphor in 2008 in this video. The key takeaway for me is the Technical Debt metaphor to help us explain how the disorder within a system affects future development work.]]></summary></entry><entry><title type="html">Virtual coaching circles</title><link href="https://cron.je/2015/08/12/virtual-coaching-circles.html" rel="alternate" type="text/html" title="Virtual coaching circles" /><published>2015-08-12T17:47:00+00:00</published><updated>2015-08-12T17:47:00+00:00</updated><id>https://cron.je/2015/08/12/virtual-coaching-circles</id><content type="html" xml:base="https://cron.je/2015/08/12/virtual-coaching-circles.html"><![CDATA[<p>During first half of the year I participated in a virtual coaching circle with 5 other coaches from three companies. <strong>This was an great learning experience for everyone involved and I hope that other coaches can experience the same</strong></p>

<p>I decided to write this blog post in the hope of enticing other coaching across the globe to share in this experience. Additionally I wouldn’t mind finding myself in a coaching circle with other developer/technical coaches.</p>

<h3 id="some-background">Some background</h3>

<p><a href="http://www.twitter.com/samlaing">Sam</a> and <a href="http://www.twitter.com/karen_greaves">Karen</a> from <a href="http://www.growingagile.co.za">Growing Agile</a> came up with the idea of running a virtual coaching circle. The plan was to have discussions with the goal of gaining and sharing insights of different coaching related topics.</p>

<p>They invited <a href="http://www.twitter.com/smamol">Sandy</a> and Rachael from <a href="http://nomad8.com/">Nomad8</a>, and <a href="http://www.twitter.com/jacdevos">Jacques</a> and I from <a href="http://www.nreality.com">nReality</a> to the first experimental round.</p>

<h3 id="the-format">The format</h3>

<p>We ran 90 minutes sessions every two weeks where each session was facilitated by a different coach.</p>

<p>With the exception of the final session which was a retrospective, each coach had the opportunity to pose questions to the group. This was done a week or two in advance of each session in order to give the group enough time to prepare.</p>

<p>90 minutes is not much time, but it was enough to give wach participant the opportunity to present their answers and discuss others’ answers.</p>

<p>All sessions were held over Hangouts and we followed this protocol:</p>

<ul>
  <li><strong>Voice only.</strong> switch off video: this helps keep voice quality high.</li>
  <li><strong>Add a photo to your Google+ profile.</strong> this way we can see your picture when you speak :)</li>
  <li><strong>Bottom Line.</strong> Tell stories but keep them short so that everyone gets a chance to talk. Feel free to ask each other to bottom line (get to the key question) during calls.</li>
  <li><strong>Talk slowly and clearly.</strong> we all have funny accents :)</li>
  <li><strong>Mute yourself if you’re not talking.</strong> This helps keep noise to a minimum. (And remember to unmute when you talk - that takes practise!)</li>
  <li><strong>Dead air is ok.</strong> Sometimes we’re all thinking, it does take some getting use to though.</li>
  <li><strong>Make use of IM.</strong> Especially if you want to +1 a comment or vote to skip to the next thread/question/topic/person. This will probably be on Slack the next time round</li>
</ul>

<h3 id="how-it-went">How it went</h3>

<p>The previous circle that we ran was themed around <strong>running and building your own coaching business</strong>. We formed trust within the group very quickly and were surprisingly open with our businesses. This was probably because we were in different countries and cities, and do not work on the same subject matter.</p>

<p>I anticipate that each circle will be different dependant on the types of people involved and their willingness to discuss certain content.</p>

<p>Here is a list of the material we covered:</p>

<ul>
  <li><strong>Session 1:</strong> Running a coaching, training, and product business (1)
    <ul>
      <li>Focus on time spent on different activities like marketing, business development, actual work, etc</li>
      <li>Billable vs non-billable time</li>
      <li>Roles</li>
    </ul>
  </li>
  <li><strong>Session 2:</strong> Running a coaching, training, and product business (2)
    <ul>
      <li>Company size</li>
      <li>Decision making</li>
      <li>Ownership, IP and shares</li>
      <li>Sales protocol (like the Bun Protocol)</li>
      <li>Contributions and tax</li>
      <li>Income security</li>
    </ul>
  </li>
  <li><strong>Session 3:</strong> Selecting clients, kicking off at new clients
    <ul>
      <li>Selection criteria</li>
      <li>Which people and roles to start working with</li>
      <li>Dealing with resistance</li>
      <li>Selling the need for coaching</li>
    </ul>
  </li>
  <li><strong>Session 4:</strong> Learning and keeping up to date
    <ul>
      <li>Deciding what to learn</li>
      <li>Planning and prioritising learning material</li>
      <li>Learning techniques for new topics</li>
      <li>Do coaches need to be specialists or generalists?</li>
    </ul>
  </li>
</ul>

<h3 id="what-is-next">What is next</h3>

<p>Please send me a mail if you’d like to be invited to the Slack group where we organise the session circles.</p>

<p>I am personally very interested in being a participant in a coaching circle themed around Developer/Technical coaching. So let me know at martin[at]nreality[dot]com if you are keen.</p>

<!--kg-card-end: markdown-->]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[During first half of the year I participated in a virtual coaching circle with 5 other coaches from three companies. This was an great learning experience for everyone involved and I hope that other coaches can experience the same]]></summary></entry><entry><title type="html">Why I’ve become a polyglot…</title><link href="https://cron.je/2015/05/26/becoming-a-polyglot.html" rel="alternate" type="text/html" title="Why I’ve become a polyglot…" /><published>2015-05-26T19:32:00+00:00</published><updated>2015-05-26T19:32:00+00:00</updated><id>https://cron.je/2015/05/26/becoming-a-polyglot</id><content type="html" xml:base="https://cron.je/2015/05/26/becoming-a-polyglot.html"><![CDATA[<p>In 2012, I started my first iOS project after working with C# for over a decade. This led to a journey where I ended up working with OS X, Linux, MongoDB, ObjC, Node.js, C, Ruby and much more.</p>

<p>In retrospect this experience accelerated my learning dramatically and because of that I want to share this story with you.</p>

<h3 id="backstory">Backstory</h3>

<p>Rewind to the 80’s…</p>

<p>I wrote my first code on the Macintosh II when I was 9 years old. It was awesome! I wish I could say the rest was history, but it wasn’t. Around the same time Adobe released Photoshop 2 which was the first to support colour (I can’t remember if I ever used v.1). I was hooked and spent most of my computer time designing graphics.</p>

<p>Fast forward to 1995 when we bought our first PC. Shortly afterwards we got internet and it blew my mind. I spent most of my time on IRC, playing games (Q2 and C&amp;C) and messing around with basic hacks. Around 1996 I downloaded my first MP3 (Prodigy - Voodoo People) and decided that I must have my own MP3 site.</p>

<p>I ended up designing and authoring a new site for Moshmetalz MP3. The original webmaster and I ran the site for about 18 months when I decided to go to the UK for a working holiday where I got my first job as a web author using Coldfusion.</p>

<p>The rest is history.</p>

<ul>
  <li>1998: Coldfusion</li>
  <li>1999 - 2000: Visual Basic 6</li>
  <li>2000 - 2002: Java</li>
  <li>2002 - 2011: .NET (C#)</li>
  <li>2011 - now: Objective-C, Node, Ruby, PHP, and C#</li>
</ul>

<p>I have been coding for most of my life and hope to do so for as long as I can. As I get older keeping my skills relevant is becoming an increasing challenge.</p>

<h3 id="moving-on">Moving on</h3>

<p>During my 10 years as a .NET developer I’ve had the the fortune on extremely interesting projects from doing the seat calculation for the South African National/Provincial elections through to doing insanely high speed message processing and data analytics for the Johannesburg Stock Exchange.</p>

<p>So why did I stop being a .NET developer? Here are 6 reasons:</p>

<h4 id="net-and-microsoft-culture">.NET and Microsoft culture</h4>

<p>Starting with with ALT.NET movement around 2005, the .NET community has made massive strides in the last 10 years. Unfortunately, the community is still filled with countless “Drag ’n drop” developers.</p>

<p>It is hard to avoid teams like that.</p>

<h4 id="boring-corporate-projects">Boring corporate projects</h4>

<p>I always found it very hard to seek out interesting .NET projects. The typical .NET project usually involves management software, accounting, or data capture. Worst of all these projects usually take place in those typical corporates with under hierarchical and authoritative management, restrictive policies and cubicle farms where the you wear the standard issue blue shirt and brown chino’s. Aaarggh!</p>

<p><em>This holds equally true for Java, COBOL and NATURAL developers by the way.</em></p>

<h4 id="a-new-hammer">A new hammer</h4>

<p>With each new release of the .NEW framework (err .NET) I got less and less excited by the features. As I explained to my wife: <em>“I was just getting a new and improved hammer every year and at the end it was still just a hammer.”</em></p>

<p>Being the lover of new toys, I had to start mastering other tools.</p>

<h4 id="becoming-a-n00b">Becoming a n00b</h4>

<p>There was also diminishing returns in deepening my knowledge of the platform. As my knowledge of the platform deepened I had to invest more time to learn increasingly smaller minutiae.</p>

<p>By forcing myself to learn other platforms, I’ve become the perpetual n00b. With that I get to experience all the excitement I had when I wrote my first programs. This also comes with the angst of being unsure how well I’m doing. (A good thing :-D )</p>

<h4 id="cross-pollination">Cross-pollination</h4>

<p>The cool thing about different platforms is how each platform and its community approaches things uniquely. To name a few differences:</p>

<ul>
  <li>Closures on .NET and Ruby are beautiful. Interesting in Objective-C and just plain ugly in JavaScript.</li>
  <li>The Ruby and Node.js communities have a strong culture of TDD and there is a lot to learn from them.</li>
  <li>Objective-C is verbose which causes code to quickly turn ugly. To prevent this continuous refactoring towards patterns and proper naming is essential.</li>
</ul>

<p>What this taught me:</p>

<ul>
  <li>The emphasis on different things between platforms carry over to others. For example:
    <ul>
      <li>My understanding of the concept of the “unit” under test in TDD improved when working with Ruby and JavaScript (Node.js)</li>
      <li>My method and parameter naming improved as because strange approach in Objective-C that makes intent painfully clear.</li>
    </ul>
  </li>
  <li>Different platforms are better for different jobs and you should know what to use where. For example:
    <ul>
      <li>Ruby and Node.js are über productive platforms.</li>
      <li>Node.js is great for async processing and event-driven systems, but suck at traditional sequential logic.</li>
      <li>.NET and Java handle large codebases very well.</li>
    </ul>
  </li>
</ul>

<p>In summary, I believe this improved my ability as a developer because I make better technology choices and this allows me to take different.</p>

<h4 id="the-importance-of-being-a-polyglot-as-a-mentor">The importance of being a polyglot as a mentor</h4>

<p>In 2001 I decided to start coaching teams after playing roles including Team Lead, Solutions Architect, and even Enterprise Architect. My goal as a coach is to help teams become more effective across all activities in the software development lifecycle.</p>

<p>Being a polyglot allows me to jump in and pair program with almost any developer. It also comes with the added benefit of sharing “cross-platform” insight especially in age-old debates like the Java vs C#, Windows vs Unix or whatever else.</p>

<p>At this stage of my career it is more important that my knowledge is broad, than deep and specialised.</p>

<p><em>PS. It helps that I still spend half of my time building real world systems :-).</em></p>

<h3 id="in-closing">In closing</h3>

<p>Becoming a polyglot and build real-world systems on a variety of platforms has been deeply rewarding and I believe it has made more rounded as a developer.</p>

<p>I love the craft and it brings me deep joy.</p>

<!--kg-card-end: markdown-->]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[In 2012, I started my first iOS project after working with C# for over a decade. This led to a journey where I ended up working with OS X, Linux, MongoDB, ObjC, Node.js, C, Ruby and much more.]]></summary></entry><entry><title type="html">DefCon! When things go wrong</title><link href="https://cron.je/2015/05/21/defcon.html" rel="alternate" type="text/html" title="DefCon! When things go wrong" /><published>2015-05-21T06:37:00+00:00</published><updated>2015-05-21T06:37:00+00:00</updated><id>https://cron.je/2015/05/21/defcon</id><content type="html" xml:base="https://cron.je/2015/05/21/defcon.html"><![CDATA[<p>A couple of weeks back one of my clients migrated thousands of users onto their platform and things went wrong badly. Everything worked, it was just to slow to support their needs. I’m not going to expand to much on the detail as I want to keep everyone anonymous.</p>

<p>Once the dust settled we had a focussed retrospective during which we mapped out the good and bad events leading up to- and after the migration (a.k.a. “the bang”).</p>

<p>Three very interesting things came to the fore:</p>

<ul>
  <li>The team did some innovative things leading up to “the bang” that improved their chance of success.</li>
  <li>On the bad side, we noticed that the team had seen warning signs that things would go wrong.</li>
  <li>The team reduced process fidelity as pressure mounted and especially once things went pear-shaped.</li>
</ul>

<p>This is not an isolated event.</p>

<h3 id="the-problem">The problem</h3>

<p>As I’ve working with teams to improve their effectiveness, I noticed that teams occasionally regress to their old ways when they are faced with challenging circumstances such as:</p>

<ul>
  <li>prolonged crisis like production outages or massive spike in user base, or</li>
  <li>deadline that threatens the company’s existence such as compliance requirements.</li>
</ul>

<p>These are usually situations where the team has no choice but to “get shit done” with limited time and resources. <em>(Not the most ideal circumstances if you consider the project management triangle)</em></p>

<p>The worrying thing is that teams often drop process fidelity to handle these situations. Some of the things I’ve seen teams do include:</p>

<ul>
  <li>stopping stand-ups and retrospectives,</li>
  <li>reducing planning sessions such as grooming and story mapping, or</li>
  <li>bypassing engineering practices such as TDD and clean-up of legacy code.</li>
</ul>

<p>This is usually because of a combination of things;</p>

<ul>
  <li>they are more comfortable with the old way of doing things</li>
  <li>they do not see the value in the added process overhead</li>
  <li>most commonly, they simply feel that the process and practices are getting in the way of solving the problem.</li>
</ul>

<p>The result was that the teams became less coordinated and less effective during crisis situations. This leads to poor quality, long hours and even more crisis.</p>

<p>We always used to encourage teams to hang onto their practices during these crisis situations and it always seemed to fall on deaf ears. We concluded that this was because they haven’t truly integrated the new practices and that it will be better next time.</p>

<p>We were wrong… Well at least partly wrong.</p>

<h3 id="the-solution">The solution</h3>

<p>So back to the team in question.</p>

<p>During the retrospective one of the team members observed that they became reactive where they needed to become more proactive. Another team member observed that they gave up on “Agile” (ouch).</p>

<p>In other words their processes were not capable of supporting them during a crisis situation. In other words the rules seem to change. Based on the theme coming from the retrospective we explore two things</p>

<ul>
  <li>What should the practices look like when there is a crisis?</li>
  <li>How do they get early warning on a crisis?</li>
</ul>

<p><em>In a way this is similar to the concept of DefCon wherein which the US military alertness and ability to deploy increases with higher conditions of risk.</em></p>

<p>We listed out two categories “Early warning” and “Crisis practices”.</p>

<h4 id="early-warning">Early warning</h4>

<p>One of the goals with DefCon is that the team want to avoid it if they can. In order to do so they created a list of warning signs that would help them identify that a crisis is probable (risks) or imminent (issues):</p>

<ul>
  <li>Deadline set for a release.</li>
  <li>There is ambiguity or risk in a work item.</li>
  <li>The production environment monitors are going red (failing).</li>
  <li>Support calls are increasing.</li>
  <li>Management is suddenly very worried about an event or work product.</li>
  <li>The rate of interruption (especially from management) is increasing</li>
  <li>The team is abandoning process.</li>
</ul>

<p>Once these start manifesting then any team member can propose that the team is facing a DefCon situation. The team then activates DefCon based on a quorum vote.</p>

<p>Hopefully the early warning system will allow them to avoid crisis.</p>

<h4 id="crisis">Crisis</h4>

<p>To handle crisis more effectively the team proposed an augmented process. These rules have will still be tested and refined with every consecutive crisis.</p>

<p>These changes are all about increasing focus at the cost of the long term effectiveness, without being negligent.</p>

<ul>
  <li>Get visibility on the crisis
    <ul>
      <li>Andon: Implement monitoring that with indicators that shows the current environment health. Focussed on the crisis.</li>
      <li>Kanban: Setup a board that is exclusively focussed on the crisis and other “must do” activities on the environment.</li>
    </ul>
  </li>
  <li>Instead of normal planning the team focusses more on triage.</li>
  <li>Be very strict about limiting work in progress to one active task per person.</li>
  <li>Run stand-ups more frequently (2 to 4 times per day).</li>
  <li>Team lead (there is no full-time coach) becomes responsible for protecting the team by limiting access.</li>
  <li>Team lead primarily manages communication to users and the rest of the organisation.</li>
  <li>On the fun side. The team will print “Don’t Panic” signs. :-)</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>To reiterate this is an experiment and the jury is still out. The goal is for the team to increase focus when a crisis occurs.</p>

<h3 id="side-bar">Side bar</h3>

<p>During recent conversations <a href="https://www.twitter.com/jacdevos">@jacdevos</a> was telling me about the <a href="https://www.youtube.com/watch?v=KIkUWG5ACFY">Software G-Forces</a> that Kent Beck spoke of in 2011. This came to mind during our retrospective and I explained the concept to the team. In short the concept is that the application of practices change dependent on the rate at which you deploy (G-Force). For example: <em>Branching impeded teams if they deploy daily, but becomes a necessity if they deploy yearly.</em></p>

<p>This concept applies here to some extent.</p>

<!--kg-card-end: markdown-->]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[A couple of weeks back one of my clients migrated thousands of users onto their platform and things went wrong badly. Everything worked, it was just to slow to support their needs. I’m not going to expand to much on the detail as I want to keep everyone anonymous.]]></summary></entry><entry><title type="html">nReality’s operational plan</title><link href="https://cron.je/2015/03/20/nreality-operational-plan.html" rel="alternate" type="text/html" title="nReality’s operational plan" /><published>2015-03-20T15:18:00+00:00</published><updated>2015-03-20T15:18:00+00:00</updated><id>https://cron.je/2015/03/20/nreality-operational-plan</id><content type="html" xml:base="https://cron.je/2015/03/20/nreality-operational-plan.html"><![CDATA[<p>Yesterday we had a company team day where <a href="http://www.twitter.com/jacdevos">@jacdevos</a> and I, along with our new team members <a href="http://www.twitter.com/pretorh">@pretorh</a> and <a href="http://www.twitter.com/reinhardholl">@reinhardholl</a>, revisited nReality’s values, philosophy, mission statement and operation plan.</p>

<p>We decided to make the outcomes public in order to elicit feeback from the community. Please feel free to provide suggestions. Hopefully you’ll also be able to use some of these ideas in your own ventures.</p>

<p>Jacques and I originally created nReality to be a home for entrepreneurial software developers who want to maximise the value they bring to people through consulting and development services. Using these services as a vehicle we want to experiment in building new knowledge and software products that can spin off into new businesses. Like <a href="http://birdlasser.com">BirdLasser</a> and <a href="http://www.devguild.io">DevGuild</a>.</p>

<p>In order to achieve this goal one of our core values is “Our culture and philosophy is the culmination of each individual”. This means we have to continuously adapt (and improve) our business plan as we go along. This blog post reflects our current understanding.</p>

<p>To quote Jacques: <em>“We are building the company that we would want to work for”</em>.</p>

<h2 id="company-overview">Company overview</h2>

<p>We’ve learnt a lot from our successes and failures over the last three years. Out of our experiences we discovered that we are most successful in helping companies bring awesome products to the market. We do this through coaching teams or building the products ourselves.</p>

<p>Yesterday, we refined our elevator pitch to reflect this niche:</p>

<blockquote>
  <p>nReality is a consultancy that help companies bring valuable software products to market through coaching and development services. Our key differentiator is our focus on the entire software lifecycle and not just individual practices such as project management or testing.</p>
</blockquote>

<h2 id="values">Values</h2>

<p>We created our value system 3 years ago and have been updating it as time progressed. One of the biggest updates came later that year after we read “Delivering Happiness” which talks about how the Zappos’ value system is instrumental in catalysing their culture. A key takeaway was how you should be able to tell stories of how the value system was put into practice.</p>

<p>Interestingly we realised that we do not always manage to live up to some of the values - like “balanced lifestyle”, but striving to achieve them alway pull us back on course. We did not update the values during the session, but identified some duplication which we will iron out over time.</p>

<ul>
  <li><strong>Balanced lifestyle</strong>. Have fun and play.</li>
  <li><strong>Nurture our passion.</strong> Only do we believe in and practice what we preach</li>
  <li><strong>Everyone is important.</strong> We are not slaves or resources</li>
  <li><strong>Trust and respect.</strong> Our culture and philosophy is the culmination of each individual</li>
  <li><strong>Excellence.</strong> Strive for pragmatism, simplicity, creativity and extreme effectiveness enabled with the best tools and techniques</li>
  <li><strong>Progressiveness.</strong> Learn continuously, adapt to the environment, and fail fast</li>
  <li><strong>Keep ourselves honest.</strong> Always deliver value. Remain direct and truthful</li>
  <li><strong>Collaborate</strong>. Strength through networks and meaningful relationships</li>
  <li><strong>Mentor</strong>. Empower and enable the community. Help those that want help</li>
  <li><strong>Sustainability.</strong> We want to create a business that allows us to live life.</li>
</ul>

<p><em>Ethics and integrity are implicit.</em></p>

<h2 id="team">Team</h2>

<p>It is worthwhile to quickly say who our team is:</p>

<ul>
  <li>Hendri Pretorius: Developer</li>
  <li>Jacques de Vos: Founder, developer, and coach</li>
  <li>Martin Cronjé: Founder, developer, and coach</li>
  <li>Reinhard Höll: Developer</li>
</ul>

<p>Everyone reviewed and edited this post with me.</p>

<h2 id="operational-plan">Operational plan</h2>

<p>This is a very rough draft of our current thinking.</p>

<p>We draw a lot of inspiration from <a href="http://dna.crisp.se">Crisp DNA</a>. Our company operates as a collective working together to;</p>

<ul>
  <li>build a great brand within the industry</li>
  <li>help each other succeed with our own goals</li>
  <li>gain security through operating as a team and building a strong network of partnerships</li>
</ul>

<p>This outlines some of the decisions we regarding our operation plan:</p>

<h4 id="member-income">Member Income:</h4>

<ul>
  <li>There is no fixed or capped income. In other words a member earns the full amount that they invoice minus the transparent company contribution as calculated below.</li>
  <li>There is full transparency on the income of all members.</li>
  <li>All members will assist, as far as possible, other members to achieve their personal income goals.</li>
  <li>Members are responsible for their own financial security and income stability. However, members will assist each other, as far as possible, in the event a member suddenly loses client income.</li>
</ul>

<h4 id="ownership-of-ip">Ownership of IP</h4>

<ul>
  <li>All knowledge products are licensed under “Creative Commons * Attribution-Noncommercial-No Derivative Works 2.5 South Africa”.</li>
  <li>All code is owned by authors.</li>
  <li>Members can use each others IP on agreement by the owner.</li>
  <li>nReality can use the bragging rights of all active members work, and can choose to be or not to be associated with their work.</li>
  <li>nReality members have first option to invest in products created off by the members.</li>
</ul>

<h4 id="when-someone-leaves">When someone leaves</h4>

<ul>
  <li>The person who leaves have first option on their active clients and can continue further relations.</li>
  <li>People purchase their own equipment which they retain that when they leave.</li>
</ul>

<h4 id="approval-and-decision-making">Approval and decision making</h4>

<p>nReality members must get approval from the collective for:</p>

<ul>
  <li>for new ventures to ensure brand integrity is maintained.</li>
  <li>to let clients go or bring new ones in.</li>
  <li>any legally binding contract.</li>
</ul>

<h4 id="shareholdership">Shareholdership</h4>

<ul>
  <li>Members of the collective have the option to buy shares after 2 years.</li>
  <li>Shareholders must bill monthly for 6 months to retain ownership.</li>
</ul>

<h4 id="sales">Sales</h4>

<ul>
  <li>Bun Protocol (from Crisp DNA).</li>
  <li>Commission is negotiated at start of sales process.</li>
  <li>All proposals reviewed at hourly rate (Operational / Marketing).</li>
  <li>All proposals approved by collective.</li>
</ul>

<h4 id="company-operations">Company operations:</h4>

<ul>
  <li>With company operation we refer to; accounting, legal, HR, and marketing.</li>
  <li>Hourly rate capped at 16 hours per month per person, above that collective approval is required. Members.</li>
  <li>Marketing expenses such requires collective approval. Expenses are typically outsourced graphic design, travel-costs to speak at conferences.</li>
  <li>Members are compensated for their time taking into considerations: their hours logged on Ops/Marketing, their baseline income and the money that is left from company contributions (detailed calculation in spreadsheet)</li>
</ul>

<h4 id="contributions-and-expenses">Contributions and expenses:</h4>

<ul>
  <li>We have a fixed monthly company payment to cover fixed expenses such as accountants, bank charges, virtual offices, entertaining clients, GitHub, Google Apps, etc.</li>
  <li>We have a variable payment of 5-10% to cover member compensation for company operations. The compensation model sums to zero if all members contribute equally</li>
  <li>We are fine tuning these numbers as we go.</li>
</ul>

<h4 id="company-meetings">Company meetings</h4>

<ul>
  <li>We are trying to work from the same office space once a week with a requirement to be at the office once a month where we do a retrospective on the company.
<!--kg-card-end: markdown--></li>
</ul>]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[Yesterday we had a company team day where @jacdevos and I, along with our new team members @pretorh and @reinhardholl, revisited nReality’s values, philosophy, mission statement and operation plan.]]></summary></entry><entry><title type="html">Arrrgh, business doesn’t know what they want!</title><link href="https://cron.je/2014/07/25/arrrgh-business-doesnt-know-what-they-want.html" rel="alternate" type="text/html" title="Arrrgh, business doesn’t know what they want!" /><published>2014-07-25T06:09:00+00:00</published><updated>2014-07-25T06:09:00+00:00</updated><id>https://cron.je/2014/07/25/arrrgh-business-doesnt-know-what-they-want</id><content type="html" xml:base="https://cron.je/2014/07/25/arrrgh-business-doesnt-know-what-they-want.html"><![CDATA[<p>The most common problem software teams face is that they struggle to define stable unambiguous requirements for their software products. This is something I’ve observed in small start-ups of ten and multi-national organisations of tens-of-thousands.</p>

<!--Problem-->
<h3 id="the-wrong-hammer">The wrong hammer</h3>

<p>This issue typically, manifests by a high rate of features that are rejected during acceptance testing. When this happens teams typically rally and say that they need more detailed and explicit specifications/stories. In the instances that the teams end up creating more detailed stories, they typically find that the problem doesn’t go away.</p>

<p>This is because the problem does not lie with the specs, but rather the communication of the feature. The spec is merely a mechanism that the Product Owner (PO) uses to <strong>communicate</strong> their requirements. So it isn’t that we need better specs it is that we need better communication.</p>

<h3 id="so-whats-the-problem-really">So what’s the problem really?</h3>

<p>When we started looking at communication between role players we found that in all cases the PO communicated <strong>what</strong> they wanted.</p>

<p>Nothing wrong! Right?</p>

<p>No! Most PO’s typically rely on their intuition to communicating what they think the solution is as opposed to what the problem is. That is the software development equivalent of diagnosing yourself and telling your doctor that you need a kidney transplant!</p>

<p>More subtly, developers don’t really know what features are important because they don’t know what value the requirements add to the business. So not only do we build the wrong features but we end up building things that have little value.</p>

<!--Solution-->
<h3 id="why-why-why-">Why? why? why? …</h3>

<p>So how do we fix it?</p>

<p>The PO should communicate their problem and more importantly they should communicate how we would know when the problem was solved. This is very hard though, because for the first time the PO has to take time a think deeply about the problem and the related test.</p>

<p>As a developer your best tool to guide them is to behave like a 5-year old and keep on asking the PO <strong>why</strong> they want something.</p>

<h4 id="money">Money</h4>

<p>This line of questioning should be structured to get to the money!</p>

<p>All systems exist to either increase revenue or increase profitability (typically through increased efficiency). So structure the questions to guide the PO toward they money.</p>

<p><em>Example (what-driven):</em></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PO &gt; We a report to track inventory!
Dev &gt; What should the report contain
PO &gt; Current stock levels of inventory in our warehouse.
</code></pre></div></div>

<p><em>Example (why-driven):</em></p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>PO &gt; I want a report to track inventory!
Dev &gt; Why? 
PO &gt; I need to the report so that I can assess when I need
      to order new stock or cancel existing orders depending
      on market demand.
Dev &gt; Why is that important?
PO &gt; Too much stock means that the stock can perish and too
      little stock means that we can satisfy demand.
Dev &gt; You know we can build a "job" that send you an
      notification once we hit certain thresholds and it will
      probably cost less than the report.
</code></pre></div></div>

<p>Do an experiment with a friend:</p>

<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1) Why do we need to authenticate ourself in an online store 
   if we don't do so in physical stores?
2) What value is there in creating a maintenance screen for
   most lookup data in the system, especially things like
   countries and cities.
</code></pre></div></div>

<h4 id="because-it-is-your-job">…because it is your job</h4>

<p>This is also not easy because the PO may end up saying <em>“Why? Well, simple, it is your job!”</em>.</p>

<p>This may become a hard conversation if you are dealing with a hostile Product Owner. Irrespective I typically use the above examples as a thought experiment to show them that we can come up with better and more cost-effective solutions if we analyse the problem together.</p>

<h4 id="how-do-we-know-we-solved-the-problem">How do we know we solved the problem?</h4>

<p>Once you established what the problem is and how it relates to money, you should proceed to the test. In this instance you should investigate what the desired outcome is given different pre-conditions.</p>

<p>The scenario format “Given… when… then…” works very well for this.</p>

<p>I’ll explore good tests for another blog post.</p>

<!--Implications-->
<h3 id="in-closing">In closing</h3>

<p>This tool has helped many of the teams I work with become more effective in analysing requirements.</p>

<p>In fact, many of these teams abandoned traditional documentation completely and spend most of their energy getting to grips with the problem.</p>

<!--Considerations-->
<h3 id="additional-tips">Additional tips</h3>

<ul>
  <li>Measure the amount of waste caused by rejected features.</li>
  <li>Run mini-retrospectives after planning sessions to assess how the team can improve their specifications.</li>
  <li>Challenge all your pre-conceptions of what <em>“doing it right”</em> really means and allow yourself to continuously experiment with different ways of doing things.
<!--kg-card-end: markdown--></li>
</ul>]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[The most common problem software teams face is that they struggle to define stable unambiguous requirements for their software products. This is something I’ve observed in small start-ups of ten and multi-national organisations of tens-of-thousands.]]></summary></entry><entry><title type="html">Beyond the hype and the dogma (of agile)</title><link href="https://cron.je/2013/08/20/beyond-the-hype-and-the-dogma.html" rel="alternate" type="text/html" title="Beyond the hype and the dogma (of agile)" /><published>2013-08-20T09:00:00+00:00</published><updated>2013-08-20T09:00:00+00:00</updated><id>https://cron.je/2013/08/20/beyond-the-hype-and-the-dogma</id><content type="html" xml:base="https://cron.je/2013/08/20/beyond-the-hype-and-the-dogma.html"><![CDATA[<p><em>This is a backdated post that links to the video and slides of my Agile Africa 2013 talk for reference purposes.</em></p>

<p><strong>Beyond hype and dogma: How South African teams increased their value</strong></p>

<p>During this session Martin will share stories on how different South African teams improved their value through applying lean and agile thinking, processes and techniques.</p>

<p>These teams are from different sectors, sizes and culture including education, legal, finance and property investment. The session will also look at the challenges that these teams faced.</p>

<p>Some of the stakeholders including CIO’s and Development Managers in the respective businesses will also be in the session to share their experiences first-hand.</p>

<p><a href="https://speakerdeck.com/martincronje/beyond-hype-and-dogma-how-south-african-teams-increased-their-value">Slides here</a></p>

<iframe width="560" height="315" src="//www.youtube.com/embed/videoseries?list=PLHWYsEql8i8b4_8gNKLoIfD_6wUsVSnj_" frameborder="0" allowfullscreen=""></iframe>
<!--kg-card-end: markdown-->]]></content><author><name>{&quot;bio&quot;=&gt;&quot;My experiences in leading, building and transforming teams to deliver well-crafted software.&quot;, &quot;links&quot;=&gt;[{&quot;label&quot;=&gt;&quot;LinkedIn&quot;, &quot;icon&quot;=&gt;&quot;fab fa-linkedin&quot;, &quot;url&quot;=&gt;&quot;https://www.linkedin.com/in/mcronje&quot;}, {&quot;label&quot;=&gt;&quot;GitHub&quot;, &quot;icon&quot;=&gt;&quot;fab fa-github&quot;, &quot;url&quot;=&gt;&quot;https://github.com/martincronje&quot;}]}</name></author><summary type="html"><![CDATA[This is a backdated post that links to the video and slides of my Agile Africa 2013 talk for reference purposes.]]></summary></entry></feed>