Two years ago this week, I started working at 37signals. I couldn’t make a web app to find my way out of a paper bag.
When I started working here, my technical skills were in tools like Excel, R, and Matlab, and I could muddle my way through SQL queries. I had the basic technical skills that are needed to do analytics for a company like 37signals: just enough to acquire, clean, and analyze data from a variety of common sources.
At the time I started here, I knew what Ruby and Rails were, but had absolutely no experience with them – I couldn’t tell Ruby from Python or Fortran. I’d never heard of git, Capistrano, Redis, or Chef, and even once I figured out what they were I didn’t think I’d ever use them – those were the tools of “makers”, and I wasn’t a maker, I was an analyst.
I was wrong.
Six or seven weeks after I started, I made my first git commit: “Add Clicky tracking to Basecamp marketing site”. All I’d done was figure out how to clone the marketing site repository, search for the existing Google Analytics snippet, and copy-paste the Clicky tracking snippet.
In March or April of last year I built my first “web app” for 37signals. It was a single page dashboard on our support caseload, and since I didn’t know any Ruby or Rails, I did it with R.
When one of our system administrators mentioned that he had some ideas for integrating various third party data sources into a single dashboard, we started working on a Rails dashboard that we use to this day. Twenty months and more than 3,000 commits later, more than half of the company accesses “dash” every day and it has its own iOS app. I’ve written client and server-side instrumentation frameworks, released an open source timeseries data storage system, and deployed a Hadoop cluster with Chef.
By no means am I an especially good developer: my code isn’t always idiomatic, and I still get someone to review anything of substance in our customer facing applications. Still, I’m able to do things I never would have dreamed of when I left management consulting just over two years ago.
No romance here
I learned to work with these “maker” tools, but not because I had the intrinsic, almost romantic, desire to create things that drives many people. Rather, two more pedestrian concerns led me down this path:
- It was faster. I work with some great developers, but they’re busy – we have millions of users to support and new products and features constantly under development. Rather than waiting for a developer to have time to help me, I could just do it myself. Business intelligence is about much more than statistics or machine learning – there’s a full “stack” involved from data acquisition to storage to reporting to testing. If I couldn’t do that, someone else would have to, and being part of a small company places a constraint on how much can be devoted to things that aren’t directly customer facing.
- Creation is the language that’s spoken most at 37signals, and people here engage with something that you’ve made differently than something that you’ve written or presented. Before I could actually make things, I felt like an outsider – who was I to provide advice to these people who actually made things? I suspect every former consultant experiences this “outsider” feeling at some point; for me, learning to make things was the critical step to feeling like I was really a part of 37signals.
It all starts with a step
I didn’t learn to make things because someone told me to or it was a job requirement. I could have done a credible job of what I was hired to do without ever delving into reporting or instrumentation myself, but I decided that I could do a better job and help the company more by learning to do some new things that I’d never imagined doing.
Learning to make things doesn’t have to be a big or intimidating undertaking – it all starts with a step. In my case that first step was adding something I copy and pasted from a vendor’s website. What will your first step be?
Jamie
on 17 Dec 12Noah inspired the emoji found on the Emoji Cheat Sheet.
Hugo
on 17 Dec 12Great post, Noah!
I’m on a similar journey and would greatly appreciate any tips on how to go about ramping up on the simultaneous elements required to create using the full stack.
I’m making decent progress learning Python but I’m struggling on much more basic pieces of the puzzle like server admin (e.g. installing libraries, etc).
Thanks for the inspiring post. Glad to know I’m not the only one that is or has taken this very rewarding journey.
Uzo
on 17 Dec 12Thanks for sharing, Noah.
I’ve always felt intrinsically (but lacked concrete proof) that it’s better to work with seemingly people who are willing to stray outside their defined role and learn new things than pros who doggedly stick to only what they know. Your story gives an external voice to that feeling and it’s good to hear 37s hiring practices accommodate for that sort of on-the-job growth where the result your efforts aren’t just appreciated: its baked into the ecosystem of the company to the point where they have a dedicated app.
Kudos for growing beyond your job title, dude.
Steven
on 17 Dec 12Interesting article indeed. I am sort of in your situation as well (or was). I spent a lot of time crunching data while the app developers were making actual software. I scripted a lot of stuff and used Mathematica and NumPy and what not for some mathematical work. My knowledge of Python eventually got me into creating a little site built in Django for what I was doing. I think you’re right – it doesn’t matter how you start creating just to start doing it. Not to be on a soapbox but I think this is where CS degrees fall short. My CS education was great for math but not for creating, that comes from somewhere totally different. I too enjoy (and have) a :neckbeard:
Michael
on 17 Dec 12Thanks for writing this. I think the web app is, in some circles, the new consulting report. It’s a truly “living” document that solves the problem it identifies if it’s used.
Walter
on 17 Dec 12This article was interesting. Good. My comment is in reference to one of the comments. If the best a CS program did was teach Mathematica, then I say it was a very flawed CS program and/or nothing more than a glorified math program.
A good CS program will teach you HOW TO MAKE Mathematica, Python, Django, or any other software that you could imagine. I’d be interested to know what school was. It obviously failed.
John
on 17 Dec 12This is great stuff Noah. I’ve also seen Jason Fried’s posts about taking Rails programming classes and him taking an interest in that. Then you got these old interviews from Steve Jobs talking about how programming should be a liberal art, and that “everybody should learn how to program because it teaches you how to think.” It’s totally true. As an aside, and in my opinion, the main idea you take away from programming is the same thing you take away from an LSD trip (which Jobs was also fond of). It’s this idea of “orders of magnitude” and how the world works that way. You also learn that extent of the human classification system, how humans categorize things, and how that’s often times very arbitrary. You create a certain reality out of thin air. Programmers, by the nature of the work they do, can program themselves and when they learn to do that, they get orders of magnitude increases in productivity. DHH is a super good example of that. He created Rails and got all sorts of orders of magnitude out of it-and so did we-that represents another “orders of magnitude.” Get it?
T Rowe
on 17 Dec 12Thanks for sharing this Noah. :saxophone:
Tony R.
on 17 Dec 12And (most importantly) improving written communication it would seem.
Anonymous Coward
on 17 Dec 12nice post – what is “R”?
Matt Griffin
on 17 Dec 12Great article Noah. You’ve captured exactly how I felt in my early days at Canonical as a product manager. Thankfully, I had fantastic colleagues that were great teachers and helped me to grow my own toolkit for making things.
Brian
on 17 Dec 12Nice post. Love that you point out that 37Signals has a “maker” culture.
I’ve built similar apps as a way to get my work done quickly. I’ve done that in a number of organizations and found very different reactions based on the culture of the organization. In “maker” cultures it’s worked great, the apps have helped me get my work done and I’ve often shared the app with others that have similar problems to solve. In more bureaucratic cultures, I’ve found the experience to be different. I’ve ended up (or seen others end up) get “stuck” with the app. Forced to support it beyond its original intention or purpose. A “no good deed goes unpunished” situation. The result: the “makers” leave the organization or stop just making.
Sounds like you guys do it right.
Robbie
on 18 Dec 12Noah, love the post. It’s always good to read up on stories of individuals who have passion and motivation and put those qualities to work and make things happen for themselves. A well deserved hat tip to you my friend.
I’ve had a parallel type work experience myself. I found my way into a low level role at a very reputable internet marketing agency. I didn’t have any formal education in the internet marketing realm, but because very passionate upon entering the scene after college. Within 2 years I learned the ropes and was one of the main campaign consultants on the front lines with our clients on a day-to-day basis, helping them make more money online!
Eventually I found myself here, at Miles Design heading up their Inbound Marketing department.
Keep it up. No one can stop us.
Cam Collins
on 18 Dec 12Excellent post Noah. As the CEO of my company and a person who hasn’t “touched code” in many years I had an experience very similar to yours. Getting away from the technology had a negative impact on my ability to lead. I became too distant from the core value that we provide our customers.
I started with web development on our marketing sites and then moved to mobile app development. I am certainly not the lead on the these projects as we have a strong team building products. But I was able to build something that our customers used thus providing me with the validated learning I needed to iterate and improve. Based on this process I made the decision to move our mobile website app to native deployment.
Michelle Wallis
on 18 Dec 12Thanks for sharing Noah, really enjoyed reading. It really does help when everyone gets their hands dirty so to speak, good on you for jumping in :)
Emile Bons
on 19 Dec 12Thanks for sharing Noah. This really felt like the same story like the story I’ve been going through. Once I finished my Computer Science bachelor, I’d never thought that I’d like developing software. I started a Master in Information Management, finished that one, started another Master in Strategic Management, finished it as well. And here I am; one year after graduating and finished our own web application that feels a bit of both worlds: fits a business need and has a web application philosophy. The best of the whole story: the whole backend is self-developed; and it was lovely to do!
Kelvin
on 19 Dec 12@Noah – Care to share a short roadmap on how you got there? I know for me it will be a great motivator as I get frustrated with chipping away at multiple areas and never quite breaking through.
TR
on 19 Dec 12+1 @Kelvin.
When you’re in it it seems like a mess, but looking back you can say “Oh thats why that happened that way.” Hearing someone else’s story about how the dots connected is strong motivator.
Pari
on 20 Dec 12So, you are telling that you had no prior programming exp at all? Would love to know your timeline. Really.
This discussion is closed.