aot 2010Monthly :

Lean Startup: Interesting conference by Eric Ries

There will be an interesting conference on Lean Startup by Eric Ries at SXSW. Eric asks 5 questions everyone involved in building new products (or any market offerings) should ask frequently. Answering these questions is not as easy or obvious as it sounds. It’s even more important for mobile development as product lifecycles are very short and spending too much effort on a bad or average product might have high impacts (opportunity loss). I’ll reuse these questions in coming blogs and apply them specifically to the mobile market. To read these questions and vote for Eric panel, visits http://panelpicker.sxsw.com/ideas/view/8270

Agile 2010 Conference – Day 1

I went to my first Agile Conference!  I guess I’m always a bit uneasy when I’m surrounded by people who more or less think the same way I do. On the other hand, it feels great! It’s a stark contrast from what I’m used to – you know, being surrounded by Architects, DBAs, PMOs and project managers who a waiting in the wings to save the day when this “Scrum thing” fails.

So for five days, I dove in the pleasant warmth of my fellow agilists and shared ideas, laughs and a few drinks.  Attending the wide variety of sessions was my preferred activity and a great opportunity to listen, participate and learn.

Enough chit chat, let’s get right into it…

My first session was “Leader’s Workshop: Making Change Happen and Making it Stick” with Mary Poppendieck.  I won’t go into details so here are a few points…

Mary states that to encourage change, one needs to provide:

1-      The proper kind of motivation

2-       A clear direction

3-      A supportive environment

So what motivates people?

Mary references books such as Switch, Drive and that great video by RSAnimate

 

A very interesting point is to manage employees as if they were volunteers.  With money being out of the equation, what needs to put in place and maintained to keep motivation at a high level?  What  keeps a volunteer motivated?

  1. A  clear purpose
  2. Structure and guidance
  3. Successful project
  4. Ownership
  5. Autonomy
  6. Bragging rights
  7. Mastery
  8. Constructive dissonance

What I take back from this session

You can throw all the cash you want at your problems and they still won’t go away.  If you want successful projects, hire smart people, offer them a clear direction, a few rules, and get out of their way.  Smart people will find a way to make it work.

Share/Bookmark

Java, Python And Ruby : The Battle For Collection Simplicity

Following my colleague Mathieu’s excellent post “Dear Java Please Let Me Work” I’ve decided to write a small comparative between Java’s implementation of the different collection types compared to Python’s and Ruby’s. In this comparative study, I will take a slightly naive approach and put myself in the shoes of a newbie trying to learn all three languages.

First let’s look at the UML diagram of Java’s collection hierarchy to try and find out what we need to get started.

Ok. Where to start. Alright, I’ll try declaring a simple array to hold my planning poker fibonacci numbers in Java:

int[] fibonacci = { 0, 1, 3, 5, 8, 13, 21, 34 };

ArrayList<integer> fibonacci = new ArrayList<integer>();
fibonacci.add( new Integer(0) );

Vector<integer> fibonacci = new Vector<integer>();
fibonacci.add(new Integer(0));

Stack fibonacci=new Stack();
fibonacci.push(new Integer(10));

List fibonacci = new LinkedList();
fibonacci.add(new Integer(i));

Wow. Sure had a lot of choices. So many ways to do the same thing. That would be quite confusing for a newbie.

Alright let’s give Java’s dictionaries a chance.

Hashtable fibonacci = new Hashtable();
fibonacci.put( "zero", new Integer(0) );

HashMap fibonacci = new HashMap();
fibonacci.put( “One”, new Integer(1) );

enum Fibonacci{Zero, One, Two}

EnumMap<fibonnacci, integer=0> fibonacci = new EnumMap<fibonnacci, integer=0>(Fibonnacci.class);
sizeMap.put(Fibonacci.Zero,new Integer(0));

Map<string, integer=0> fibonacci = new WeakHashMap<string, integer=0>();
map.put(new String(“Zero”), new Integer(0));

Still so many choices. Still seems too complicated for my liking.

That made me wonder though, how many people actually use the WeakHashMap ? I mean seriously, who would go in a design meeting and say “Hey guys, I think we should use the weak hash map over the regular hashmap this time.” Doesn’t sound quite right does it ?

Alright, let’s see how this would look in Python.

fibonacci = [1,2,3,5,8,13,21,32]

Oh. Only one way to declare things ? Yeah there’s only one way to declare arrays, lists, stacks and queues in python. Simple as that. YOU decide how you use it. Makes sense right ?

How bout dictionaries ?

fibonacci = {"zero":0, "one":1}

Only one way too. How sweet.

Got some free time and want to try out tuples? Python actually supports tuples right out of the box. Many other language do not…

fibonacci = (("zero",0),("one",1))

Ok that went by too fast. How about some Ruby then ?

To declare an array, you can do it in either fashions :

fibonacci = Array.new([0, 1, 3, 5, 8, 13, 21, 34 ])
fibonacci = [0, 1, 3, 5, 8, 13, 21, 34 ]

Nice, simple and concise. I like that.

Now let’s move to hashes shall we ?

fibonacci =Hash["zero"=>0, "one"=>1]
fibonacci = {"zero"=>0, "one"=>1}

That was easy.

All this double teaming kinda makes me feel sorry for Java.

Nicholas Lemay

Total cost of Ownership

Scrum est un outil de visibilité. On ne le dira jamais assez. Et sans doute faut-il trouver des formulations alternatives pour pouvoir être compris par des gens différents, avec des cultures et des expériences qui modifient la façon dont ils interprètent cette phrase. Et parfois, un dessin suffit, un graphique suffit.

Aujourd’hui j’ai passé une bonne heure avec un gestionnaire de projet traditionnel qui souhaitait savoir comment faire un suivi budgétaire “avec Scrum”, selon sa formulation. Nous nous concentrons donc sur cette idée de “suivi budgétaire”. Une chance pour moi, il est très ouvert et me dit simplement “comment fais-tu toi ?”. Magnifique non ?

Simple : la clef dans son cas c’est la définition de Done. En effet, nous plaçons un curseur dans la définition de Done. Ce curseur sépare ce que livre l’équipe à chaque itération et le reste des activités qu’il faudra faire pour avoir un Working Software, soit un logiciel en production utilisé par quelqu’un.

D’un seul coup, la définition de Done devient un outil concret pour lui. Voici ci-dessous une version simplifiée de ce à quoi nous sommes arrivés. Il lui apparaît très naturellement que les activités concrètes de mise en production sont liées au Done et que le voir exprimé ainsi lui fait réaliser tous les éléments que l’ensemble de l’équipe avait jusque là oublié.

Combinés aux Release burndown chart et au Value burnup chart, ce budget plan complète la vision 360° qu’il a du nouveau jeu dans lequel il joue.

Selon les prévisions que vous ferrez, vous pourrez utilisez ces graphiques pour amener une discussion autour de la vision partagée que vous avez des prochaines itérations. Par exemple aujourd’hui, les graphiques étaient sensiblement semblables à ceux-ci et la réflexion principale de mon interlocuteur a été de dire que le budget serait consommé avant que la courbe de valeur ait commencée à s’infléchir, ce qui lui a donné envie de trouver plus de budget.

Attention néanmoins à ce que l’on fait dire aux chiffres. Même dans ce cas d’un petit nombre d’itération, la courbe de valeur qui ne décroit pas pourrait nous mettre la puce à l’oreille et nous parler de la piètre qualité des estimations de valeur. Il se pourrait que l’on ait affaire à des priorités et non à des estimations relatives de valeur ajoutée. Mais ceci est une autre histoire ;)

Pyxis prépare ses 10 ANS… bientôt sur vos écrans

Pour fêter notre 10ème anniversaire, nous préparons des capsules pour parler d’Agile et … de nous. Le scénario a été écrit par Alexandre Champagne (créateur, entre autres, de contratdegars.com) et la réalisatrice est Catherine Therrien. Les acteurs : des pyxissiens que vous connaissez peut-être déjà. Les bureaux sont en effervescence, les acteurs se préparent et s’entrainent. Suivez photos et infos sur le tournage sur notre page facebook. Les capsules seront dévoilées fin septembre.

Lean Startup : Early lessons from the market

Our knowledge acquisition strategy for ACS Cloudphone is starting to pay off. After only 3 days of MusyMix on the market, we already gathered good information about ACS: No one has installed the ACS CloudPhone after installing MusyMix. Most probably, the relationship between the advanced transcoding feature and the ACS CloudPhone has not been correctly identified. The result, users get invalid format errors and MusyMix is less useful to them.
A solution would be to display a dialog box upon MusyMix start to ask the user to install CloudPhone. But then, they would have to create an ACS account before using MusyMix, which is a lot of overhead before being able to fully use the app.
In addition to this, ACS isn’t stable enough yet. While it’s working relatively well, we haven’t made any scalability tests and the full-duplex communication channel between the phone and the cloud is very tributary of the quality of the network connection. We have improved, but that’s still more complex than perform a simple HTTP request when the user need something. Continuing on this path, we slow down all dependent applications, which isn’t a good move.
To add to this, ACS is a very horizontal product, a platform. With our lean strategy, we aims to deliver frequent releases, but for a platform, that’s very challenging. We did well up to now, but we think that by focusing on putting specialized cloud products, based on the platform, on the market, we will generate more revenues and gather more meaningful feedback.
After having announced the transcoding feature, we got a lot of positive feedback from the Android community. So focusing on building a strong and autonomous transcoding offer on ACS would serve MusyMix and would help ACS get traction on the market. So our next ACS move is to create the ACS Media API, a cloud transcoding offer usable from your Android phone (or other media). This service will be part of the ACS platform, but will be marketed separately (specific landing page, adword campaign, etc.) We will develop this service separately but use the same account and payment data than the ACS platform. Instead of providing a different application to access ACS, we will add a few activities through our client library to configure the ACS Media API. This is a marketing repackaging of the same implementation we did in ACS. This will be quickly assembled and integrated to MusyMix and than, the product itself (in BETA) will be launched early next week. This week should be very active for MusyMix. We’ll continue to gather feedback, hopefully reach 500 users and learn more usage patterns. We need to get this transcoding feature solved quickly to keep our user base happy.

Agile in a Command-and-Control Organization : What to do when upper management forces overtime?

Image by MyLifeStoryMy colleague François Perron launched a very interesting discussion on our private wiki – “As a coach, what to do when executives and upper management force the project team to do over time in order to meet deadlines?”.

As you can probably guess, this initiated very interesting discussions and an obvious reaction to such an approach.

Everyone agreed that due to the project visibility and the position of the organization within its market, the project launch date was critical. Everyone also understood that the organization had very few options so nobody debated the need to achieve results. The discussion was strictly around which measures to use in an Agile context.

I’ll admit up front that I am biased toward intrinsic motivation (I really loved Drive by Dan Pink) and the fact that it is well suited for an agile environment.

As such, my first impression to the conversation that was going on were:

  • Does the organization wish that employees spend more hours at the office (attendance) or would they prefer more engagement (commitment)?
  • If their choice is to increase the hours of attendance, imposing overtime will achieve this goal while giving them a false sense of increased performance. People will show they are working longer hours but the real throughput is unlikely to be much higher. In addition, software development is a brain intensive activity and reducing the amount of rest people get is likely to increase the number of mistakes they make.
  • On the contrary, if the organization wanted more involvement, the inclusion of team members in determining the best way to achieve the results would probably come to a better decision – even possibly leading the willingness to do over time

It appears to me that by forcing overtime, the executives and senior managers will probably collect their bonus and congratulate each others in the short term only to realize in the longer term that they have simply pushed the problem forward for others to deal with – and possibly request more over time in the long run.

Share

You might be interested in these related posts:

  1. I don’t feel so good – I’m a people manager in an Agile organization
  2. Does your organization support prostitution?
  3. Defining Agile Management – part 1

Dear Java, Please Let Me Work

I had to read the content of a file for a ruby project. This is how I did it:

def read_file_content(filename)
  File.read(filename)
end

Simple enough, right?

Then for some reason I thought about how I would have to the same in Java:

public String readFileContent(String filename) {
  try {
    BufferedReader reader = new BufferedReader(new FileReader(filename));
    StringBuilder buffer = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null) {
      buffer.append(line);
    }
    return buffer.toString();
  } catch (IOException e) {
    return "";
  }
}

Need I really explain why I prefer Ruby these days? Even if you remove the try/catch clause and rethrow the exception, that’s still a lot of code compared to a single line of ruby. I am also aware that it is possible to write the same Java code in a single line using Apache’s commons-io (IOUtils.toString(InputStream) – but still, why are the base Java libraries so verbose for file manipulation?

I still like Java, but I’m impress by the compactness of Ruby. It just works as it should. Sometimes working in Java it seems I’m just smashing the keyboard instead of getting actual work done.

Lean Startup Applied to ACS

For this posts series, I will talk about our strategy for Android Cloud Services, our mobile-cloud platform that seamlessly extends any Android phones running version 2.1 or more. ACS is a complex platform and is more of a horizontal capacity than a specific product solving a specific problem. This is a product, we aim at selling cloud resources through a micro-transaction model, but for now, the platform is not ready to be opened to the world wild web and not rich and stable enough to cover all potential uses. This is a future product that we have to mature in the coming months for it to emerge as a solid revenues stream for next year.
But more than just maturing, we want to apply lean startup principles to discover what’s the real killing feature of this platform. We have ideas, we think we know what will work and what won’t, but thinking is not enough. We want to quickly test our hypotheses in the market and get any feedback we can from early adopters. If we can’t open the platform to fellow developers out there, our only choice to get the necessary feedback is to build our own applications on the platform and gather indirect feedback on how it’s used.
We already have four Android applications built on the ACS platform, only one being available on the market: CloudPhone. We know for sure that CloudPhone won’t be a popular application today: it doesn’t do anything useful! It’s just a router to the ACS cloud, abstracting all ACS protocols to other client applications. We decided to launch a minimal version of CloudPhone to the market, to ensure that when we develop another client application, it’s easy to find and install. It’s a mandatory dependency for any ACS compatible application. The other three applications are open-source and simple prototypes accessing various cloud features.
This week, we will launch a first version of MusyMix, a simple music streaming player built on ACS and using 8tracks.com as music library. This is a minimum viable product that focus on getting 8tracks members with Android phones to listen to music mixes anywhere. So our target market is basically 8tracks.com 100K visitors per month who own an Android phone. We think we can easily reach 5000 persons, assuming that a few Android users will try it without an 8tracks account (not required). For ACS, we want to validate that people understand and are willing to install the ACS CloudPhone. This will give us quality data to improve our next move. We’ve integrated Flurry Analytics in both applications to ensure we get the right information, quickly.
The key point is that MusyMix may be used without ACS. This is important because we want people to understand why they need ACS and what problem it solves. Actually, this is an Android platform problem where the native media player is unable to stream M4A (iTunes) content. Using ACS, we perform the audio transcoding on the cloud, in real time, before returning the audio stream to the media player. Without ACS, you get plenty of errors, mostly because 8tracks.com content is built by the community from their local iTunes library (not normalized).
So we go to the market, quickly (less than 2 weeks) to learn what features is missing from MusyMix, which in turn will provide us insights on our evolving cloud platform. This will shed some light on our ACS target market and help us guide our next moves, without wasting too much time developing features we think will be marketable.

The world would be a better place without accountants

Image by Venn DiagramIt dawned on me recently that organizations are lead and managed by accountants. Accountants come in many shapes and forms and not every accountant wears brown socks.

I suspect you will disagree with my statement arguing that your CEO isn’t a former accountant or that your CTO didn’t even take a single accounting class in his life and I would agree with you. Not all accountants carry a pocket size calculator.

I personally don’t have many complaints about accounting itself, after all there is value in knowing how much money enters your coffers and how much you had to spend to generate the associated revenue. That makes perfect sense to me. Where I have a problem is when common sense leaves the building to make place for accountant-based logic and the need to book everything against the right account and the use of money within certain time intervals.

Confused? Let me explain.

Let’s take project management [Ah, now you are starting to see a link between accountants and Agile projects]. In many of the organizations I had the pleasure to work with, compliance to project plans was more important than delivering real value to customers. Nobody asked if it made sense to add new features or change the sequence of activities in an attempt to deliver business value to customers faster. People are concerned with compliance to the plan. And where does this need for compliance come from you ask? Accountants.

Before the debit-credit masters come running after me with their red pen, I will confess I used to be one of them (sorry!). I understand the mindset, their perspective of the world and most of all, the need to put things in neatly defined categories – some can be amortized while others can’t – but I digress.

The project timelines are derived from the accounting cycles – the money is allocated for a certain budgeting period instead of true market needs. The phasing and allocation of the resources is driven by the departmental allocated budgets. The profile of the resources assigned to a project is driven by who has the money as opposed to who has the skill set.

Does any of this make sense in a context of business excellence? That’s one of the reasons why I like Scrum with its focus on delivering the highest business value sooner. Scrum isn’t perfect, I know but it forces people to make decision based on business value, not accounting rules.

Scrum is also great a giving visibility the what is really going on within a project as opposed to estimated project completion for cost computation. In heuristic tasks such as software development is it really critical to know that task ABC costed $357? Chances are, you are unlikely to do anything useful with that information. Why wouldn’t you rather determine the cost of an iteration (or a sprint) so you can compare it to the business value delivered. As I stated earlier, there is value in accounting but when everybody starts to behave like an accountant, it is a sure sign that common sense is gone and that the organization is ripe for an Agile makeover.

Share/Bookmark

You might be interested in these related posts:

  1. You are not doing SCRUM if you don’t have a ScrumMaster
  2. Are we coaches or do we offer coaching?
  3. Top People in the Agile Business Intelligence and Agile Data Warehousing World