Alexandre Cuva

Monday, November 12, 2012

Agile Tour Vietnam - Ho Chi Minh 2012

Just return from the Agile Tour 2012 Vietnam Ho Chi Minh. It was a fantastic experience, I meet some awesome peoples from the audience and speakers.

The Start key note we had Ken Schwaber (One of the founder of Scrum, for who don't know him :)), in remote because unfortunately for us, Ken decided for 1 year to stay home and not take plane. I wish him all the best for his 1 year no travel.


Then the sessions started and I went to see a local speaker Duong Trong Tan (Academic Head, FPT University). And his presentation about Agile Education in Vietnam. It was an interesting topics, I wish we have such topics in Switzerland or Europe. I tink Jean-Pierre from the HES Sierre would be happy to listen on such topics. Tan presented what's happens in Vietnam this last month, and then presented what are the different options to improve Learning. Most of them where learning tools we already use in Agile (Coding Dojo, Agile Workshop, Serious Game...)

It was then my turn, I presented a Management 3.0 Introduction with the Vietnam culture in background (http://www.slideshare.net/GToronto/management-30-excellence-agile-hcmc). I explain in the working the actual environment, most people where not happy and we need to change, so we can improve performance and company with improvement in humans. I show them that Vietnamese peoples had a special power, they where self-organized people, when you see how people drive in the street. It is an example of Complex Adaptive System (CAD). Then I presented what should learn a Leader to be a great Manager with Agile teams, with example from Jurgen Appelo Management 3.0 training.
 
In the afternoon I facilitate a Coding Dojo C# and show to the audience, good practice about TDD, pair programming and tools like SpecFlow one of the best tools for BDD in .NET. This first session was quite hard. But with the help of my interpret (Duc Nguyen) we where able to get a few pair to work on the software. One of the greatest team was a pair of Java Developers who for the first time they tried C#.  I had different feedback from the session:

  • I don't like to write C# code with a Swiss-French keyboard
  • From this dojo, I learn one thing, I need to learn TDD now and not tomorrow.
  • ...
I propose next year I come with a French Keyboard, it will be a lot more funny than the Swiss keyboard. Who will die first, the keyboard or the pair ?

The second day I present my workshop Dice4Agile. A workshop where audience learn how to estimate sprint point, measure velocity, prepare a Release plan and then play the sprints, by preparing before each sprints their next 3 sprints content. It is a great opportunity for the teams to learn to self-organize and found solution their self.

I then went to see Kiro Harada (Lean and Toyota Production System Expert), he present a subject about eXtreme FD. It was quite interesting to see Agile with Electronic components. I feel completely useless in the training but amazing about the expertise from the audience.

And finally I had my last session, Energize People, I presented the Moving Motivator a game from the Management 3.0 training I give. The people like it a lot, it show how a Manager or any other person can learn the 10 Intrinsic desires from their employees, colleague or himself.

I used the same game with one of the volunteer who had a question about her future. In the second par I used a Team spirit game to elevate energy for all the participant. I think they never laugh so much in their working life.

We had a Open Session for the closing session, with Daniel Teng (First CSC of China)

I would like to thanks all the team from Agile Vietnam, the Vietnamese and other countries audience, all the sponsor for awesome Agile Tour 2012 we had in Ho Chi Minh (Saigon).

See you all at the Agile Tour 2013 Vietnam the 8th-9th nov 2013 

Monday, July 23, 2012

Causal Loop Diagram

What is the Causal Loop Diagram (CLD) ? I m actually working in my Management 3.0 training that I will give this autumn in Europe and maybe in North Africa. So I decided that while I prepare my training, I will give you some premise on my training contents.

Ohh by the way, I give my training in French, English and Italian :)

The wiki definition is :
"A causal loop diagram (CLD) is a causal diagram that aids in visualizing how interrelated variables affect one another. The diagram consists of a set of nodes representing the variables connected together. The relationships between these variables, represented by arrows, can be labelled as positive or negative."
It is a great tool, to understand how a system work. A simple positive example could be a banking account and the interest rate :


Now if we use the same model to understand how a project is working, we come out with a complex system where people and system work together to adapt to a changing environment, it is what we call a network of people who interact together for their own purpose and produce values that stakeholders consumes values


Jurgen Appelo in his blog present the Law of Requisite Variety calls also the Ashby’s Law :
“If a system is to be stable the number of states of its control mechanism must be greater than or equal to the number of states in the system being controlled.”
In other words, in order to survive a system must have an internal model that reflects the variety it encounters in the world outside.

I like this model, I think most manager should think more about that, before thinking project like a linear recipe where all the project should work. Software project are very complex and should be resolve with complex thinking.

It let me thinking about an example I had a few moths ago on a big European company. I was hired to train them to understand Agile, Scrum and how to work as a self-organized team.
I ask the manager, if there was some training for the management too ? They told me there was something call "Black Belt" and all the manager needed to keep project statics on how long it took to make each component. 
I laugh on my head, great they try to explain the teams how to work on a network of people and in the other hand they try to resolve complexity by linear formula. 
After a few month, they told me they where maybe interesting about my Management 3.0 training. Great they understand really fast. They are smart in this part of the world.

If you like to have more info, please go to Jurgen Appelo blog "It Takes Complexity to Handle Complexity", there is plenty of other intersting link about the subject.

Le cocombre Agile: Stoos Satellite Geneva 11/07 Debrief

Our first Stoos Satellite Geneva :

Le cocombre Agile: Stoos Satellite Geneva 11/07 Debrief: Enfin, notre première rencontre Stoos a eu lieu à Genève !  En voici un rapide debrief. Je ne souhaite pas relater ici dans les détails...

It is open to all, not only IT Manager, we are going to open a Meetup group soon. I let you know here when it is ready.

Tuesday, March 6, 2012

Agile-Geneva, NidAgile camp

Agile Genève | Un site du réseau Agile Swiss:

Hi All,
All the team from Agile-Geneva, is please to announce you today, we have found a date for our next XPDay Swiss meeting call @NidAgile. So please save 15th and 16th June for our next XPDay Swiss meeting. More will come soon.

Monday, February 20, 2012

Vaadin and Groovy Test 5

Moving from the test, the implementation and the re-factoring we get the following results
package ch.ge.vaadin

import org.junit.Test
import org.junit.Before
import org.junit.After
import com.vaadin.ui.Button
import static org.mockito.Mockito.*

class VaadinCalculatorTest {

    private VaadinCalculator calculator
    
    @Before void before() {
        calculator = new VaadinCalculator()
        calculator.init()
    }
    
    @After void after() {
        calculator.close()
    }
    
    @Test void shouldDisplay2IfIPressButton2() {
        def event = mock(Button.ClickEvent)
        def button = mock(Button)
        
        when(button.getCaption()).thenReturn("2")
        when(event.button).thenReturn(button)

        calculator.buttonClick(event)

        assert calculator.stored == 0.0
        assert calculator.current == 2.0
    }

    @Test void shouldDisplay2IfIPressButton2AndPlus() {
        def event = mock(Button.ClickEvent)
        def button = mock(Button)

        when(button.getCaption()).thenReturn("2")
        when(event.button).thenReturn(button)

        calculator.buttonClick(event)

        when(button.getCaption()).thenReturn("+")
        calculator.buttonClick(event)

        assert calculator.current == 0.0
        assert calculator.stored == 2.0

    }

    @Test void shouldDisplay4IfIPressButton2AndPlusAnd4() {
        def event = mock(Button.ClickEvent)
        def button = mock(Button)

        when(button.getCaption()).thenReturn("2")
        when(event.button).thenReturn(button)

        calculator.buttonClick(event)

        when(button.getCaption()).thenReturn("+")
        calculator.buttonClick(event)

        when(button.getCaption()).thenReturn("4")
        calculator.buttonClick(event)

        assert calculator.current == 4.0
        assert calculator.stored == 2.0

    }

    @Test void shouldDisplay6IfIPressButton2AndPlusAnd4AndEqual() {
        def event = mock(Button.ClickEvent)
        def button = mock(Button)

        when(button.getCaption()).thenReturn("2")
        when(event.button).thenReturn(button)

        calculator.buttonClick(event)

        when(button.getCaption()).thenReturn("+")
        calculator.buttonClick(event)

        when(button.getCaption()).thenReturn("4")
        calculator.buttonClick(event)

        when(button.getCaption()).thenReturn("=")
        calculator.buttonClick(event)

        assert calculator.current == 0.0
        assert calculator.stored == 6.0
    }

}

Wednesday, February 15, 2012

Groovy Spock and Maven 3.0

Here you can found a new version of HelloSpockPom for Maven 3.0. With Maven 3.0, you don't need anymore the Spock-maven plugin. And so you can use the last artifacts like bellow
<?xml version="1.0"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

 <modelVersion>4.0.0</modelVersion>
 <groupId>hello</groupId>
 <artifactId>spock</artifactId>
 <version>1.0</version>
 <packaging>jar</packaging>
 <name>Hello Spock</name>

 <build>
  <plugins>
   <plugin>
    <groupId>org.codehaus.gmaven</groupId>
    <artifactId>gmaven-plugin</artifactId>
    <version>1.3</version>
    <configuration>
     <providerSelection>1.8</providerSelection>
     <source/>
    </configuration>
    <executions>
     <execution>
      <goals>
       <goal>testCompile</goal>
       <goal>compile</goal>
      </goals>
     </execution>
    </executions>
    <dependencies>
     <dependency>
      <groupId>org.codehaus.gmaven.runtime</groupId>
      <artifactId>gmaven-runtime-1.8</artifactId>
      <version>1.4</version>
      <exclusions>
       <exclusion>
        <groupId>org.codehaus.groovy</groupId>
        <artifactId>groovy-all</artifactId>
       </exclusion>
      </exclusions>
     </dependency>
     <dependency>
      <groupId>org.codehaus.groovy</groupId>
      <artifactId>groovy-all</artifactId>
      <version>1.8.5</version>
     </dependency>
    </dependencies>
   </plugin>
  </plugins>
 </build>

 <dependencies>
  <dependency>
   <groupId>org.spockframework</groupId>
   <artifactId>spock-core</artifactId>
   <version>0.5-groovy-1.8</version>
   <scope>test</scope>
   <exclusions>
    <exclusion>
     <groupId>org.codehaus.groovy</groupId>
     <artifactId>groovy-all</artifactId>
    </exclusion>
   </exclusions>
  </dependency>
  <dependency>
   <groupId>org.codehaus.groovy</groupId>
   <artifactId>groovy-all</artifactId>
   <version>1.8.5</version>
  </dependency>
 </dependencies>
</project>

Monday, February 6, 2012

Vaadin and Groovy Test 4

TDD for Story 1
Now we have wrote the TA for the first Story, we can start on the TDD.
I create a class call VaadinCalculatorTest
package ch.ge.vaadin

import org.junit.Test
import org.junit.Before
import org.junit.After
import com.vaadin.ui.Button
import static org.mockito.Mockito.*

class VaadinCalculatorTest {

    private VaadinCalculator calculator
    
    @Before void before() {
        calculator = new VaadinCalculator()
        calculator.init()
    }
    
    @After void after() {
        calculator.close()
    }
    
    @Test void shouldDisplay2IfIPressButton2() {
        def event = mock(Button.ClickEvent)
        def button = mock(Button)
        
        when(button.getCaption()).thenReturn(VaadinCalculator.TWO)
        when(event.button).thenReturn(button)

        calculator.buttonClick(event)

        assert calculator.result == VaadinCalculator.TWO

    }

}

The first thing, we need to verify it's if press button "2", it's what we pressed. It's quite similar to our VaadinCalculatorSpec. If we run now, the compilation  work but the test fail. We need to implement the VaadinCalculator so the test run green.

Thursday, February 2, 2012

Vaadin and Groovy Test 3

CalculatorSpec.groovy
In Vaadin, an Application represents the sum of all the components organized in Windows, Layouts and having a theme applied. The central class representing an application is the com.vaadin.Application class.
His responsibilities include the following:

  • Managing windows
  • Callbacks during the lifecycle of the application
  • Setting themes
It is the main servlet of your application, where all the different screen will be call. The method init(), will start the application.

On our groovy class, we need first  launch the future application, lets call it the VaadinCalculator and add the two spock methods setup() and cleanup().

Vaadin and Groovy Test 2

Yesterday we created our first Vaadin application with Maven. Today as a true Agile Developer we will try to work with Vaadin with our testing tools.

Work on Acceptance Test
We will work on a simple calculator, with 9 buttons for the digits, 4 buttons for the operator (/, *, -, +) and an enter button, to display the result.
The first stories would be :

  • As a User, when I push the button 2, +, 4, I expect have a result of 6
  • As a User, I expect to see a classic calculator with the numbers in a grid of 3 x 3

Wednesday, February 1, 2012

Vaadin and Groovy Test


I had the chance to see a presentation of Vaadin with Nicolas Fränkel, who also write an interesting book "Learning Vaadin". Vaadin is a new Java web framework for making applications look great and perform well, making your users happy. He promises to make your user interfaces attractive and usable while easing your development effort and boosting your productivity.
Vaadin change the way you write web application by thinking application and events process. That's a great news, write a Swing application or a web application will be the same. No more changing the way to write you app. So I grab a book edition and run on my computer to try Vaddin.


Creating a Maven Project
Before starting our Vaadin project you need to create a Maven project with the Vaadin Maven archetype as explain on Using Vaadin with Maven

mvn archetype:generate
-DarchetypeGroupId=com.vaadin
-DarchetypeArtifactId=vaadin-archetype-clean
-DarchetypeVersion=LATEST
-DgroupId=your.company 
-DartifactId=project-name
-Dversion=1.0
-Dpackaging=war

Running the Application
Your project should be ready now and you can launch a testing application with mvn jetty:run and then open your browser under http://localhost:8080/.

The pom has everything ready to work on your Vaadin application.