Rapid Prototyping Gone Wild
There may be another framework out there that lets you write a micro CMS in 20 lines of code, but I haven’t seen it. Meteor had me at “Hello World!”, but the honeymoon still isn’t over — it just keeps getting better.
Jump back two years ...
I was disillusioned with coding web apps. I’d built, among other things, a substantial single-page app using a LAMP stack and lots of jQuery, which was great to use, but a nightmare to develop and maintain. I knew I could be working smarter, so I started checking out the proliferation of different frameworks on the web.
The frontrunners for me, at the time, were Yii (PHP) and Ember. In both cases, I liked what I saw, but found it hard to get my head around the API. I read a lot of docs, but it was all in-one-ear-and-out-the-other. I installed basic example apps and tried to hack on them, but ended up getting errors and getting stuck. I figured I should probably just give up hobby coding and stick to my day job (high school math teacher) — the time investment required to get productive with a framework was too large.
Then, one fine afternoon, I decided to install the Meteor framework and play with its to-do app — just because it was easy to do. I had no expectations — in fact, I didn’t like the idea of a “monolithic”, full-stack, framework. [Forgive me, God. I just didn’t get it back then.]
So I started hacking and … everything I tried just worked! When I wanted to do something, it only took a rudimentary scan of the existing code-base (and occasional references to the official docs) to learn how to bend the app to my will. What’s more, Meteor was doing a new build and hot code push to the browser every time I saved a file. I was impressed, to say the least.
Now, at that time, our school administration was looking for a new way to store curriculum documentation and the existing solutions didn’t serve our purposes. So, unbeknownst to my boss, I used a one-week school holiday to start coding in earnest. Over nine intense days, I learned a new framework and rolled out a large, highly functional prototype. Back at work, I called a meeting with our administration, pitched it to them, and got the green light to develop a production version for school-wide adoption from the start of the next school year — less than 4 months’ away!
So I coded like mad for the whole summer vacation and we’ve been running the app at my school for the last 18 months, to the delight of all who use it. Thanks, Meteor!
In those days, Meteor was just out of its infancy and everything was pretty bleeding edge, with a few solid packages and a lot of bubble gum and duct tape. Today, it’s a rock solid framework with a large, active, community who have built thousands of amazing packages to speed development. It also powers a slew of incredibly cool and diverse apps (click and scroll down) on multiple platforms.
Because this piece is about prototyping, I want to focus on those amazing packages. A fair bit of criticism was levelled at Meteor in the early days — “It runs on node, why do we need a proprietary packaging system when we’ve already got NPM, which is awesome?!” summarizes the general sentiment. So, did Meteor make the right choice there? Oh, hell yes, they did.
NPM is great. No-one’s denying that. But Meteor’s packages do something that leads to all kinds of magic — they can add code to both client and server. This make things possible that were unimaginable just a few years ago. Luckily for us, the visionaries at the Meteor Development Group, did imagine it and now unbelievably-rapid prototyping is our present-day reality.
For instance, I can get up an hour early for work and write a throwaway app that gives students fake money to invest in each others’ hypothetical small businesses, then have students using it in the first class of the morning. In that app, they had a nice graph showing a comparison of their businesses’ funding that changed in real time. But that was a year ago. Now I could do the same thing in half the time and have a far more robust product.
Because of the nothing-but-awesome experience I’ve had with Meteor, I thought it was time to give back, so I factored out and released a few packages from my production app that seemed to fill gaps in the ecosystem. Using one of these and another package from one of our community leaders, Sacha Grief, I was able to put together the micro CMS mentioned earlier, which may have one of the largest functionality : lines-of-code ratios the world has ever witnessed. (Note: it’s just a toy app!)
If you’re intrigued about how so much was achieved with so little, here are the notes on “the making of”.