Happy Thanksgiving! Here’s what thoughtbot is thankful for this year.
Thank you to our clients America’s Test Kitchen, Awesome Foundation, AxisCampus, Backupify, Blueleaf, CareZone, CoachUp, CountIt, Financial Diligence Networks, ImpulseSave, LevelUp, Lights Up, MAG+, MIT, Movenbank, OwnerAide, Redis to Go, Rock Lobby, SnapPay, Stattleship, Swoop, T1D, TDDium, Thrively, Truonex, Vertical Performance Partners, Yammer, and yBuy, for trusting us to work on your products.
Thank you to all of our workshop alumni, those of you who have bought one of our ebooks or screencasts, and everyone who is a Trajectory customer.
Thank you to Heroku for your awesome support and services hosting our applications.
Thank you to GitHub for hosting all of our open source and private code.
Thank you to CodeClimate for providing insight about the quality of our code.
Thank you to Travis CI for letting us know when our code is working (or broken) on various versions of Ruby.
Thank you to Rubygems.org for hosting software which makes our lives easier.
Thank you to 37signals for Campfire, Basecamp, and Ruby on Rails.
Thank you to Braintree for processing payments for ourselves and our clients.
Thank you to SendGrid for making world-class email delivery a no-brainer, and for your smart, friendly, tireless support.
Thank you to New Relic for making performance monitoring pleasant.
Thank you to Amazon for EC2, EBS, and S3.
Thank you to Tumblr for hosting our blog.
Thank you to Dropbox for hosting large design assets and important files.
Thank you to Google for Gmail, Analytics, Adwords, Hangouts, and search.
Thank you to Gesmer Updegrove for handling our legal needs.
Thank you to AccountingDepartment.com for handling our accounting and bookkeeping.
Thank you to WeWork for our current home in San Francisco.
Thank you to CBRE and Richards Barry Joyce and Partners for helping us find our future home in San Francisco.
Thank you to TMF Group and Newcomers for helping us expand into Stockholm.
Thank you to every person who submits a pull request to our open source projects, even the ones we don’t pull.
Thank you to Linus Torvalds for Git.
Thank you to Matz for Ruby.
Thank you to DHH, the Rails core team, and the Rails community for Rails.
Thank you to Yehuda Katz and Carl Lerche for Bundler.
Thank you to Nick Quaranto, Terence Lee, and Larry Marburger for making the Bundler API faster.
Thank you to John Resig for jQuery.
Thank you to Jonas Nicklas for Capybara, a big step forward in browser simulation and acceptance testing.
Thank you to KDE, Apple, Google, Trolltech, and Nokia for Webkit and QtWebKit, which enabled our capybara-webkit.
Thank you to Bill Joy, Bram Moolenaar, and Tim Pope for making and improving Vim, our beloved text editor.
Thank you to the many Postgres committers for a rock-solid and always-improving database.
Thank you to Hampton Catlin, Nathan Weizenbaum, and Chris Eppstein for Haml and Sass.
Thank you to Max Howell for making it simple to install dependencies like C compilers, Postgres, Ack, Exuberant Ctags, Tmux, ImageMagick, Redis, and more with Homebrew.
Thank you to Wayne E. Seguin, Michal Papis, and 37signals for making it easy to manage Ruby versions with RVM and rbenv.
Thank you Nicholas Marriott for making it easier to manage various terminals with Tmux.
Thank you to Dennis Ritchie for software.
Thank you to Alan Kay for object-oriented programming.
Thank you to Martin Fowler for refactoring.
Thank you to the Gang of Four for design patterns.
Thank you to Uncle Bob Martin for clean code.
Thank you to Gerard Meszaros for xUnit testing patterns.
Thank you to Gary Bernhardt for sharing performance-enhancing Unix, vim, testing, and OOP techniques on “Destroy All Software.”
Thank you to Avdi Grimm for “Objects on Rails” and its associated mailing list.
Thank you to Brian Cardarella, Patrick Robertson, and all of the Boston Ruby Group for a fantastic local Ruby community with great talks and a calendar full of hackfests.
Thank you to Brightcove, ZenDesk, and ApartmentList for hosting fun Ruby and vim meetups in Boston and San Francisco.
Thank you Wrapp for hosting meetups in Stockholm.
Thank you to Aloha Ruby, Burlington Ruby, Eurucamp, Frozen Rails, Lone Star Ruby Conf, MagicRuby, NordicRuby, Railsberry, Rocky Mountain Ruby, RubyConf, Ruby Nation, Rupy, and Scottish RubyConf for allowing us to share our passion for programming with others in person.
And thank you, too, for reading, commenting, and making us think.
On November 13th, we announced the contest – a client story submission adventure with a Pro ActiveRecord: Databases with Ruby and Rails book giveaway as the prize.
Thanks to Rick Olson for posting this on the rails blog and to Peter Cooper for posting on ruby inside (Hey look, he even started his own contest a few days ago!)- and thanks to everyone who sent in a ridiculous story, of course!
We received a decent number of entries, and – using a pretty advanced tallying mechanism which we implemented in C++ for speed – thoughtbot voted internally for the three best. Here they are…
I think we all enjoyed the contradictory goals in this winning entry – especially considering the client was the Italian government!…
Request ~ We have to expose these data by law, but we don’t want to do so (because they think that transparency may be “risky”). Please publish them in a non human-readable and non machine-readable format, but the solution must validate according to w3c specs and it must be AAA accessible”.
Result ~ “WTF?”?
Ah, the sales department. The bane of many a big-organization-developer’s existence…
Request ~ I once worked for a company where the salesperson sold to a very large retail client of ours that we had the ability to genderize Asian names that resided in Canada. To this day, I can remember when that came to light, my partner and I were reading the SOW separately and when I came across that gem, I had to read it 4 or 5 times in shock of such a concept. A few minutes later my partner came into my office with SOW in hand and said, “Craig there is something in this that I don’t think we can do”, “I’m betting it has something to do with Asia, Canada and genderization”. Several conversations with the salesperson led to other conversations because he swore that such technology already existed within our company which wasn’t locatable before our kick-off meeting. Needless to say, the salesperson didn’t want to lose face with this major client so I broke the news that such a function didn’t exist and that since a name from China could have a separate gender than a name from Japan, there was no way we could systematically do it with the data we had available.
Result ~ The senior lead from the Company had a big grin and said “Yea, I thought it was pretty incredible that you guys could do that, I was planning on finding out how you did it because I wasn’t sure it could be done” The rest of the project was completed with great success, the salesperson was never allowed to make another commitment to a client with a technical sign off again and I eventually left the company for greener pastures.
Clients and their proprietary algorithms are also quite the pasttime…
Request ~ In designing a doggy dating service, the client wanted to reproduce the eHarmony algorithm for use with dogs. She had developed this convoluted algorithm for determining the compatibility between dogs based on their breeds and their personalities.
Result ~ It took us quite some time to implement this and I’ll never forget this project.
Thanks again to everyone for your submissions. Winners will be kept anonymous to protect their clients – but will be contacted soon to confirm shipping details for the books.