Category Archives: Software Design

Are small businesses doomed to fail, or can SaaS help?

According to the Bureau of Labor Statistics in the US, only 44% of small businesses successfully make it through four years of operation. One reason is that because of their size, small businesses cannot master the skills that larger organizations have (such as marketing, sales, service and technology). So, it should not be a surprise that they have a hard time competing in the marketplace.

One of the areas that has been a weak spot for small businesses is the use of technology in general and software in particular.

From a software vendor standpoint, small businesses were traditionally overlooked as a target market. In fact, in the 1990’s, common wisdom was that successful software vendors should focus on large enterprises, where the money resides, and apply the direct sales model, with a $100K+ price tag. The wisdom at the time was that smaller price tags did not justify a direct sales force, and required indirect selling. Selling through resellers, however, was and still is hard to crack. It’s hard to get resellers to commit to sell a product before it gets traction. And even later, it’s hard to educate resellers to sell a product proficiently.

From a small business point of view, buying software is—simply put–not easy. How can a small business be expected to have the skills to evaluate new software? How can they be expected to master how to operate the software? How can they be expected to integrate it with other software? And, when it comes to on-premise software, how can they afford to deploy and manage the software?

But then SaaS came along.

Continue reading

Advertisements

Planning and Launching Software Products in an Agile Environment

This week, I had the opportunity to speak in the Agile Practitioners 2013 conference. The topic of the talk was Product Roadmap, Planning and Launch in an Agile Environment.

The talk was around approaches to modern product management, and specifically considerations due to agile methodologies and short product release cycles.

Fundamentally, old-style product management assumed software releases are done infrequently, something along the lines of this diagram:

 old-style-cycles

Whereas modern product cycles rely on shorter cycles, something along the lines of this diagram:

 modern-cycles

The assumption in modern approaches is that the road to good software is shorter when making smaller steps and frequent turns than when making large steps and more radical turns. (This is geometrically true in the diagrams…)

Old-style product cycles consisted of three main steps: planning (negotiation, prioritization, scheduling), development (design, coding, testing) and launch (alpha/beta, release, outbound marketing). The main question I was trying to tackle in the talk was how the corresponding activities map to product cycles with frequent releases.

On a side note, some organizations use old-style product cycles (infrequent software releases) while using “agile development” techniques internally (that is, frequent internal releases). While perhaps better than nothing at all, this approach misses—in my mind—much of the benefit in agile software development. In the end of the day, the biggest benefit is adapting to customer feedback, and without the software reaching real customers, value diminishes.

The areas I was trying to tackle in the talk were:

  • How does planning occur in an environment when there’s no defined period for planning (“beginning of the release”)? When the working assumption is that many of the details (and associated effort) will be revealed during the development process. And, how do roadmaps look in such an environment?
  • How do product launches occur in an environment when there’s no defined period for launch, but—instead—software is ready in chunks? How and when does customer feedback get incorporated into the cycle?
  • How does one integrate new approaches and opportunities brought about by agile development? Mostly, agile approaches facilitate experimentation through proof-of-concepts and such (with various variants such as MVP, MSP, and lean).

Here are some of the practices we’ve come to follow over the years:

Continue reading

Why Polyglot Programming is a Fad

One of the considerations when building a new software product is the programming language or languages to use for development. Programming languages can be taken for just tools, like a hammer; one uses them to construct software applications. But more so, they are part of the software’s infrastructure: unlike a hammer, one cannot move to use a different tool on a whim: high switching costs are required.

A few years ago, the concept of polyglot programming has gained momentum and mind share. The idea was that one could develop software using multiple programming languages, all glued together, each optimized for a piece of the puzzle. The idea was largely enabled by the two major platforms (Java and .NET) including  support for language interoperability via virtual machines. People could program in multiple languages and still connect them together without clumsy inter-language binding mechanisms.

What’s interesting is that the concept has recently gained momentum again with the resurfacing of Java-based languages such as Groovy, Scala and Clojure. Half of a recent book, “The Well-Grounded Java Developer”, is dedicated to the concept; people now argue that “no one language will rule the cloud” and that “the future [is] polyglot programmers”. But, there are fundamental reasons why the concept never took off, and never will.

Continue reading