Showing posts with label deliberate practice. Show all posts
Showing posts with label deliberate practice. Show all posts

Wednesday, October 24, 2012

Coding Dojo @DR 003

Below you'll find all details of the Coding Dojo @DR 003 meeting. Please comment on this post with your opinion or concern on any topic. 

This time we'll be practicing with a Kake format (see Little Coding Dojo Intro for a details on each format). We have an open discussion on Google Moderator (http://goo.gl/wKgwu) to select the Kata to be used. Please go to that URL and vote up for your favorite problem(s). We need at least one PC (laptop) on each team, so bring yours; it might be needed.

Newbies, please check the following references before the next meeting:

I  -Event URL:  http://goo.gl/dkNdT

II -Katas Pool
Go to Google Moderator series http://goo.gl/wKgwu, select your favorite problem(s) or add new ones. We'll pick the one(s) with more votes.

III-Expected attendees: 15 to 20

IV -Expected duration: 3:00 hrs. (3 hours)

V  -Agenda
  1. Inform next session date: 1 minutes
  2. Share moderator link to decide on a Topic for next session:  1 minute
  3. Form groups (3 to 5 members each): 8 minutes
  4. Kake Work (Code!): 120 minutes
  5. Each group shows their solution: 16 - 32 minutes (up to 8 minutes each)
  6. Retrospective. What went well? What was interesting? What was frustrating?: 15 minutes


This section will be filled after the event.

VI  -Next event URL: http://goo.gl/BRDR4

VII -Next event date: Tue, Nov 13, 6:30 PM - 9:30 PM

VIII-Actual attendees: 12

IX  -Actual duration: 3:00 hrs.

X   -Worked Katas:
SQL string generator

XI  -Retrospective 

What was frustrating?

  • This time nothing but the poor level of detail of the selected Kata for some of the attendees. 
What went well?
  • Everyone feels this format (Kake) was more fun than others.
  • All groups work, with different levels of detail, the problem and achieve a solution with its set of tests.
What was interesting?
  • We "taste" a little of new languages.
  • We saw different approaches of solving the problems maid possible by using different tools.
Next meeting agreements:
  • We will be rotating the 3 formats (Prepared - Randori - Kake).
  • The next format is Prepared
  • 3 of us must prepared a Kata (one each). Actually we have 4 candidates +Daniel Paniagua, +Eduardo Burgos, +Rafael George, and +I. 
  • Each prepared Kata will last from 30 to 45 minutes.

XII -Action Points
  • Confirm availability of the presenters.
  • Confirm Kata's themes and duration.

Wednesday, October 10, 2012

Coding Dojo @DR 002

Below you'll find all details of the Coding Dojo @DR 002 meeting. Please comment on this post with your opinion or concern on any topic. If you haven't read this post, please read it to gain a better understanding about this event.

For this second meeting, I want to emphasize points 3 and 4  of the Agenda. First we need to give a solid an clear introduction to the Coding Dojo Topic (meeting formats, objectives, and rules). Also is  almost mandatory for everyone to understand the TDD cycle and to see, in practice, a solution build using TDD. On the last meeting we noticed that people were unaware of the meeting format and objectives, although several references were given. So, if this is your first meeting; or you have not read the following references, please do it before the next meeting:


I  -Event URL:  http://goo.gl/ykQWe

II -Katas Pool
We must select (see point 5 of Agenda), one or more Katas to practice on each Dojo session. The following list is an extract of some easy Katas, please review each one to be informed when making your decision. You'll find more Katas at this blog Code Kata's Page.

III-Expected attendees: 15

IV -Expected duration: 3:00 hrs. (3 hours)

V  -Agenda
  1. Decide on date for next session: 5 minutes
  2. Decide on a Topic for next session: Just TDD (0 minutes)
  3. Coding Dojo and TDD introduction: 15 minutes
  4. Code! PreparedKata by Lorenzo Solano (Roman Numerals): 30 minutes
  5. Pick a / some Kata(s) for this session: 10 minutes
  6. Code! RandoriKata: 45 minutes
  7. Mid-session break to discuss how things are going: 10 minutes
  8. Code some more: 45 minutes
  9. Retrospective. What went well? What was interesting? What was frustrating?: 20 minutes


This section will be filled after the event.

VI  -Next event URL: http://goo.gl/2iOTD

VII -Next event date: Tue Oct 30

VIII-Actual attendees: 11

IX  -Actual duration: 3:00 hrs.

X   -Worked Katas:
Roman Numerals (prepared), and Word-wrapping (randori).

XI  -Retrospective 

What was frustrating?

  • Low focus on the problem at hand, participants were talking during the hole meeting about other topics.
  • Too much noise.
  • Some of the attendees were not on time.
  • Some people think that we need more "real" problems. By real they mean problems more like the ones we faced every day at work. Also they mention less-algorithmic problems.
  • Definitely, we need and external keyboard and mouse.
  • Allocate enough time for each problem, so we don't have stop and unfinished solution. 
  • Plan to have a meal.
What went well?
  • In general this meeting was, by far, more organized than the previous one.
  • We cover all points in the agenda.
What was interesting?
  • Was interesting to new ones.
  • We have knowledge sharing.
Next meeting agreements:

  • We'll have a Kake format.

XII -Action Points

  • In the future, we won't put more than one meeting format for a dojo session, to ensure that we have the time needed to work on problems.
  • For the next meeting, we need to define an "expert" on each programming language to be used on the Kake meeting. 

Monday, October 1, 2012

Coding Dojo @DR 001

Below you'll find all details of the first Coding Dojo @DR meeting. Please comment on this post with your opinion or concern on any topic. If you haven't read this post, please read it to gain a better understanding about this event.

I  -Event URL:  Kodisto Dojo @Google+

II -Katas Pool
We must select (see point 5 of Agenda), one or more Katas to practice on each Dojo session. The following list is an extract of some easy Katas, please review each one to be informed when making your decision. You'll find more Katas at this blog Code Kata's Page.

III-Expected attendees: 21

IV -Expected duration: 3:25 hrs. (3 hours and 25 minutes)

V  -Agenda
  1. Decide on date for next session: 5 minutes
  2. Decide on a Topic for next session: Just TDD (0 minutes)
  3. Coding Dojo and TDD introduction: 20 minutes
  4. Code! PreparedKata by Rafael George (String Calculator): 30 minutes
  5. Pick a / some Kata(s) for this session: 10 minutes
  6. Code! RandoriKata: 40 minutes
  7. Mid-session break to discuss how things are going: 10 minutes
  8. Code some more: 70 minutes
  9. Retrospective. What went well? What was interesting? What was frustrating?: 20 minutes


This section will be filled after the event.

VI  -Next event URL: http://goo.gl/vQ5Xk

VII -Next event date: Thu Oct 18 2012

VIII-Actual attendees: 11 (from 22 confirmed; No-Show 11)

IX  -Actual duration: 4:00

X   -Worked Katas:
Just String Calculator, see retrospective to know why.

XI  -Retrospective (If I forgot something, please comment to let the point registered)

What was frustrating?

  • Use a moderator: Discussions took to long, and some of then were pointless. Also we try to talk all at the same time.  
  • Respect the Prepared Kata format: We should be listening and looking at the techniques (TDD) presented with the prepared and respect the point of view of the person doing it. If someone does not understand a given step, the expositor must explain it; but that does not imply that both, the expositor and the attendee, must agree on the actual decision. The requirement is "not to move forward if someone does not understand the last step".
  • Respect the Agenda: no one respected the agenda, we end-up by working just on one point of it.
  • Respect the meeting schedule: only 4 (of 11 participants) arrived at the expected time.

What went well?

  • Everyone stick to the usage of the technique (TDD) moving the focus away from resolving the actual programming challenge. 
  • We cover all Test Scenarios of the problem.
  • We add more Test Scenarios to the solution.

What was interesting?

  • When is OK to stop the Refactoring step (of Red-Green-Refactor / RGR cycle)? or Is OK to do Early Refactoring?
  • It's OK to put a little of "sugar" on the syntax of the produced code (by using more readable names or by encapsulating standard's API calls with private methods), in order to increase the legibility of the code?
    • Those in favor defend the legibility to decrease the maintenance cost, and to increase the  code understanding.
    • Those against say that the average developer must understand the code. And also that if we add too many methods we'll end-up with a large call-stack, making it harder when debugging.
  • It's OK, or not, to do early optimizations?
  • When to add more test scenarios? 
    • Most attendees agreed that we must complete the original requirements first, and then add more scenarios to shield our code. 

Next meeting agreements:
  1. Next meeting subject: TDD
  2. Next meeting language: Java
  3. Next meeting format: Randori
  4. Place: <TBD>. Go to the Google's Event for more details.
  5. Other programming languages options: C#, Ruby, and Python. Withing the attendees were at least one person with enough experience using each language.

XII -Action Points
  1. Modify the next agenda to include an introduction to the Technique to be used (TDD, BDD, etc...)
  2. Modify the next agenda to include an explanation of the type of meeting we'll have.
  3. Include an early step to read the agenda to participants so everyone is on the same page and  respect it.
  4. Upload the code of the Kata to a public location (github, bitbucket or similar), so everyone can review it.
  5. Test the video recording software before starting with the Kata to ensure it's working as expected.

Tuesday, September 11, 2012

Coding Dojo @DR, Gathering

"Raising The Bar"
If you reach this post without any prior knowledge about Coding Dojos, please refer to this entry; then come back here.

Proposal

Short and sweet:
     To start a series of Coding Dojos here in DR.

Please note the word series, I'm not talking about a one time event. I'm taking of a recurrent event (or events) for us to practice our craft, to learn from others, to teach others, to have a playground where we can try new things or concepts. In summary, to Raise The Bar.

My proposal is to have a Coding Dojo event every two (2) month, the first weekend of the corresponding month; specifically on Saturday Morning. If this gathering gets enough attention, then we could start on Sat Oct 06, 2012. As the maximum expected duration for any coding dojo session is of about 3 hrs., my suggestion is to start at 9:30 am, that way if we reach the three hours limit we'll be ending by 12:30 p.m.

Types of Katas for each meeting

As RandoriKatas are more "fun" and collaborative than PreparedKatas, I propouse to have a cycle of 1 PreparedKata every 2 RandoriKatas: Randori - Randori - Prepared - Randori - Randori - ...; but this is just a suggestion.

What we need?

First and more important, we'll need people. Coding Dojo, and all Agile practices characterize for being a collaborative effort. So we need you to join and participate. If you are interested, add a comment to this post, or send me an email. If you are offering one or more of the necessary resources (see next paragraph), please indicate that too.

Second, we'll need resources: some PCs / laptops, a digital projector, a meeting room. Its very easy to find some, 2 or 3, decent computers; the projector is a similar effort, but the showstopper here is the meeting room. We need a room with enough space for 8 to 10 people, with an air conditioner or a good ventilation system. So anyone with the means to get one please add a comment with the details. Finally, a must for that place is to have an UPS or backup generator.

Why?

As the Manifesto for Software Craftsmanship states, Software Craftsmen (us), must come to value:

Not only working software,
     but also well-crafted software
    Not only responding to change,
         but also steadily adding value
      Not only individuals and interactions,
           but also a community of professionals

        Not only customer collaboration,
             but also productive partnerships

        But what is the meaning of each practice? Lets review each one...

        Well-crafted software

        • It is the same as Compact, Elegant and Clean Code
        • It requires the usage of Design Patters
        • It has Comprehensive Automated Tests

        Steadily adding value

        • We must achieve an Emergent Design
        • We must, continuously, Refactor our code
        • We must have a Comprehensive Automated Test suite, and more important we must Respect it

        A community of professionals

        • We must learn from each other
        • We must teach to each other
        • We must have respect and trust

        Productive partnerships

        • We and our clients must have trust, understanding and mutual goals
        • We must enhance the communication process with executable specifications

        So, this is a call for you to take the responsibility of your craftsmanship and start practicing all required skills.

        Monday, September 10, 2012

        What is Coding Dojo


        This is just a quick reference of what is a Coding Dojo; to go deeper please refer to this source.

        Definition

        A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there have fun and to engage in Deliberate Practice in order to improve their skills.

        Premises


        • Acquiring coding skills should be a continuous process

        Characteristics


        • Non-competitive, collaborative, fun environment
        • All skill levels are welcome
        • Safe to try new ideas

        Requirements


        • Meeting room with enough seats (typical attendance varies between 5 and 20 ?)
        • At least one PC or laptop
        • A digital projector ('beamer')

        Total event duration

        From 2hrs 30mins to 3hrs.

        Who started the movement? 

        Dave Thomas, here you have two valuable resources:


        Sunday, September 18, 2011

        Time Management for the Agile Practitioner

        I-Agile Time Management Implicit and Explicit Requirements
        Agile methodologies require for the team members to be highly organized and conscious respecting  their time management habits. It will be impossible to estimate things like velocity, story points and other metrics used on projections and estimations, if the team is not working at a regular peace.

        Agile explicit time management requirements
        Under this category we can put all formal ceremonies for the specific methodology used. Taking Scrum as example you have: the [Daily] Stand Up Meeting, Sprint Planning, Sprint Review (Retrospective), Scrum of Scrums among others. These formal activities require certain level of commitment from team members: punctuality and respect for others time. Although they are not easy to avoid or forget because of group's pressure; it can happens to you if you have one or more of this problems: laziness or poor organized/erratic in terms of your work rhythm.

        Agile implicit time management requirements
        There is always time, a big par of it, for you to work alone: coding, documenting, doing research and other activities that not require team or group work.

        Credits to dilbert.com
        So you are working alone, in front of your PC full of potentially distracting elements: YouTube, music, social networks, email (both personal and corporate), your work phone, your cellphone, among others; and still need to implement that interface, code a unit test, document some past work all before the next delivery. You start doing your job but find yourself switching between phone calls, incoming emails, twitts, mentions, photo tags, your favorite song and by the end of the day you feel like you waste the last 8 hours and produce almost nothing.

        In any Agile environment you need to respect all team work and also be very efficient and conscious about your time working alone.


        II-Traditional Time Management vs. Agile Needs
        Here I present you some examples of behavior commonly founded on IT personnel respect time management.

        Architects and the ivory tower
        Architects use to go “up” to their ivory tower and go down after talking to God with a bunch of specs, designs and diagrams. They work completely alone, leaving room for all kind of distractions; and also given the sense that they are like a black box. A box you only can ask and sit down to wait for the results  knowing noting about the time required for their job to complete.

        This practice carries out other problems. One is the lack of understanding about the process for the other members. Other is the lack of transparency one core requirement of Agile software development. also it encourages team division: "they" and "us". Also introduces a sense of elitism.


        Developers withing flow state 
        These guys also work as black boxes, but their mayor problem is that they think the only way to work is under the Flow State. So they need to have music, toys, tons of coffee, no interruptions, a game console and any other gadgets used to loose themselves into the flow.

        The problem with this method is that is not accurate, repeatable or time framed. Also it does not allow for team work.

        What is the Flow State?
        Yeah, if you are asking what is the flow, allow me to briefly describe it and point you to a good reference.
        “Flow is the mental state of operation in which a person in an activity is fully immersed in a feeling of energized focus, full involvement, and success in the process of the activity.
        ...
        One cannot force oneself to enter flow. It just happens. ..."  Flow (psychology) (Wikipedia)

        Endless re-factoring
        Credits to sourcemaking.com
        Developers often put themselves into a rat wheel when trying to deliver “the perfect solution”. After they just code and do some minor tests over the functionality, start re factoring because they got a divine message with a much better implementation in it. But remember Agile is time boxing.

        The root problem is that the clock is still ticking and eventually your leader is going to come by and ask you for the solution and, because of our friend Moore, in that particular moment you will be on the middle of a re-factoring with the code broken. And it gets even worse, because you were in “flow” doing your code-”test”-re-factor iterations you just forget to commit your changes.

        The same could happen to architects, when they get stuck reviewing their blue prints and after the death line they end with a very complex and partially defined solution. An architecture that if just could be built, will support millions of transactions and concurrent users, when the real need is just for a few hundreds. Did you get it?


        III-Time Management Techniques and Practices to Avoid Time Waste
        Be willing to change your bad habits
        Yes, I had placed this requirement at first because for the following tools to work you need to be disposed to take action. No manager, lead or boss will be chasing you if you do not use them. It is completely up to you. That said, lets begin...

        The pomodoro technique 
        • Type: individual and group 
        • Description: this technique allows you to be highly focused on a given task for a long period without felling tiered. Also it will arm you with the weapons needed to confront all kind of task from big  to small ones using a systematic approach.
        • Benefits: overcomes procrastination, be aware of time used on every task, manage and avoid interruptions, give a sense of control over your daily work and time. Know your real performance: pomodoros per day, week, month, etc. Finally you will be able to identify the mayor disruption sources and take action, just be aware that the first guilty could be yourself.


        Pair programming
        • Type: couples or very small groups.
        • Description: this practice consist on a pair, usually of developers, sitting together in front of a single computer to do their job in conjunction. To avoid boredom the couple must have two roles: a driver and an observer. The first is the one writing the code an the second is observing the big picture, making suggestions and corrections. Think of this as a real time spell checker, bug finder, compiler and judge all in a single bundle. It is vital that the members switch roles on  a regular basis to avoid both for getting exhausted.
        • Benefits: when doing pair programming the time needed to complete a task could be reduced to 50%, enforces the collective ownership of the code, bugs and defects rate decreases as result of the constant review. PP also increases knowledge transfer (to see your partner doing a shortcut you did not know about and will save your tons of typing in the future: priceless). Boots you when sick or tired because of the casual conversational style.
        • References: All I Really Need to Know about Pair Programming I Learned In Kindergarten (PDF), The Costs and Benefits of Pair Programming Programming (PDF), Pair programming (Wikipedia).


        Coding dojo
        Note: If you already know this technique please let me explain why I mixed it up with time management practices, where is not formally one. If you did not know it, just ignore the previous note.
        • Type: group 
        • Description: let me start with some examples to illustrate this tool.
          • Chess masters: The average master (rated 2257) had 7.0 years of serious practice.  The average expert (2174) had 1.03 years of serious practice.  It took an average of 11,000 hours to reach 2200. 
          • Sport master, musicians and other artists: these guys require, on average, ten year of serious practice to master their domain.

            Where can you dig more about it?
            Here are some very useful references about the deliberative practice and the impact of it on mastering a field:
            - Ericsson, K. A., Krampe, R. Th., & Tesch-Roemer, C. (1993). The role of deliberate practice in the acquisition of expert performance. Psychological Review, 100, 363-406. Summary by: David Zach Hambrick, 1998, gt8781a@prism.gatech.edu

            - What it takes to be great (CNNMoney).

            - Dr. K. Anders Ericsson (Wikipedia)

          So the key idea on Dr. Ericsson's work, and other researches, is deliberate practice, not just playing around or doing repetitive tasks. Deliberate practice, means practice a lot of time (of course); but also (and this is the important thing), to set goals, reach them, review your performance (retrospective), adjust your technique and after reaching your goals move the bar up with new ones.

          A good note here is this: practice (yes again); but in the sense that when you are practicing you are not doing the real thing. But remember is not playing, your are serious about it, the difference is that you are not doing the final job; just polishing out your tools.

          Let me use well know case of Tiger Woods, and to quote the CNN Money article,
          Tiger Woods is a textbook example of what the research shows. Because his father introduced him to golf at an extremely early age - 18 months - and encouraged him to practice intensively, Woods had racked up at least 15 years of practice by the time he became the youngest-ever winner of the U.S. Amateur Championship, at age 18. Also in line with the findings, he has never stopped trying to improve, devoting many hours a day to conditioning and practice, even remaking his swing twice because that's what it took to get even better.

          OK, now you could be arguing that your are “practicing” 8 hours a day at your workplace. But in other words, your are practicing by messing up with the real thing. Spending customers money and doing it bad with the real product!

          Will you let your children go out on a bike with no previous practice and supervision?
          Will you get into a commercial flight knowing that all crew members are interns?
          Will you feel comfortable with armed police officers around without target practice?

          So why we, IT people, want to manage that million dollar project without previous practice experience in team work?

          Getting back to the coding dojo, you probably already know what it is about. 
          “A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there have fun and to engage in DeliberatePractice in order to improve their skills.” (codingdojo.org). 
          In essence is a practice meeting to get proficient on any other agile technique. Doing it wrong but in a controlled environment. Is a mix of concepts borrowed from martial arts practice room (dojo) and the Dr. Ericsson's work (deliberate practice). I will not dig into the details of Coding Dojos, rather point you the core concept: practice all your tools (Katas) with certain regularity and discipline (deliberate practice).

        • Benefits: they are implicit on the illustrations and description but to repeat the mayor one: practice, fail and learn A LOT, in a controlled environment. Going back to our main subject, a coding dojo will help you manage better your time by letting you practice your skills knowing your limitations and reducing anxiety caused by lack of knowledge or practice.

        • References: codigdojo.org, How do you put on a coding dojo event? (Youtube), Coding Dojo (WPI, Computer Science department), The Cognitive Psychology of Chess (www.chess.com).

        Time box yourself and always do a retrospective
        • Type: individual
        • Description: this is a core Agile concept. If you really want to deliver some value to your customers always remember: a part of the solution is better than nothing, and better yet if is the most important one.  So whenever you start feeling out of time bring up your red flag, negotiate the scope but never the due date. No matter what customer argue at the end they will be happier with a partial solution than with nothing.

          And, what about retrospective?
          Retrospective is the way for you to improve your excellence revealing obstacles, disruptions, flaws on estimation and other problems; causing you to fall short. No matter what happens, always ask yourself: Why was that way? It could have been better? How? ...
        • Benefits: keep people focused on what's most important. Don't lose time to perfectionism (endless re-factoring),  overcome complex tasks. 

        IV-Conclusions

        Agile methodologies expect team's members to be very proficient with their time management skills but traditional software development practices, corporate culture and bad personal habits (like procrastination and perfectionism) are directly opposed to that goal.

        We need to be aware of that and use all techniques possible to increase our skill on time administration until they become natural, effectively changing our culture.

        Subscribe to our mailing list

        * indicates required
        Email Format