PDF for my talk "Agile Development in Panama"
Yesterday I gave a talk about Agile Development in Panama at the Atlanta JUG. I have to thank again Gunnar Hillert for inviting me and all the JUG members for their attendence and good questions.
This talk was a bit different than what you might expect at a Java Users Group meeting, as it wasn't the typical technical talk. My goal was to provide a realistic image of the situation for software developers in Panama, which is a small Latin American nation of only 3 million people. A significant share of those 3 million is comprised of the members of four quite distinct indigenous tribes who live in autonomous regions on small islands or deep in the tropical rainforest. About 800,000 Panamians - it might be more - live the in very modern capital and the rest is scattered over several provinces where agriculture is the dominating business.
For software development it doesn't need thousands or person. A few good ones make all the difference. So I'm particularly pleased that I had to opportunity to showcase the Panama JUG which is comprised of students of the Universidad Tecnologica and led by their teacher Aristides Villareal. The Panama JUG, together with other individuals elsewhere in the Spanish speaking world, is responsible for the translation of Sun's Netbeans IDE into Spanish.
In two weeks we will have a big event in Chitre, the capital of the Herrera province. Please see my earlier post for more details.
The PDF of yesterdays's talk is available for download. The file is 20 MB, as I had to print each stage of the slides.
On pair programming
Earlier today I cited from another blog and remarked that craming the team in a small space to me seems to be too distracting. Here is another comment on the same topic:
Vladimir Levin in Pair Programming Redux:
My conclusion is that pair programming does work, but it requires some care. First, developers have to respect each other and be willing to compromise. Also, pair programming 100% of the time doesn't work. Sometimes when facing a design problem it helps to go off and work separately, then get back together and discuss later. Also, pair programming - constantly communicating, asking questions, explaining and justifying one's own ideas throughout the day - is very demanding. After a period of time, burnout can occur. When that happens, I think it's a good idea for people to be able to work on something alone for a while.
Cram the team into a small space or let them think
Have a look at the these two pictures of a team room. They appear on Ken H. Judy's blog in a post called Our Team Room:
Do you think you could work in such a small and crowded place? I'm sure I would not be able to concentrate. I know this is what XP is meant to look like, but I seriously doubt that this setting will create better quality software than a quite work environment where people can focus. To me this is more a room for training sessions than the place where you work for months on a product.
Instead I prefer and recommend private offices - with a door you can close - for each developer or a larger room for a small group of people who go well together and don't distract themselves by talking to much. After all software development requires that you process a lot of complex information in your head and the last thing you are looking for is distraction.
Savila's issue list allows the team to focus on the current sprint's stories:

And if you happen to use Eclipse, you can use Mylyn to even focus more on just the classes that are related to the task you are working on:

On the other hand such a "war room", as some call it, might be well suited, if the task for a team is to fix a problem, some kind of an emergency. Then such a setting makes a lot of sense. Is software development about fixing something or is it about creating something? What's the difference between the development of a product and integrating something into an existing system? I believe that when you create a new product, you should take your time and not do it in a hurry. New product development is more an exploration of a certain space, a journey and you don't know where you will end up or you might even realize after some time that you better cancel the project, because you learned something about another solution on the way. That's way different from integrating two systems or adding some smaller additional functionality to an existing system..
So I think that when we talk about work environment, Agile, Scrum and XP, we should as well define clearly what kind of work we are talking about and where we want to apply certain methodologies and techniques.
Why do so many technology projects fail?
This morning I came across a post on a British blog about software architecture. They cite an article from the Finacial Times, which talks about a failed project between a British broadcasting station and EDS. The following is a citation from the blog post:
The Pragmatic Architect in Why do so many technology projects fail?:
Iterative and agile techniques have revolutionized the way that software development is performed, but our industry needs to take a step back and look at the way in which software projects are engaged. Why, when you read about so many high profile big budget software failures, do businesses still initiate software projects with "we want this, tell me how much it will cost"? *We* know that they'll change their mind. *They* know that they'll change their mind. So let's change the engagement model, stop hiding behind fixed price contracts and work *together* to solve problems.
So what is needed to make people understand that they are better off not dreaming up project plans and create contracts based on them? Or is Brian Marick right when he says (video) that we as software developers should forget about the naysayers and stop trying to convince them? Probably it's not so wrong to just do good work and let time tell the story instead of seeking to revolutionize the world. Those who do not believe that agile practices - done right and with experienced developers on board - help to create better quality software will get their chance to compare.
Ohio for a few days
After speaking in Tampa and Miami at the beginning of this week I flew to Columbus, Ohio, yesterday night to visit my good friend Brian Sam-Bodden of Integrallis. What a difference between warm and sunny Florida ;-) As you can tell by the picture, snapped this morning, winter is coming and the temperature has already dropped quite a bit. While in Miami and Tampa it was about 27ºC/80ºC here in Ohio it's only 4ºC/40ºF, which to me is not chilly but actually quite cold.
That temperature thing is particularly funny, as I, being German, should be used to low temperatures and show. Apparently the human adapts quite good to different climates. Now that I live in warmer places, such as Florida, the Dominican Republic and now Panama, my body has adapted to heat and I need to put on more warm clothes than I used to in the past. Quite funny this experience ;-)
An Agile Development Organization in Miami, Florida
On Tuesday, 20th of November 2007, the Miami Java Users Group gave me the opportunity to speak about Agile and our project management tool Savila. Unlike the day before in Tampa I was the third speaker in a row and we had to timebox our presentations a bit. So this presentation is a bit shorter than the one I delivered in Tampa. Here is the presentation as PDF for download.
The audience was of similar size, about 35 persons, and although we had to finish more or less on time we had some lively discussions about TDD and agile estimation techniques.
Many thanks to all of you in Miami.
An Agile Development Organization in Tampa, Florida
On Monday, 19th of November 2007, I had the opportunity to speak to about 35 members of the Tampa Java Users Group. As promised to the members of the Tampa JUG, I'm offering here the presentation as PDF for download.
Many thanks to all of you for the warm welcome and the interesting dialog we had during and after the presentation. I really enjoyed being with you to talk about Agile and our tool Savila.
Announcement: I'm going to speak about Agile and Savila
This is a first for me. Starting next week I'm going to speak about how to set up an agile development organization and will demo our agile project management tool Savila.
The first presentation will be in Tampa, Florida, on November 19th. Here is the announcement of the Tampa JUG with more details about the venue. Thanks to Vladimir Vivian for the invitation.
On November 20th I will be in Miami to participate as a speaker at the Miami JUG. See the JUG's event page for details. I'd like to thank Fermin Ordaz for the opportunity to speak.
A few days later I'll be in Atlanta giving another talk about Agile and Savila, but this time with focus on Java in Latin America. My thanks to the members of the Atlanta JUG and Gunnar Hillert for their interest in learning about software development in Latin America.
For those of you who may have stumbled upon this post without knowing much about my background some explanation: some time ago I left my home country Germany for personal reasons and happened to settled down in the Republic of Panama after trying out a few other places. Here in Panama I founded a company called Caimito and am training young Panamanians fresh out of University the skills to become rock star software developers. We develop an agile project management tool called Savila. Due to this I can tell a bit about software development in this part of the world. And I can say: it's been quite good so far.
Coverage != testing
This morning I stumpled upon this:
Alex Miller in Coverage != testing:
Testing verifies your code, coverage verifies your testing, but you can’t say that coverage tests your code.
That's just so true. It's a good idea to start a new class with a unit test where you can model it and show how to use it. After all the test is where you first use the new code. And a unit test makes great documentation as well. It's likely that you will gain 100% coverage from the unit test. But you have not really tested yet. The missing piece is the integration with other parts of your system.
In my opinion it's a good idea to have a team member wearing the QA hat. That's the person who should be vigilantly checking whether there are enough integration tests that really take on edge cases and correctly simulate user behavior or other forms of input.
Update to Leopard
My own update to Leopard (Mac OS X 10.5) has been almost smooth so far. On an end-user machine, a Mac Mini at home, it was without any difficulties. Just slide in the DVD and wait for some time. I'm not sure how long it took, as I left it alone, but it might have taken an hour.
On my MacBook Pro I found VPNTracker 4.9 not to work with Leopard. That's a fact that is as well advertised on the vendors homepage. They are working on a new version 5 to be compatible with Leopard. In order to get my IPSEC VPN to work I looked around and found the free IPSecuritas, which even gets me a menu bar icon to start and stop the VPN. So I switched.
The Letterbox plugin for Apple Mail and Mail Act-on have been disabled. For Mail Act-On there is an update available.
Is Java 6 really ready?
Ok... Now it's getting ugly with the Java 6 VM on Ubuntu Linux:
java.lang.OutOfMemoryError: PermGen space # # An unexpected error has been detected by Java Runtime Environment: # # SIGSEGV (0xb) at pc=0xb48d24d3, pid=4758, tid=3075954368 # # Java VM: Java HotSpot(TM) Client VM (1.6.0_03-b05 mixed mode, sharing) # Problematic frame: # C [libswt-pi-gtk-3346.so+0x2e4d3] Java_org_eclipse_swt_internal_gtk_OS_GTK_1ACCEL_1LABEL_1GET_1ACCEL_1STRING+0x6 # # An error report file with more information is saved as hs_err_pid4758.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # Aborted (core dumped)
Java and Mac OS X: it's all about priorities
To most users Mac OS X is a desktop operating system. It has Unix under the hood, but the most important part that distinguishes Darwin (the FreeBSD variant) from Mac OS X is the user interface and the applications one can build by using libraries such as Cocoa and others.
Now apparently Apple has done a number of improvements for the Java 5 VM and JDK libraries to allow Java developers to write equally compelling desktop applications in their language of choice. That makes sense and is a good thing.
Server side Java developers and people interested in the bleeding edge can always use tools like Parallels or VMware Fusion to run another operating system (Windows, Linux or Solaris) to get access to the latest Java VM whether it is experimental or short after Sun releases a first production version. So it's not a matter of whether Java gets abandoned by Apple or not. It's simply a matter of where the priorities are. To a desktop application developer it's more important that his applications can be run on a solid and well equipped environment. Apparently Mac OS X Leopard (10.5) is such an environment. I've always been happy with its predecessor Tiger (10.4) and I don't feel a big urge to use the Java 6 VM. For a current server side project I need to use Java 6 and I do that with Ubuntu Linux running on VMware Fusion. There I have the Sun Java 6 VM. It's a huge difference and I would love to keep working on OS X as I don't have to restart Eclipse so frequently.

