June 20, 2008

Homeschooling Reconsidered

Stanislav asks:

Would you work with micromanaging boss, no salary, and all your work thrown away?

Unfortunately, my subject line ruins the punchline of his (non-joke) post about institutionalized public education, which you should go read anyway. I get the impression he opted out of for his young daughter and it made me think about my own kids, who are 11 and 8 years old. My daughter is about to start middle school and my son is going into fourth grade. They're relatively smart and athletic kids, and overall they are growing up in a typical American suburban way of life. I really haven't given much thought about homeschooling, even though my religious, borderline nut-job parents homeschooled all four of my younger siblings after struggling with their perception of my own high-school career.

The thing is, school really is just a glorified daycare center. As an intelligent, misunderstood and equally rebellious kid, school didn't do anything for my discipline and life prospects other than keep me out of trouble (and poorly at that, once I hit high school). I spent my entire childhood with my head buried in books and computers, and I'm sure that most of what I learned during those years was self-taught. What school taught me above all is that other people are cruel and stupid, and to always, unfailingly question and challenge authority figures. (It has served me well, I think.)

Kids get Macbooks for Christmas

So as I reflect on my children and their school experience, I have to ask myself some tough questions. Given the luxury of time and resources to be able to afford the investment of homeschooling, am I willing to consider it as a realistic option? The actual schooling wouldn't even have to happen at "home", since I could easily set up an office with two desks here at Hashrocket HQ and treat them as junior interns.

Any of you dealing with similar questions?

June 07, 2008

Upcoming RubyFringe Talk: Do the Hustle

Sales is an art that very few technical people have mastered. Very few. It takes patience, confidence, empathy and whole slew of other skills mixed together -- a brew that is seriously difficult for many geeks to figure out.

In my RubyFringe talk, I will leverage my experience successfully selling consulting services for both Thoughtworks and Hashrocket to answer some of the following questions:

  • How do I figure out how to price my services?
  • How do I figure out the kind of work I want to sell?
  • How do I write contracts and statements of work?
  • What about proposals?
  • And RFPs? (Requests for Proposal)
  • How do I close the deal?

The word "hustle" can mean "to sell aggressively" and has a mostly negative connotation, but the main reason I used it in the title was for catchiness. (And, I guess, also cause I like the disco song of the same name.)

I hear there's only a few registration spots left.

June 03, 2008

Workaround to Get All Your Twitter @Replies

Twitter's show me all @replies has not been working, which means you don't see people's replies to you unless you follow them. If you have a high ratio of followers to people you follow, you can really come off as a dick because of this bug. Thanks Twitter!

Luckily there's a workaround involving Tweetscan

Real-time Twitter Search - Tweet Scan
Uploaded with plasq's Skitch!

Do a search for your Twitter username and subscribe to the resulting dynamic RSS feed. Problem solved. Hopefully Twitter gets their act together soon, though. Even though their scaling issues have nothing to do with Ruby on Rails, they still give plenty of FUD-fuel to the haters.

June 02, 2008

Railsconf 2008 Slides for Worst Rails Code...

I'm happy to make available the slides for my well-received Railsconf 2008 presentation: The Worst Rails Code You've Ever Seen (and how not to write it yourself)

obiefernandez-worstrailscode-railsconf2008_slides.pdf

Greg Pollack (of RailsEnvy.com fame) included an interview with me about my talk in his Railsconf 2008 Videos collection. Direct link to the Vimeo clip is here.

I want to publicly thank Rocketeer Rein Henrichs for his somewhat late-minute agreement to co-present, even though it meant being up and alert at 9 am on Sunday morning after extreme sleep deprivation for the duration of the conference. We were able to riff off each other and crack up the audience -- without resorting to too many inside jokes. (Did you see what I did there, Rein?)

I also want to thank all my readers that responded to my call for bad code examples a couple of weeks ago. Explore the comments on that post for some good examples that I ended up not using.

One of the coolest things about the talk was that several community-benefiting ideas popped up because of it. I mentioned the possibility of signing authors to write a Rails Antipatterns book for my series from the stage, and Chad and Tammer from Thoughtbot volunteered pretty much immediately. Greg from RailsEnvy also suggested that he help me get the talk recorded as a video podcast and that'll happen sometime soon I'm sure, as well as the idea of turning the talk into some sort of recurring video podcast by me and Rein. We'll see... copious free time and all that being what it is.

Oh yeah, on a final self-congratulatory note, I also claim bragging rights for packing the room with 1000+ attendees on a Sunday morning! Maybe the scheduling gods will be kinder to me next year in Vegas?

May 30, 2008

MagLev is Gemstone/S for Ruby, Huge News

...and I suspect it will be a hugely disruptive force in the Ruby/Rails community in the future.

Holy shit! - Antonio Cangiano (after seeing the benchmarks run)

Avi Bryant seems to be leading the project and it's only 100 days old (and how did it stay secret so long?!?) However, since it's based on the mature Fast VM used by Gemstone/S, they're already blowing away Ruby MRI 1.8 benchmarks with 8-60x speed increases. Mention was made of cooperating closely with Rubinius team to make sure that their implementation runs all the Ruby specs, and is truly Ruby and not a fork.

When MagLev is widely available, it basically means that there will be a truly enterprise-class option for writing trading systems, logistics and other large persistent object-heavy systems in Ruby. The shared memory cache (basically a large OODB) holds up to 17PB and has transactional capabilities and automatic synchronization. According to Avi, there is a strong commitment to making sure there are good ways to use Rails on MagLev -- ActiveRecord, which no longer would be truly needed, could still be used (with the exception of find_by_sql, of course).

I'm dying to play with this stuff. Ditching relational databases is a no-brainer for most of the projects that I've worked on in the last 5 years.

May 24, 2008

Keith Olbermann Special Comment Pwns Hillary (must watch)

May 20, 2008

Every generation needs a new revolution

Can anyone truly doubt that what we're witnessing in America is a generational revolution? I'm so excited to be right here, right now at this moment as we dispense with the tired, old politics of the Clintons, McCain and the Washington establishment. Call me an idealist, go ahead, do it! Cause I'm not afraid, and I'm not alone in my idealism. Together, millions of us, we're going to pick America up, shake off the shame and dirt that Bush and Co. have heaped on us in the last eight years, and stretch, towards a brighter, more prosperous future for all of us.

Barack Obama, for the first time in my life, represents a superior candidate, one that fuels my imagination and aspirations. He is a leader, because he doesn't make it about Barack Obama -- he makes it about us. Our dreams. Our power.

May 19, 2008

Truly Awful Rails Code (Send it to me!)

There's tons of material out there telling us how to properly write code (or attempting to anyway), but in an effort to be creatively different, I decided that my Railsconf talk this year will be all about bad Rails code. Entitled "The Worst Rails Code You've Ever Seen...", I'm basing it on both code and practices that I've both done myself, stumbled across as a neutral observer or rescued during the last few years.

After working through a draft, I'm feeling a little short on examples, so I'm reaching out to you for some help. Please email me your heinous Rails coding examples, stuff that you're truly embarrassed about. I'm looking for stuff that has obvious "better ways" or not, the latter being good topics for discussions of how Rails occasionally leads developers down the wrong path.

If you want to be a little bit more anonymous than email permits, you can also post a comment to this entry linking to snippets on Pastie. Not to worry, none of the example code in the talk will be direct copy-paste of actual client code or stuff that you submit. I plan on changing variable names and anonymizing stuff to the best of my ability and for my legal protection.

If I get enough material, I plan to make the content of the talk and submissions into a regular series of posts on this blog. Thanks in advance for your help!

May 07, 2008

It's a Hash-rock't Life For Us!

Tim and Alex

If you're an active blogger (like I am) then I have this question for you: Does your own blog writing activity have some correlation to your amount of blog reading? I think it does for me -- the busier that I get with life and work, the less time I have to read blogs the way I usually have for the last 3-4 years -- 10 to 20 hours a week.

On the other hand, maybe 10 to 20 hours of blog reading per week are excessive for anyone? Actually, based on my relative happiness level I think I can assure you that much blog reading is definitely unhealthy and unproductive.

Thing is, the less I read, the less that I am compelled to write. But it's not for a lack of interesting topics to write about, that's for sure! So here's an effort to break the silence. Besides the exciting U.S. presidential election, which thankfully is now looking quite favorable to Obama, my main concern has been growing my company, Hashrocket.

3-2-1 Grow!

Hashrocket is now about 4 months old. We're shooting for a few million in revenue this year and as of May 1, our headcount is 22 people (or "Rocketeers" in our lingo). Yes, that's a torrid growth rate, like 400% in a few months.

Rein

I'm still interested in hiring one or two more senior Rails people, especially if they're high-profile superstars, but I think we're getting fairly close to the size that we're going to be for the rest of the year. If you're a Rails rockstar who is not necessarily interested in becoming a fulltime consultant for Hashrocket, you might consider taking a working vacation with us -- I regularly hire temporary contractors to help us out with the workload, "hired guns" if you will.

Tim Pope

Among my new hires are a couple of developers from Texas (now relocated to Florida) that are fairly well-known in the Ruby/Rails community: Rein Henrichs and Tim Pope.

Being based across the street from a beautiful beach does have many perks, among them the ease to attract top-notch Rails talent -- Rein came in as a hired-gun to do a 3-2-1 Launch project and never left!

First Coast Impact

We're also hiring top talent locally in the Jacksonville beaches area, also called "First Coast", which happens to be a major suburb of Jacksonville proper with no lack of IT jobs. I'm pretty sure that at our current size we are now one of the major progressive consulting operations in this area.

Our success with local recruiting is due in no small part to our involvement with the RubyJax user group that we helped launch last year. Here's a couple of locals that came aboard recently, whom we met via RubyJax, Les Hill and Wes Gibbs:

Wes and Les Pairing

I still strongly consider pair-programming to be an important aspect of our value proposition and an essential way to ensure productivity, knowledge sharing and continuous peer-mentoring! It impacts our sales process, as we strive to staff projects with pairs of people rather than individuals or odd-numbered size teams.

Just call me Chief Obies

As Hashrocket has expanded, I've taken on more of a real CEO/COO role and I'm down to billing only a couple of hours a week, if any. I'm still sporadically pairing/mentoring/coding as the need arises, but frankly I'm immensely enjoying the new challenges offered by shifting over to doing more business and management kind of things.

For instance, as CEO I'm responsible for heading up our sales efforts and defining the long-term strategy for the company. One of the jobs I recently tackled with my CEO cap on was to write a first draft of the Hashrocket Mission Statement:

Become the world's premier supplier of custom web development services, by partnering with top designers and supplying rewarding, challenging work to talented and disciplined software developers who embody Ruby and Agile philosophies.

Yeah, it's wordy, but gets the point across. You might note with interest (hopefully) that partnering with top designers is a key part of our mission. In my experience, if a client doesn't care enough -- or have enough money -- to enlist excellent design talent in their web project, then it's simply not worth getting involved in that project.

You might also note that there's no word about products. It didn't take me too long to realize that it takes a significant amount of time and investment to build up a world-class product team, including sales, marketing and design people. World-class programming we can do, but the other stuff, not so much. I don't want anything that bears my name or the Hashrocket brand to be less than the best, which means that product plans are on hold, or low-priority for now. We are actively choosing a diminished role in a key aspect of our overall business, in order to exceed expectations at another: an important part of success for a service business.

Day-to-day Operations

When you exceed a certain size, say 5-10 people, handling the day-to-day operations of the company becomes a big and important job. Luckily, I have excellent help. For instance, this is Ben McDonald, our Business Manager (and probably future COO):

Ben

Ben has a programming background, but excels in business. Over the course of the last couple of months I realized that and let him take charge of resource-planning, budgets and cash-flow, as well as assisting me with front-line management stuff. Every Monday morning we meet up for breakfast and go over financial statements and plan the week. I have to tell you that having qualified business help is essential for technically-minded entrepreneurs like myself. Cash-flow, profit/loss, AR aging, budgets and other critical reports don't write themselves!

Speaking of finances, I have to introduce you to the lovely Stephanie Hart, who handles our books and invoicing. She's the person you'll be talking to when you owe Hashrocket some money.

Stephanie

Did I mention she's one of the most photogenic people I know?

Railsconf

Finally, I'm spending a fortune to give the Rocketeers a few days off and flying all of them to Portland for Railsconf, so if you're there you'll get to meet us in person. We're not sponsoring the actual conference or an official party this year, but do find us and join us for drinks -- I'll be picking up tabs.

April 30, 2008

Lazyweb: Mail Relay Integration with Basecamp

I know that Basecamp recently debuted reply-able email notifications for their messages subsystem. The problem is getting discussions to start on Basecamp to begin with. I'd love a mail relay service that offered configurable interaction with Basecamp's messages feature. Despite best efforts to train clients to use Basecamp messaging for important project discussions, many of those vital conversations still end up happening via normal email. After a discussion transpires via email, I'm finding that it's impractical or impossible to find time to transcribe the results back over to Basecamp for future reference.

Thus, the lazyweb request is as follows: A mail relay to handle my hashrocket.com email, which could detect conversations based on from: headers and automatically create messages on Basecamp. A slick control panel to set rules for when to create new messages would be nice. Also nice would a way of detecting how to categorize conversations.

Actually, if you want to go meta on this idea, a configurable mail processing site that let you plugin scriptable behavior would totally rock.

Theoretically, Hashrocket has the chops to build this ourselves, using an SMTP server and the Basecamp API, I just don't see us having time to do so anytime soon.

My Company

My Book Series