Distributed Scrum: lessons learnt

A presentation about the lessons learnt while doing distributed Scrum. As we have done distributed Scrum in my previous company, this really interests me. Distributed Scrum has some pitfalls, depending on how you organize your projects and teams.

 

Personalities and culture matter, hands-on management is as important as ever and agility concepts can be applied to an organization besides projects. Presentation by Cristiano Sadun (TietoEnator) at Smidig 2008.

Powerpoint slides

Via Distributed SCRUM as a Supplier – one year after | Software Development Videos.

76 Events: statistics about Hibernate 3.2.2

Hibernate 3.2.2 statistics class cloudFrameworks are growing with every release. Classes are changed, removed and added. In this series I zoom in on some well known projects and analyze their class names with completely meaningless statistics. This is the analysis of Hibernate 3.2.2.

To get these statistics, I wrote a script that analyzed all classes. They get chopped up on word boundaries, so for ContextAwareFactoryBean the words Context, Aware, Factory and Bean are counted. From the output I generated a Class Cloud.

What is Hibernate?

Hibernate is a free, open source Java package that makes it easy to work with relational databases. Hibernate makes it seem as if your database contains plain Java objects like you use every day, without having to worry about how to get them out of (or back into) mysterious database tables.

Hibernate listens very carefully

What immediately catched my eye was the amount of classes with Event (76) or Listener (52) in their name. There are many events in Hibernate which can be catched. These events can have some related classes, like:

  • the event itself (for example the AutoFlushEvent)
  • an interface (the AutoFlushEventListener)
  • a default implementation (the DefaultAutoFlushEventListener)

It almost surprised me there was no AbstractAutoFlushEventListener or a AbstractAutoFlushEventListenerFactory!

Factories

There are 57 factories, which is quite a lot outside of an industrial park. A lot of stuff can be created using factories, for example the BasicProxyFactory, the CGLIBProxyFactory, the CacheFactory, the ClassicQueryTranslatorFactory and the MapProxyFactory. I would guess this is the most popular design pattern within the Java world. Factories are everywhere.

Types and Collections

Luckily, there is also a lot of stuff directly related to the goal of Hibernate. There are 85 classes with Type in their name, and 54 have something to do with a Collection.

There are basic types like the FloatType and IntegerType. Advanced types like the OrderedMapType and the OrderedSetType. PersistentCollection and BasicCollectionLoader. These class names look quite good!

Class Cloud (click to enlarge)

Hibernate 3.2.2 statistics Class Cloud

Top 10 of partial class names

  • Type: 85
  • Event: 76
  • Factory: 57
  • Collection: 54
  • Cache: 53
  • Exception: 53
  • Query: 53
  • Listener: 52
  • Entity: 47
  • SQL: 39

Longest class name

The longest class name of Hibernate is the CollectionFilterKeyParameterSpecification, with 41 characters!

The API documentation describes this class:

A specialized ParameterSpecification impl for dealing with a collection-key as part of a collection filter compilation.

I thought API documentation was meant to clarify? At least the above contains some pointers (like the ParameterSpecification).
Stay tuned for more useless statistics for other well known projects! If you have suggestions for which projects you want to see, please let me know in the comments!

37 Factories: statistics about Tomcat 6

Tomcat 6 statistics class cloudFrameworks are growing with every release. Classes are changed, removed and added. In this series I zoom in on some well known projects and analyze their class names with completely meaningless statistics. This is the analysis of Tomcat 6.

To get these statistics, I wrote a script that analyzed all classes. They get chopped up on word boundaries, so for ContextAwareFactoryBean the words Context, Aware, Factory and Bean are counted. From the output I generated a Class Cloud.

Tomcat is definitely Context-aware

Tomcat consists of 956 classes. Of those, 55 classes contain the word Context, a percentage of 5.75%. Remember that every live object has its own ‘context’, and the word instantly loses a lot of meaning. The API documentation gives some clearance about the subject:

Context is a Container that represents a servlet context, and therefore an individual web application, in the Catalina servlet engine.

Factories? Sure!

Every self-respecting framework has factories. It nicely keeps the newcomers out and makes it ‘easier’ for the experts. Well, Tomcat has 37 of them. Just like Spring, Tomcat has a BeanFactory. The API documentation say just enough to leave me in confusion:

BeanFactory: Object factory for any Resource conforming to the JavaBean spec.

The AbstractObjectCreationFactory

It was love on first sight with the AbstractObjectCreationFactory. It all comes together in this single class. Every project should have this… until now you created all your abstract objects yourself, this is not needed anymore! All those years!

Unfortunately, I had it wrong. This is an abstract implementation of the ObjectCreationFactory interface. Further investigation revealed that this is part of the Digester package.

The Digester package provides for rules-based processing of arbitrary XML documents.

I have no idea why this is in Tomcat. A leftover? Bad refactoring? Who knows?

Class Cloud (click to enlarge)

Tomcat 6 statistics Class Cloud

Top 10 of partial class names

  • Context: 55
  • Factory: 37
  • Task: 33
  • Ast: 33
  • Channel: 33
  • Rule: 32
  • Base: 31
  • Constants: 30
  • Handler: 30
  • Jsp: 27

Longest class name

The grand prize goes to: MbeansDescriptorsIntrospectionSource, with 36 characters!

The API documentation does not contain a description of this class, so I have no idea what it does…

Stay tuned for more useless statistics for other well known projects! If you have suggestions for which projects you want to see, please let me know in the comments!

6 reasons to create user interface mockups

User interface mockups have these benefits when used together with user stories:

  • Get feedback on the user interface early in the process, not after it has been built;
  • Reduce ambiguity about the user interfaces;
  • Reduce rework, spend more time developing new stuff;
  • Better trust from the customer towards the team: the team really understood what the customer wants;
  • Drawing inspires creativity, everything is possible;
  • The software gets a better UI.

A picture is worth more than a thousand words, especially when working with user interfaces.

How do you create better user interfaces?

OpenLayers Wicket integration updated

Nino Martinez Vazquez Wael did an update on his OpenLayers integration for Wicket. Looks really nice. The communication to and from Wicket is handled for you, so this is a very easy way to add maps to your Wicket applications.

New features

  • Now using JTS (http://www.vividsolutions.com/Jts/JTSHome.htm) directly.
  • It is now possible to draw geometries using the new DrawListenerBehavior
  • Geometries are pushed to Java using JTS
  • Remove the drawControl using the RemoveDrawControl behavior.

Read more about it on Nino’s blog.