RSS Feed
Apr 3

The cloud and the 12-Factor App

Posted on Tuesday, April 3, 2012 in Groovy/Grails, Ruby on Rails, Technology

Having worked for a couple years now on Rails applications deployed to cloud hosting services like EngineYard and Heroku, a certain set of “rules” have begun to emerge in the back of my head regarding this “new world” application development and deployment process. Things that run the gamut of application development, from dependency management to rapid deployment to source control.

Just as a more or less holistic picture of this “new world” was beginning to form in my head, Adam Wiggins of Heroku published a very nice, quick-read “web booklet” – The Twelve-Factor App. It’s not deep, but does a great job of circumscribing the set of concerns one should have in mind when building an app that is destined to be deployed in the cloud.

If you are relatively new to cloud-based deployment of web applications, it may not be obvious that deployment to a cloud-based server should affect your application in so many ways (thread management, stateless processes, absolute separation of configuration data from source code, etc.). Build, deploy and manage an app or two, and you’ll learn some of these lessons the hard way.

If you do open source development (like Ruby on Rails), learning the hard way has probably become a way of life. Do yourself a favor and remind yourself how nice it is when someone takes the time to put up a few guideposts to mark your way, to keep you on the trail and out of the weeds (or over the cliff’s edge). Check out this informative site. You can get through the content in fifteen minutes. Thirty if you take time to let the points sink in a bit. You’ll save yourself a lot more than that if you use these concepts when you build your next hosted application.

Mar 21

Small, Powerful Teams

Posted on Monday, March 21, 2011 in Groovy/Grails, Professional, Ruby on Rails, Technology

Much has been written about the many ways Ruby on Rails makes developers more efficient in terms of business features produced per unit of time, or line of code. Syntactic sugar in the language. Nary a line of boilerplate code anywhere. A plethora of plugins and gems to do the dirty work and keep you focused on higher-order features.

It seems that far less has been written on the consequences that hyperefficiency can have in an organization. On the surface, it’s obvious – teams are more efficient, so they create features more quickly, and projects get done faster. Sure, that’s true – but dig a little deeper and things get more interesting.

Most would agree that like so many things in life, the raw talent of IT professionals, in aggregate, is distributed along a bell-shaped curve, and that accordingly there are precious few “rock stars” out there. In traditional IT shops, the best and brightest, in order to have the most impact on an organization, tend to be surrounded by large teams, and spend their time creating designs, helping to solve problems others bring to them, and generally dispensing wisdom. There’s an economic reason for this – given the tools, languages and frameworks we have all been using, there is no way that even a small team of elite minds could produce any software of real significance in a timeframe that matters to the organization. So we have large teams, populated with people from both halves of the bell curve, with the “outliers” leading the way.

But that is changing. With high productivity language/framework combinations like Ruby on Rails, people are discovering a new way to leverage the best and brightest. Suddenly, significant software can be developed by two or three developers in two to three months. Sprinkle in a bit of engineering discipline (DRY, TDD, etc.), and the software that emerges at the end of one of these projects will be a shining example of what software can be – code that actually realizes business and design goals, and does so elegantly and efficiently. The iPhone of the software world.

Sadly, in traditional environments, this almost never happens. Through brute force and much testing and debugging, most applications come close to meeting business goals, but they are so inelegant and internally compromised that they are very costly to maintain, and difficult to adapt to changing business requirements. Why? In old-school leverage, the visionaries could realize their ideas in real software only by describing that vision to the people who were actually writing the code. And depending on the communication skills of the visionary and the ability of the development team, the degradation of that vision might range from severe to only mild. Can you imagine what Beethoven’s Ninth Symphony might have sounded like if he could only hum the theme and describe the countermelodies, and have a group of scribes do the rest of the work?

But put that visionary (or small group of them) in front of keyboards and let them have at it, and you have a whole new ballgame. Not only is there far less time spent communicating the vision, but those who see it most clearly are able to express it directly in code.

This, more than anything, is why I’m excited about RoR and similar languages and frameworks.