Writing componentized software is hard. There’s no point in denying it. Designing, defining and implementing components means defining expectations, making hard decisions and being rigorous. Building components requires specialized tooling that understands component interactions and packaging strategies. Deploying components is an exercise in detailed dependency coordination and management. Running components? Well, that’s the easy part…

So if its so hard, why bother?

Try this self-assessment questionnaire and see how many statements you think make sense (hint: low scores are good):

  • We’ll get it right the first time.
  • No one will want any more features.
  • Of course everyone will want the entire product!
  • Sales/marketing guys will never promise customers different configurations.
  • We won’t want to engage partners on this.

Monolithic approaches require monolithic teams, efforts and infrastructure. The costs are higher so decisions take longer and are more risky. Opportunities pass you by.

The key is agility. Software agility. Business agility. Systems agility. Product agility. Agile development methodologies are a recognition that you are going to do it wrong. Several times. Knowing that inevitability, developers seek to reduce the cost of these failures. Makes sense. But why stop at code production? Why not make it easier and faster to try new product ideas, enter new markets, or produce custom tailored systems? Eclipse itself is a testament to this approach.

Sounds good but there have been a lot of component stories. What’s different with Equinox and OSGi? It is small, simple and relatively powerful. With Equinox and OSGi you build up from base pieces rather than trying to decompose a large, purpose-built runtime environment. Another key is that the runtime is broadly applicable. OSGi originated in the embedded space but is equally applicable across the computing environment spectrum. Many of the big server runtime vendors are already headed this way.

That’s what Code 9 is all about. Helping you design, define, implement and deploy components in flexible ways, increasing your agility.