Upgrade to Pro — share decks privately, control downloads, hide ads and more …

AgileNZ - Towards Mastery: Establishing Craftsm...

AgileNZ - Towards Mastery: Establishing Craftsmanship Culture in a Team

“We need software developers who are professionals and view their work as a craft!”. This is often heard in development teams as a reaction to fragile systems built on messy codebases. This statement also often implies a yearning for a certain type of developer… those (lucky ones) who go home and hack until the early hours of the morning to pursue their thirst for knowledge.

In reality, many developers don’t have the time to build their skills and some others see their job as something confined to 9 to 5. This is ok, but it results in teams that don’t grow which exacerbates the problem where companies rely more and more on ‘ninjas’ and ‘rock stars’. This has to stop! We need an alternative. Let’s build our people within their constraints and let’s figure out how to do it well!

This talk explores techniques that the speaker has successfully applied to help many companies and teams improve the quality and effectiveness of their engineering efforts: creating a culture of learning with techniques such as code dojos, katas and other intentional learning activities. Helping developers learn and apply practices such as clean code, refactoring, TDD, pair- and mob programming and continuous integration. Overcoming common arguments against intentional learning and improvement.

Martin Cronjé

November 30, 2016
Tweet

More Decks by Martin Cronjé

Other Decks in Programming

Transcript

  1. @martincronje 47% jobs have a high chance of being computerised

    by 2023 From: The Future of Employment: How Susceptible are Jobs to Computerisation
  2. @martincronje Most systems are in disrepair 312 Billion USD spend

    debugging of which 52% are spend on Architectural defects – Deloitte research on Tech Debt reversal
  3. @martincronje Reading non-stop, how long does it take you to

    read a 300 page book? Poll on goodreads.com (6342 responses) 2.40% 17.3% 36.8% 21.5% 10.0% 12.0% An hour or less 1-3 hours 3-6 hours 6-9 hours 9-12 hours More than 12 hours
  4. @martincronje • Day long event with 5-6 seperate 45 min

    sessions. • Attempt to implement Conway’s Game of Life in each session. • Do not have to complete anything. Delete code every sessions • Different pairs per session with people you don’t normally work with. • Get out of your comfort zone. Experiment and learn. Try different paradigms. Deliberate Practice: Coderetreat
  5. @martincronje • Direct application of the principles on deliberate practice.

    • Started as simple coding exercise focused on learning specific skill from TDD to Refactoring and Emergent Design. • Architecture, analysis and design katas have also been developed. Deliberate Practice: Katas
  6. @martincronje • 1-3 hours session with retro every 45 minutes.

    • Work on any kata that the group thinks is relevant for them. • Repeat katas over numerous sessions. • Done using Mob Programming with 4-7 min turns at the keyboard. • Use strong pairing technique. • Run a retro at the end. Deliberate Practice: Coder Dojos
  7. @martincronje “…Activities designed, typically by a teacher, for the sole

    purpose of effectively improving specific aspects of an individual’s performance…” K. Anders Ericsson, Psychologist
  8. @martincronje • Target specific skill • Repeated a lot Deliberate

    Practice • Continuous feedback • Must be hard
  9. @martincronje CLIENTS COLLABORATE SIMPLIFY INNOVATE RESULTS PASSION MYOB’S VALUES DRIVE

    OUR WORLD WE’RE BETTER TOGETHER MAKE IT EASIER FIND NEW WAYS ACHIEVE OUR GOALS LOVE YOUR WORK
  10. @martincronje CLIENTS SIMPLIFY INNOVATE RESULTS DRIVE OUR WORLD MAKE IT

    EASIER FIND NEW WAYS ACHIEVE OUR GOALS COLLABORATE PASSION MYOB’S VALUES WE’RE BETTER TOGETHER LOVE YOUR WORK
  11. @martincronje Feedback… • Working across teams • Knowing what I

    don’t know • Trying out different techniques • Variety is great • Collaborating for the first time
  12. @martincronje • Deliberate practice principles as a baseline. • Work

    in groups to encourage shared learning • Single objective for exercise • Known tech if we are learning a new practice • Focus on areas where we need to grow • Be open to try things radically different Making it work Principles Execution Logistics
  13. @martincronje Logistics • Everyone from the team involved • 3

    hours every Friday afternoon after retrospectives and showcases • No work normal production work unless there is a production outage • If coding session, Everyone should already have a working environment with test-runner in their desired platform Principles Execution Making it work
  14. @martincronje • Remind everyone of the principles. • Remind team

    of the outcomes from the previous dojo and get input for current day. • Set constraints for the day such as exercise, coding session length, platform, pair vs. mobs. • Run coding sessions and end each with a quick retro. (30, 45 or 60 minutes) Execution Logistics Principles Making it work
  15. @martincronje • Different learning styles • Different needs per team

    • BA’s and QA’s excluded • Practices vs. Technologies What didn’t work
  16. @martincronje Tips for the road: Getting buy-in Growth: • Software

    will be able to do 25% of job within 10 years* • Number of developers are doubling every 5 years ** Hiring: • Hiring developers who learn on their own time is not sustainable. Their personal conditions change and the hiring pool is limited. • Hiring the best developers is become an arms race of who has the best offices, salaries, work. * The Future of Employment: How Susceptible are Jobs to Computerisation ** StackOverflow 2016 Developer Survey ** http://blog.cleancoder.com/uncle-bob/2014/06/20/MyLawn.html
  17. @martincronje Tips for the road: Sustainability • Same place, same

    time every week as with retrospectives and stand-up. • Teams may not see value initially, give it a month or two. • One stabilised start coaching others to run the sessions. • Practices the katas with a smaller group ahead of the time to get an idea on what they are about.
  18. @martincronje Tips for the road: Production Code TDD and emergent

    design: • Create a kata out of a recent story and experiment on a detached branch Refactoring: • Use scratch pad refactoring to experiment with different ideas on detached branch. • Take the best most recent code created by the team and refactor it. • Also take the oldest messiest code.
  19. @martincronje Tips for the road: Inventory Test-driven design • https://en.wikipedia.org/wiki/Conway's_G

    ame_of_Life • http://codekata.com Emergent Design • http://codekata.com (Checkout Kata) Refactoring • https://github.com/jbrains/trivia • https://github.com/emilybache (Especially Gilded Rose) Architecture • https://archkatas.herokuapp.com Story Mapping • https://archkatas.herokuapp.com
  20. @martincronje .01 .02 .03 .04 WE MUST INVEST IN OUR

    PEOPLE PRACTICE MAKES PERFECT KEEP ON EXPERIMENTING CREATE SPACE FOR GROWTH