Archive for May, 2009

Forget The Fuss™

May 19, 2009

Note: This is, again, one of the older posts that got lost in the dust. I think it’s worth posting here. What’s your opinion on this one?

I’m in software development business. For the last four years I’ve been following what’s new and bleeding (over the) edge, trying to find the silver bullet of software success. No luck. Some may argue there’s no silver bullet. Why are then there hordes of people trying to find it?

I’m not giving up on software business. Not by far. It’s way too addictive and there’s still good money to be made. I’m moving away from the edge, into calmer waters.

It’s like gambling, you’re trying to make a quick buck with little or no chance. Big dreams for small money. Kudos if you can pull it.

I really like the fortune 5 million philosophy, like DHH nailed it. It’s a lot of money here with just a few big players dominating the scene. I think it’s worth to take a deeper look into this jar of cookies. I think there’s lot’s of chocolate to be found here.

If you look at what’s happening here you’ll notice quite a gap. There’s bleeding edge guys pulling the front border ahead and there’s those leftovers from 1980 who managed to stay afloat without changing their software (or policies) too much. Well, at least some of them. Others that are not remembered, have sunk quickly enough so even history didn’t catch them. Let’s leave them alone, shall we?

Web 2.0, or 3.0 as some are predicting, is pulling the front border ahead with speed which is hard to keep up with. They hope, I guess, they can make a pile of money by being the first in the field. Maybe, few has been known to make it by being the first. The very last ones are still hanging on ropes they weaved decades ago. Just look at your bank’s software. No, not the shiny new web page, the actual software they’re using to make sure interests gets your paycheck before you do. You can’t guess what software they’re running. Not if you’re under 20. Of course, some did manage to escape, but many more are still hanging.

The fore front
Let’s take a look ahead. What do you see? Hordes of teens rolling into high school with so much of computer knowledge they could easily replace their CS teachers. Their minds working so fast they get bored the second they know how some thing works. No wonder we got hundreds of reddit and digg clones. Every high school kid has built one for himself. Why? Because he could (he is just a way to refer to high school kids; girls have come very far in computers too). Maybe he’s even thought about making some money with it on the way, but primary interest is to see if he can do it. Sure he can. Now it’s done and he’s bored. Next quest, please.

They eat new things for lunch, leaving only some crumbs for those who come later. Who is at the desks at Facebook or Google or most startups in the Valley? Kids who barely got out of high schools. And they have no more then 10 years of time to get ahead and do something remarkable, something they’ll be remembered for. That’s why I think the front border is moving so fast. There’s always fear someone will get there before you do and take all your sweet creme.

And you know what. Sometimes it’s worth trying. Sometimes it’s worth risking few high school kids to make some money. We all know, the kids are happy just to be part of something great, you can keep all the money. Well, after two or maybe even three times on the thin ice, they learn to fight. If you’re running a startup with this kind of kids you better know your way around or you’ll have a hard time convincing them it’s ok not to get options or shares. Few will work for promises. But if you get fresh ones from school, sure, why not take them for a ride. Does this sound familiar?

The last era kings
They’re the heavy guns of the industry. So well fortified they can’t be thrown of balance easily. They’re the ones you don’t hear about in the press or in the news. They keep the system running. Who are they, you might ask? Just look at your monthly expenses. You know, the bills you get regullary every month? I can hear your Aha’s… Yes, they are making fortunes every single month and are not much affected by everchanging fore front border.

It’s true, they don’t react on the first change, but they sure know what’s going on. Also, they know their time is running out and chances someone fresh could replace them are emerging on a daily basis. Sure, no one guerrilla team can beat them, but revolutions have happened in the past. So, they too are listening the fuss and trying to weed out upcomming trends.

The soft middle
Unaware victims are the simplest ones to get. Find one company with offices around the country which is still using last century software, unaware of today trends and you scored. You can sell them virtually anything. Just start with security related issues and everything will follow.

But let’s forget those. They’re easy snack and you just might keep some in the back for rainy days. I want to know how to get in bed with 10 to 150 people companies. They’re not too small and not too big. They have just enough employees to be in the need of custom IT software solutions and not too crowded to hire some old king still hanging around. And they usually have the budget ready for internal IT improvements. And that budget must get spent or they’re doing something wrong in the eyes of top managers.

What I think is they’re to conservative for latest software. So teen hackers are out. They might use some old solutions but are in doubt as they don’t want to paint themselves into the corner by using some piece of software only few on the planet know how to set up. Maintaining this piece is rarely even possible.

Industry best practices but more
What we’re left with are industry best practices with some room to wiggle. These days this means Java or C#. Trouble is, I hate both. I can’t stand verboseness of this two. It’s just too much to type. But that’s just me. Besides staying near industry best practices there’s another key which opens most doors. It’s stability. They all want their solutions to be stable and not prone to complete overdesigns and overwrites when front border pushes further north. Java nor C# aren’t stable enough from this perspective. With these two out of the equation, what we’re left with?

Addon: I’ve been doing Rails for some time and yes, it’s pushing the border. I think you can’t be on a much sharper edge, these days, then with Rails. But maybe it’s just me?

They want some reasonably well known brand, not too expensive and not too old.  Something in the middle, something that’s just right, but a bit ahead of what their current competition with more money would choose. Tough choice.

I think there’s no simple solution here. If it were, everybody would be working on it and this swampy middle terrain would be already taken. I think this is the reason why it’s still not taken. I mean, there’s a lot of money here and a lot of bullshit too. The ones which are on the way to this middle or ones who are just beginning are probably aware of this and are prepared to some degree. Good lawyers comes to mind. But let us stay on the software side. If you’re undertaking this situation, what software could help you stay afloat and make it trough upcoming hell situations you know are coming? What could help you stay out of the live sand?

I’d use software which permits easy and quick changes in design and specifications. It has to be easy to prototype with and able to make a lot of mistakes without too much cost. It has to offer easy exploring of unknown fields and most of all stable to sustain hammering from all sides.

Two comes to my mind: Lisp and Smalltalk.

A thing or two about deploying Rails apps

May 14, 2009

Note: This is an old rant which I wrote because I saw no end to possibilities and how to choose the right one when deploying large-scale Rails app yourself. Now, almost a year later, I’m still not sure there is one true way. But it’s not important any more. Enjoy the read.

It’s easy. Until you go worldwide.

I don’t know Django or any other web frameworks as well as Rails, so please don’t bite as this is no such call.

For local, small size web apps, Rails is absolute winner. It’s fast on development side and it’s fast to deploy. Few lines in NginX (or Lighty) and you’re set. You might just run it in development mode, just to see what is going on under the hood. It won’t hurt too much. The on;y downsize is if you happen to have a lot of theese small aps. Each app eat’s up at least 50MB of RAM, probably more. Before you know, you’re short on memory.

Situation changes rapidly when one starts thinking about going worldwide with it’s app. There’s a whole lot of stupidities you have to to through to get the right hardware setup the right way. But let’s drop this one. Let’s consider only software. Here’s my take: To run worldwide Rails app, you need at least 5 different software packages, all running and working with each other in perfect harmony. And this is just the very bare minimum. Let me explain.

For starters, let’s say we only have one server, so replication and load-balancing are out of the equation. To run a Rails app you need this: database software, web server (static and dynamic), Rails package and some search engine software package (I delibrately put out the text editor, as it’s not vital for production app deployment). This is the bare minimum. But this setup can get you a long way. It just could be enough to live trough and be a successful web app. Many did.

As many real world examples show, in most cases this is not enought. By far. To write it you need a bit bigger arsenal of tools. If you want to do it right (for some common sense level of right), you need even more software to support your development, deployment and at the very end, your production web app.

Test Driven Development seems to be praised in these days (even in startup-compressed time measures). This alone brings in 2-3 new Rails software packages, all of which you need to get to know of, use and maintain. Version control is of core necessity (git is popular this days), while caching (memcached), bug-tracking(insert your favorite here) and project management software (again, your favorite) is usually “a must have”. (Note: I still shiver when I hear “project management” phrase. Don’t even try mentioning “time management” to me…)

Deployment software to copy your app to multiple servers is also needed (Rails guys usually go with Capistrano), so is testing software (selenium, to name one) and of course we cannot forget about monitoring and reporting (God or Monit comes to mind). And then there are various statistics. We can’t let managers go empty handed, pretty graphs are essential!

With all this in mind, to deploy an Rails web app, you’d need 15 to 20 different software packages. And I didn’t even mention database replication, backup and keep-it-running-force-scripts we’re all aware of (but never talk about). Now, the hardest part isn’t developing this monster Rails app. It will probably have some errors at the beginning, but you can find them easily and quickly. It’s keeping all this various pieces of software of the right version on the right servers running in the way you’d expect them to. Countless hours are usually wasted in the process of fixing and maintaining the latter. And I don’t even want to remember the moments we did deploys and were crossing our fingers hoping everything would work as we planned.

Maybe your project has better foundations or is somehow of better stability and maintainability. Good for you. But I’m sure you’re not using less than 10 pieces of software to drive the whole thing. If so, let me know! Immediately, please!

But hey, I’m wondering, isn’t there a better way to deploy, run and maintain a worldwide web app? This is software. Why can’t it be more simple? Do we really need all this additional software just to keep one web app running (smoothly, I dare to say).

They say web3.0 is just around the corner… What will be the next a-must-have software package to support all this fine new ideas that are about to emerge?

Maybe an “off” button?