Creating Wealth

I have changed the price of our first product, CSV Manager from $97 to $47, for the entry level license. This was not an easy decision. No pricing decision ever is.

CSV Manager was launched in September 04, so I do have a lot of data on sales at the $97 price point. Enough to generate a reasonable estimate of the value of the demand curve at that point. But it really is a black art. I have decided that the information obtained by changing the price is more valuable than the possible loss of revenue.

But there is another factor. One of the drivers for starting a business is to solve problems for people. To “create value”, to put it in marketroid-speak. So what is value? What is wealth, in fact? People are wealthier when they get more for less. In this century, we have indoor plumbing. Two hundred years ago, you had to be Queen Victoria if you wanted enamel. Another example: Virgin Galatic. Pretty soonish you'll be able to view the final frontier for less than the price of nice house. Space is quite a bit more accessible than it was in 1969. So providing value is just the same as creating wealth. More for less makes you money. The true purpose of a good business is to make its customers wealthier. That's what Henry Ford did with the Model T, that's what Skype is doing today. A good business makes money for its customers.

And the purpose of technology is to make stuff cheaper. A true technology company keeps lowering its prices. Year-in, Year-out. That's why Ricebridge prices will get lower each year.

So why is XML Manager priced at $97, the old, high price? Because it's a new product. It has to prove itself in the market. Once that happens, and sales ramp up, we turn on the wealth tap and make it cheaper.

You may be thinking, “this guy is nuts! He's throwing money away!” Maybe, but our code is there to be used. The more it is used, the more valuable it becomes. More users mean more squashed bugs, more FAQs, more feedback, more features, and so on. By the way, that's what makes Open Source work so well – many eyeballs. Well, we have to earn a living, so we can't Open Source our products, but we can approach Open Source, asymptotically. And in doing so, we end up with products that people want to use, not products that they are forced to use.

These ideas are similar to Jonathan Schwarz's thoughts on “Volume”. Now he does go on a bit, but he's basically right. Giving people more power to get stuff done is the purpose of a tech company. (hey, Jonathan, where's my server? hope you're not just keeping them for the big boys. I have benchmarks too you know!)

So this is all nice and warm and fuzzy, especially for new customers – cheaper stuff, Yay! It's not so nice for existing loyal customers though. They get a wee bit annoyed, and rightly so, when stuff they just bought gets cheaper overnight. So here's a pledge: If you are an existing Ricebridge customer you will always get a nice big fat discount on new stuff. And even then, if you think you've been treated unfairly, just let us know, and we'll find even more free stuff for you.

Well, what do you think? Am I about to run my company into the ground?




Posted in Business | Leave a comment

To Tell, Or Not To Tell, That Is The Question

One of the beta reviewers for our new product, XML Manager, asked me why I had not documented the development process on this blog. She suggested that it would be very interesting and useful for potential clients to see the development unfolding.

Well, it is a valid point. In fact, Eric Sink has some good thoughts on this very question. On the plus side, you give your customers a clear idea of where you're going, they know what products are coming along downstream, they can plan more effectively. On the other hand, you give your competitors a head start.

Seems like it comes to down to a question of, “do you love your customers more than you hate your competitors?” When you put it that way, it's a no-brainer. So I will be discussing the development of the next Ricebridge product. Why did I not do it for XML Manager or CSV Manager? Well the first mistake was not having a blog. The second mistake was not having a blog. And the third mistake was writing a business plan.

Yeah. I spent so much time writing a bloody business plan in the first half of this year I nearly bankrupted myself. More about that later.

So, you're in for a good read. Our next product is a standalone user management engine. It has a few nifty features you won't find in the user handling of your common-or-garden web framework. And it's half written already and in production for a client. This will be a classic case of productising consulting-ware. I'll be giving you the inside scoop, all the tears and all the laughter. Hey, with a few intelligent comments you might even get an honorary mention in the docs! (and no, there won't be a nerd movie.)

A lot of the discussion will be market-focused rather than tech-focused. Hey, this is a business. If you've been thinking about setting up your own software company, or thinking of running a weekend micro-ISV, then this is your chance to get an insider's view before taking the plunge. So hop on, this could get bumpy!




Posted in Business | Leave a comment

XML Manager Soft Launch (with freebies)

Big news this Monday. Ricebridge Software has launched our second Java component: XML Manager. It turns your XML into a list of data records, ready for processing. Check out the demo (all AJAX-ified, if I do say so myself!). We're doing a soft launch on this as it's far to close to Christmas to get into a big launch scenario. But come the New Year we'll have lots of fun.

This blog is supposed to be about starting a software company so you'll be hearing a lot more about my product marketing efforts over the next few months. I was holding off a little while we were finishing XML Manager, but now that the cat's out of the bag, I can start pontificating about how to run an ISV! Now I'm no Joel, I don't always do things perfectly, and if you've been thinking of starting your own software company then you might as well follow along and watch me make all sorts of entertaining mistakes. But no fatal mistakes. Rule number one of this trade is to set things up so that you can't fail. We're talking zero overheads, and self-maintaining systems.

Anyway, back to XML Manager. To reward all my readers, I've a little Christmas treat for you. Anyone who posts a comment before Jan 1 2006 gets a free single developer license. Hey, that includes a free CSV Manager single dev license too! So why not – you never know when you'll need to get a load of XML into a database!




Posted in Business | Leave a comment

Friday Fun: Silly Skype

Possibly the daftest thing you can do with Skype: WeeMee.




Posted in Fun | Leave a comment

More Entries in the Edit Sidebar

Roller shows a list of recent entries and recent drafts on the left sidebar of the weblog editor page. This is a really handy little feature and lets you access entries and drafts really quickly. The problem is that only 20 entries are shown as standard, and there's no setting to change this. Back to the code!

So the sidebar template is in weblog/WeblogEditSidebar.jsp, surprisingly. A quick scan of the code reveals that the list of recent entries is predefined by the model:

<c:forEach var="post" items="${model.recentPublishedEntries}">

Looking at the top of that page, we see that the model is org.roller.presentation.<br />
weblog.actions.WeblogEntryPageModel
. That's kind of a deep package structure, but OK. So inside that class, we hack up the getRecentPublishedEntries method.
It's actually just a parameter change:

    public List getRecentPublishedEntries() throws RollerException
    {
        return rollerRequest.getRoller().getWeblogManager()
            .getWeblogEntries(
                rollerRequest.getWebsite(), // userName
                null,              // startDate
                null,              // endDate
                null,              // catName
                WeblogManager.PUB_ONLY, // status
                new Integer(20));  // maxEntries
    }

Change the maxEntries parameter to however many you want and away you go.

Now to deploy. Just run the wonderful build.sh all command from the Roller source root folder and it does most of the work. Copy across the new rollerweb.jar file and restart tomcat. And you're done.

And yes, before you point it out, I am aware that the Roller source does not meet my exacting standards of indentation. The fallback strategy is to stick with whatever dumbass indentation standard the codebase you have to work on uses. That's just the way it is.




Posted in Java | Leave a comment

Killer Conversations

I may be a bit late to the game, but I won an MP3 player in a raffle recently. Hey, I'm cheap! Anyway, I finally got into this podcasting thing. If you're just getting into it as well, check out IT Conversations. They have all sorts of great techie stuff there. You wouldn't use your MP3 player for music now would you? Not when there's loads of nerd stuff out there. Well, actually, I'm listening to The Killers at the moment (you know, from the Champion Sports ad), and they kind of rule in a sucky way – some good morphy sounds.




Posted in Ireland | Leave a comment

Revenge of the Clampees

So if you've read Gladwell's Tipping Point, you'll appreciate this one.

I was taking my daughter down to the local outdoor playground on Sunday, and the car park was unusually full. As in, completely. People were even parking up on the grass, and in no-parking zones. Cars all over the place. “Feck!”, says I. “Look, the Park!”, says herself, with no room for excuses.

Except, the local credit union car park, right next door, is empty. I'd say it's the great big scary “we will clamp you and your children unto the seventh generation” sign. So nobody has dared disgrace this tarmac. They've parked illegally everywhere else, but not in this car park.

Anyway, I have no time for this, so I just park there anyway. You can see the car from the playground and I'm ready to storm over and have it out with any clamping truck that comes along. Plus, you can see them coming along the main road so there'll be plenty of warning.

An hour later we head back to the car. The entire car park with the scary signs is now full. Looks like I've started something. As soon as one car did it, all the rest followed. Seems like the tipping point is one car.

I suppose it makes sense too – if there are loads of illegally parked cars, the clampers will take longer to get to yours. But the main reason is probably the old “everybody's doing it so it must be OK” line. So my tip for the week is, park it, and they will follow. Want to make use of a reserved car park? Just park and you'll soon have a bunch of followers to take the heat…




Posted in General | Leave a comment

Data Center Minutes

Here's one for all you MBAs out there. I'm trying to work out the cost of a data center minute. Huh? What's that?

OK. Imagine you have a mid-range web server in a data center. You pay an annual fee, maybe some more for bandwidth, and maybe even more for tech support. I am talking about dedicated hosting by the way, so maybe you bought the server, or you leased it. Anyway, each minute of uptime is something that you pay for. So how much does it cost? For any given server, you can work this out, but I want to get an “average” figure. What is the market price for a data center minute right now?

This sort of setup seems to be about $200-$400 a month based on some googling. Which works out as $0.005-$0.01 a minute. Does that sound right?




Posted in General | Leave a comment

Roller’s Ugly Permalinks

I'm using Roller 1.2 for this blog at the moment. Roller 2.0 is out, but I'm in the middle of a beta-testing a new product so I'm not going to risk upgrading for a few weeks yet, in case I end up yak shaving.

I'm pretty happy with Roller. It's a great piece of code and it's been really easy to customise. I run it because I was already running tomcat, and it's just easier to keep everything Java focused if you can. (more on that later – there's a big deficiency in the webmail area with Java).

So anyway, the one thing that was really annoying me was the permalinks. The standard form is:

http://www.richardrodger.com/roller/page/richard?entry=foobar

Yuck. Not only does it look ugly, but the entry is only identified in the query parameters and is thus not analysed properly in most web stats packages (including google analytics, which I was lucky enough to get an account on). This makes it hard to tell which entries are getting the most hits etc. Also, the permalink is not search-engine friendly.

So time to put the hacking hat on. After scanning through the Velocity templates in the Roller distribution I was none the wiser. But then I decided to bite the bullet and hack the code. In the end it was pretty easy to change the permalink code. First, links of the form

http://www.richardrodger.com/roller/page/richard/Weblog/foobar

are supported (why are they not standard? dunno.), so this was my target. After a bit of global searching, I discovered the getPermaLink method in org.roller.pojos.WeblogEntryData. Replace the line:

String plink = "/page/" + website.getUser().getUserName() + "?entry=" + lAnchor;

with

String plink = "/page/" + website.getUser().getUserName() + "/Weblog/" + lAnchor;

And now the permalinks are just right. By the way, the easiest way to make this kind of quick change is to download the source and tools distributions, unpack them, and run build.sh all. It all “just works”. Great stuff.

Of course, as you may have noticed, mucking with your feeds is not a good idea. If you change the permalink then all the old entries get replicated, because the aggregators think they are all new. So make this change before you go live.




Posted in Java | Leave a comment

Apologies to Subscribers

Hi. You may have noticed that all my posts have replicated themselves. I changed the permalink code to a nicer format, forgetting that this would mess up all the feeds. Sorry about that.




Posted in General | Leave a comment