It's starting to seem like there are some new web 2.0 tropes coming into being -- little bits of functionality that you put together to make more interesting applications. Rails has a lot of those pieces baked in -- that's part of the beauty of Rails. Some of the bits are things like upload progress bars, tagging, and AJAXified drag and drop.
Another one is star ratings, like Netflix and Shopping.com. I've built a 'star rater' in the past, but I liked this CSS solution that Rogie King put together (and gave away to the whole world to reuse). This time, it's a gift from the CSS community :)
Listening to Good Food last weekend, I heard (my favorite restaurant critic) Jonathan Gold extolling the virtues of an ice cream parlor and suddenly I really wanted a sundae. The same thing happens when I listen to Winecast -- I suddenly want to go wine tasting (and shopping).
In that spirit, last night we drank a really fine Rosenblum black muscat (2002) dessert wine with some of those little Dove Bar minie ice cream bites. Very summery, very yummy, very low maintenance dessert. Great wine -- and yes it's the same name, but they are no relation.
Taking this all a little further, I came accross this wine tip today:
To chill a bottle of white wine quickly, put the bottle in a bucket with ice, water and a large handful of salt. The salt reduces the freezing point of water and will allow it to become superchilled, which will in turn chill the bottle of wine in six minutes flat.
And it made me want to buy and chill a bottle. Wow, the power of suggestion. Wonder if I can tap into this somehow with a product...
One of the many problems with podcasts is that there's a lot of investment in downloading a podcast and putting it on your mp3 player to listen to, without knowing for sure what you're getting into. For instance, you would think a quality site like Engadget would put out a quality podcast (but you'd be very mistaken); on the other hand, there are amateur podcasts that give the professionals a run for their money, like Tim Elliott's very excellent Winecast.
Since I drive A LOT (and also spend lots of time rocking crying babies, in addition to other pursuits that go well with a soundtrack), I have lots of time to listen to podcasts. So the question is: Have you heard any good ones? Which ones are actully worth downloading and giving a listen to?
I'll bet they don't know each other, and probably don't even read each others writings, but two very influential Geeks (I was about to say Silicon Valley Folks, but niether lives in Silicon Valley) are coming to a very similar conclusion about how the next generation of Software companies can put the old school out of business.
In today's I, Cringely column, he quotes PayPal co-founder Max Levchin:
'"What you want to do," he said, "is listen to your customers and bring out every two weeks improved versions that would each take your competitor two months to complete. That's when you are on a rocket -- they can't keep up so they can't compete. They lose hope and pretty soon you have the market pretty much to yourself."'
That's a more agressive, but very similar idea to the way Jason Fried (co-founder of 37 Signals) is advocating that people build their applications. In a recent salon article praising his small design shop, Fried said:
"We have this big thing about embracing constraints," says Jason Fried, the company's founder. "When you have constraints -- less time, less money -- people care about every dollar they spend. Customers ask us, 'How does Basecamp compare with other project-management tools?' We say it does less. Our products do less, and that's why they're successful. People don't want bloated products, and constraints force us to keep our products small, and to keep them valuable."
Cringley's not really making about about how to build killer apps quickly -- in fact the premise of his article is that apple should distribute its OS for intel on ipods so every ipod owner can boot into OS X on their wintel box, thereby bringing down Redmond (sounds far fetched to me). But he's making a great point about how quickly Google deploys apps, and how fast they iterate, and how it drives MS insane.
Fried is making the same point, just not on the scale of Google. Think: Flickr and SmugMug and Topix and TypePad. That's more what Jason Fried is talking about. But they certainly agree: the small software companies that take down the giants will be much more agile then their predecessors.
Touched By His Noodly Appendage
I sure don't have time to get you up to date. This Slate.com story is a good starting point.
I first saw the illustrious FSM discussed at Boing Boing by Cory Doctorow (author of the excellent and freely downloadable science fiction novel "Eastern Standard Tribe").
Today it's a sweet AJAXified spell checker. You can bet this is going into that super secret app I'm building. :)
Can anyone provide me with a Flock invite?.
SwitchTower is a new feature in Ruby on Rails that simplifies deployment. In fact, it's so simple, I want to copy it for all my Java apps.... Check out the quick start here: SwitchTower Quick Start Guide.
I've got a senior position open right now (if you're a excellent web developer looking for a cool job, leave a link to your resume in the comments) -- and it's bringing to light the changing state of the tech job market. I had a candidate in for interviews last week, everyone loved him, but he has another job offer already -- with a good company, for more money than I can pay him, closer to his house.
I see a whole lot of mediocre candidates out there, but the top talent is definitely not on the market in any substantial or obvious way; and when they are on the market, they quickly get snapped up. If I had been more nimble (or rather, if my organization had been more nimble), I could have nabbed this guy earlier.
Last night as I was rocking the baby to sleep, I listened to Amazon CTO Werner Vogel's talk E-Commerce at Interplanetary Scale.
Once you get past the bad jokes (sorry Werner), it's quite an inspiring listen. I love it when someone can make me think outside the scope or parameters of what I take for granted. Where I work, we have large distributed systems, and I'm pretty sure we'll be able to scale with demand for the foreseeable future; I haven't had to think on the "interplanetary" scale, Werner took me on an interesting journey beyond the "lots of cheap boxes" horizontal scale I currently favor into biological based models like Epidemic transmission of state. Pretty great stuff, totally worth listening to.
I used to develop software for a living, and now I manage a distributed team of software developers (I still develop software for fun). When I developed software, I absolutely hated writing technical specifications before coding. I remember my boss(es) getting into passive aggressive snits with me about this -- they wanted these documents describing exactly how I was going to build what I was supposed to build, and I knew in my heart that whatever I said would be wrong once I started writing code.
Waterfall development, which is the champion model for these technical specification documents, relies on a chain of handoffs that can be visualized really well on your typical Gantt chart. The problem with WaterFall is that it doesn't work. First off, people aren't perfect, and people who design software products aren't perfect, and so there's inevitably going to be missing and imperfect information in the original specification. Additionally, requirements are constantly changing: imagine being able to predict the future with such perfect clarity that a requirements document you write today accurately reflects the software you want to see in two years when the code is compiled and tested for the last time. I call this "requirements entropy" -- basically the initial requirements for any software project decay at a particular rate (Dave Thomas points to studies that show this rate to be around 2%/month) until they are completely worthless.
To overcome this fundamental problem in building software, several new software development Methodologies (Big M) have evolved: Agile Programming, Extreme Programming, SCRUM, etc... These methodologies take a more iterative approach to development, focusing on delivering workable code to clients early and iterating frequently. In these methodologies, software specifications can be written on the back of a napkin, and there is rarely a technical architecture document written until the software is shipped, at which point, if the client is lucky, these documents get backfilled for the poor sap who has to maintain (and add features to) the product ad infinitum.
This works for quit a lot of cases, but it doesn't cover them all. Sometimes you develop software that has no "customer" except your team -- like a lot of middleware products. Sometimes you develop software in teams that are so large that iterations like those described in XP are simply not logistically manageable.
Software design involves tinkering. Software is a craft; we aren't like structural engineers and we don't design bridges or space shuttles (thank goodness). If we made cars, I wouldn't want to drive one -- imagine getting a blue screen of death every time you slammed on the breaks. You can't really tinker with a suspension bridge, but great software often evolves through a process of trial and error.
However, there's certainly a place for technical and architecture documents -- but they need to be evolving documents. Draw a picture and prototype it, see where it falls down, rinse and repeat. I think if my boss(es) had asked me to "take a cut at a draft of a design document, and then go see if it will work," we would have all been much happier.
I've been thinking a lot about "Strategy" in the past few weeks. I have a side project I'm working on with a collaborator, and it has a very clear strategy and path to profitability:
1. Build a great, free, web product where users create a bunch of useful niche content.
2. Advertise the product shamelessly (and hope for word of mouth promotion)
3. Make money hand over fist through Google's AdSense
I've also been thinking a lot about strategy at my day job where we have a pretty loud and clear new goal (double revenue every year) but not a real clear idea of how we'll do this.
Phase 1: Collect Underpants
Phase 2: (silence)
Phase 3: Profit
-- This is from a very memorable episode of South Park that I think aired right around the time of the bubble crash, and those 'phases' are the succint three-step business plan of an enterprising band of underwear gnomes. When I just Googled for "underwear gnomes", I saw an article that The Motley Fool had run about this episode and its lessons for investors.
It's pretty easy to develop a great model for phase 1, and "profit" seems like a really good end game, but phase 2, ah, phase 2. Phase 2 is really the key: what's your strategy to turn the great whiz bang stuff you do in phase 1 into profit. Strategy Strategy Strategy.
So, what is a strategy? Wikipedia defines it as: "A strategy is a long term plan of action designed to achieve a particular goal." How do you create a strategy? If you can't think of one, copy someone else's: there are a whole bunch of great, well documented, highly successful business strategies out there.
But what internet businesses are there that are doubling their revenue every year? Assume we can do anything we want to, as long as it's internet based, and it's not gambling or porn. Well, Google is certainly doing this; Yahoo is well positioned to do this, too. eBay seems to be doubling revenue year over year; are sites like Flickr and SmugMug doubling revenue annually? Possibly, but it's hard to know. What about topix.net? Topix is probably doing this. Six Apart? I hope they are (for their sake), but there's a big difference between doubling $1 million and doubling $40 million. My day job is in the latter camp.
Yahoo has pioneered a "fast follower" strategy in the internet space where they keep close tabs on incubating companies and once a business proves successful, they copy or buy it (auctions, webmail, etc...). Maybe that's a strategy that could work for us. Let's see: to copy SixApart's business model exactly, at an average user subscription price of $7.00/month (which is generous), I would need 487,000 new, paying users for my service to generate an additional $40 million in our first year. And then we need to double that each year. Since growth in new internet users has dramatically declined, we should assume that growth in the number of bloggers will likely taper out soon as well, so we're likely going to be tapping into the tail end of this subscriber base, and, oh yeah, Google offers blogs for free with their very excellent tool, Blogger.
How about we try going after SmugMug/Flickr? Well, Flickr charges $24.95/year. To get to that $40 million dollar mark, we need 1.6 million paying customers. The first year.
Topix took several skilled engineers a couple of years to develop the technology they have. I could probably copy it with a team of 20 engineers in India in about 9 months. Topix is a free service that makes money through ads and partnerships; I have no idea how much revenue they are generating, but as they were valued recently at $64 million dollars. Assuming they were valued at 10x 2005 revenue, that means they're going to do at least $6 million in revenue this year. Whoops, that's a lot of time and effort and doesn't really help me hit my $40 million.
Also, these companies have relatively low overhead, and as Web 2.0 pioneers they've got great word of mouth. So, what will be our strategy?
This is going to be a super geeky post, so if that's not your thing, please ignore :)
I'm writing on the plane coming back from "Lone Star Software Symposium," part of the No Fluff Just Stuff 2005 summer tour; similar to the NFJS conference I attended in 2003, it opened my eyes to lots of cool new stuff, and also helped me take the temperature of some hot technology memes:
EJB -- cold (trending towards absolute 0)
JSF -- warm (trending cold)
Groovy -- lukewarm (trending cold)
XQuery -- thawing (trending warm)
Ruby -- warm (trending hot)
Tapestry -- warm (trending colder)
Struts -- still warm after all these years (maybe trending warmer after failure of JSF)
Spring -- hot (trending hotter)
Hibernate -- hot (trending hotter)
AJAX -- hot (trending hotter)
Ruby on Rails -- hot (can it get hotter?)
Also, Bruce Tate (author of the seminal antipattern text "Bitter Java," among others) was trying to hype, as loudly as possible, continuations and continuation servers. Continuations are a pretty sweet idea that non-stack languages like Ruby and Lisp can easily implement: namely, you freeze the state of the program and store it away in some variable to restore it at some later time. The everyday example is that it's sort of like when you put your Powerbook to sleep. Imagine developing a web application where the state can be completely restored to any point in the work flow; Bruce showed a demo of a pretty sweet framework (Seaside) that can do this, written in SmallTalk.
My favorite takeaways points (since I already was familiar with Ruby On Rails):
1. XQuery is on the rise, and this is a cool technology with lots of possibilities; the downside is that the only decent implementation is a commercial one by Mark Logic. I'm looking forward to the completion of the XQJ JSR (only pending official W3C approval of XQuery spec, of which MicroSoft is the Spec lead -- come on Microsoft, we've had this draft for almost a year!)
2. The XML->XSLT->XSL-FO->HTML|PDF chain was a great idea that never really took off. XSL-FO is still a great format for print publishing.
3. J2SE 5.0 has some very nice new features, especially the new for loops, autoboxing and enums. I knew about these already, but Jason Hunter's excellent presentation helped drive home just how nice some of the new stuff really is.
Now back to battlestar gallactica season one (which Reid brought along, and has lent to me for plane viewing).
Just got out of one of the dullest meetings in my life. Wow. My brain hurts. Here's the situation: there's this 2 page Word document that everyone who is attending the meeting gets about 18 hours in advance, with notice that this document is the basis for the 2 hour meeting. So, what happens? no one reads the document (except me?), and we spend 1.5 hours going over it line by line. By that time (I'm calling into this meeeting remotely, by the way), my brain is completely fried, and I'm totally tuned out. But I get asked to repeat some stuff I said at the begining of the meeting. There were so many other problems with this meeting, I can't write about it now. Oh it hurts!
I read DFW's magnum opus, Infinite Jest, about 7 years ago, and I still remember the experience vividly. It took me about 9 weeks to read, and I read it on planes, on buses, in my Castro Apartment. I was still a smoker when I read it, so I remember smoking hand rolled cigs and reading it at the little IKEA table nestled into the bay window in that Apt. I would roll with one hand, and hurt the other hand trying to hold this massive book steady on the table.
Reading Infinite Jest provokes quite different reactions in different people. Like, for instance, my brother hurled his copy accross the room in frustration after finishing it. But then, he didn't read the footnotes.
In any event, I loved the book, and whenever I meet another hardy soul who has made their way through it, I like to chat about it. Oddly enough, I don't think I've ever met a woman who has read the book (my wife calls it a boy book; she says that about Lethem's stuff too), so when I read on some guy's blog about his wife's journey through IJ, I clicked through to read her thoughts on it, and was rewarded with a really cool posting about unique vocabulary in IJ; that's exactly the quirky kind of view that this book provokes. I love it.
So, most days, I have time enough to at least glance at NetNewsWire to see what's going on in the online world. Lately though, I've been totally slammed at the day job, and haven't really had the time to go through my 100+ feeds. But my boss turned me onto a little thing that helps me keep in touch with the zeitgeist: Most popular links at del.icio.us.
The twenties were the "Go Go" twenties, and then, 70 years later, so were the 90s. It's hard to call years dominated by President Bush, Iraq, The Crash, etc... "Go Go" -- but there is a real "Go Go" feel to things again these days. And of course, I like the sounds of "The Go Go 00s" (pronounced, according to me: "The Go Go Ohs").