Where Are They Now, The Brubeck Story
Brubeck… Where do I start?
I could write painful love songs about it or I could threaten to put a bullet in its head. Both would feel appropriate, depending on the day of the week.
This project has been a roller coaster ride, to say the least. I’ve shouted about blocking calls inside nonblocking webservers far too many times. I’ve ranted about how ugly callbacks are too many times. And I’ve distracted myself from much bigger goals by building frameworks instead of things.
Don’t get me wrong, I’m grateful for the whole experience. I met a lot of people. I learned a ton. But I want to share my story and hopefully improve the world somehow through my experience.
In 2008, Bear Stearns crashed. I was a VP at Bear when it happened. I was bored, the only one with headphones on in my team, and desperate to find creative people to work with. We had heard about a hedge fund exploding in a huge way during the summer of 2007, so I started studying financial services in detail and quickly couldn’t believe what I was reading. You don’t even have to own this stuff to bet on it?
I am a capitalist, which could be a long debate, but let’s just say my capitalist views look more like what you’d see in Finland than what you see on Wall St. So, I started thinking about what to do next. I had heard about Ruby, but my friend Malcolm had already talked up Python. I figured I should write a Sudoku solver in Ruby to get a feel for it, which lead to me learning about Peter Norvig’s Sudoku solver and that basically sealed the deal. I was gonna learn Python.
My friend Malcolm (@ronald_duncan) had been telling me about Erlang for years and said he was learning Ocaml. I always loved web programming because of how cool it was to give your work to the whole world in an instant, so I looked towards the Django framework, which apparently made building for the web much easier, and got to work.
I had read Paul Graham’s essays since 2003 and watched my dad start companies as a kid. I knew I was going to leave finance and start a company, but I didn’t know what kind.
Fast forward a few years and I had done some CMS work and was interested in working at a startup. I had found Tumblr by then, so I was aware of people like Whitney Mcnamara, but I didn’t really know anyone in startups in NYC. So, I wrote to Whit and pulled the awkward move of asking some random dude on the Internet to meet me for a beer.
I chose Whit because he seemed to blog about punk rock and startups and I basically had nothing to lose, other than looking like the weirdo I already am, so…
We get together and I tell him about some of my experiments with code. I was writing music under the name The Neptune Voltaire, which shouldn’t be taken too seriously, and had found a way to treat tumblr blogs as digital albums, powered by Streampad. Whit told me Dan Kantor, who created Streampad, was building a new company called ex.fm and that they’re based in NYC.
I obviously had to work there.
Using Tornado for exfm was a drag. I already knew too much Erlang to have any respect for the callback nonsense. Further, I hated how a single blocking call could pause the whole box. It was hard to get Tornado to handle some of our more expensive calls.
The reality of this situation is that having help on the backend would’ve been huge, but I was just one guy trying to do everything server on my own. I was trying to balance what I had time to learn and what I had to deliver and, as any dev knows, that balance is really hard.
My hatred of Tornado only grew as time passed. I hated it so much that I considered what it might mean to replace it and feared I didn’t have what it would take to pull it all off, but fucking-a I hated that framework. Anyone who’s met me in the last few years knows this because I was quite vocal about it.
I had been reading about ZeroMQ at the time. I thought the idea of a sockets library that understood network topologies was really neat. I also liked that it didn’t care what language one used as it supported most of the important ones.
I tried gluing ZeroMQ and Tornado together and thought that maybe I could use whatever language I wanted behind this. In short, I had built something a lot like Mongrel2. I called this project Dillinger, after Dillinger Escape Plan. Then Zed announced Mongrel2.
Zed is many things, of which the Internet likes to talk at length, but I connected with his genius. He wrote Mongrel2 in C and got it to a 1.0 release in a month and a half. That’s epic programming. I felt inspired. I had studied gevent and eventlet a little bit and played around with ZeroMQ enough that I though this might be my chance to do something interesting in the open source world. I had tried writing a few other things but none of it had really grabbed much attention from the programming world, for whatever reason, so I wanted to keep trying until something clicked.
The first version of Brubeck was called Mongrevent. I duct taped Eventlet, Mongrel2, and ZeroMQ together enough to respond to web requests. No one cared, but I wasn’t deterred.
Brubeck, the early days
I kept working on Brubeck. I wasn’t sure if I should do a batteries-included kind of thing like Django or if I should go minimal, like Bottle or Flask. I was torn for most of Brubeck’s life, but at the time I thought I’d lean towards being batteries-included. So, I made Schematics a requirment. It had provocative features like an automatic REST API, based on your data models, and it had some database interaction stuff.
I put up Brubeck.io the week before I started my first day at Hacker School and, for some reason, Hacker News picked up on it the day before day 1 at Hacker School.
As everyone on the Internet knows, Hacker School was an amazing experience. I learned a ton from people who wanted to study programming. I learned what made sense, what didn’t make sense, why people liked node.js or rails, and why setting up Brubeck was unnecessarily complex. I wasn’t deterred. I figured I could build all these ideas into the project and just ditch the ideas I wasn’t fond of.
Hacker School’s second batch was a big win for Brubeck. A bunch of people did great work. The definition of “brubeck” became a shared thing and my concerns for what it is or should be started to dissolve. I loved the idea of working in an open source community and loved the idea of building one of these communities even more.
Lots of other things came up along the way. Woz started Hack And Tell and I was determined to wiggle my way into organizing it with him. I had the dumbo tech breakfast. But, most importantly, I had a band coming together.
For me, music always wins. I had played guitar in tons of bands prior to this and a few of these bands involved my good friend Jameson Dempsey. So, when he asked if I wanted to start a punk band with him, it was a no-brainer. But it meant I was going to go off the grid for a while.
Brubeck dev slowed down while I rocked. I have no regrets about this. I learned drums to play in this band and we played some shows. I had high hopes for it, but I understood it when Jameson told me he was moving to DC to begin his law career.
We recorded a record and made some great memories, but Brubeck carries none of that with it.
Around that time I had also met John Maloney, who was president of Tumblr until a month prior. He said he was interested in starting an investment company and heard I should join him. Well fuck… What are you gonna do? Say no? I started studying VC, reading everything I could, and kept ignoring Brubeck.
Lots of things happened while I was doing other things. Zed basically abandoned Mongrel2 in favor of writing books. Some Hacker Schoolers had added WSGI support to Brubeck. People in India were deploying Brubeck frequently, though I’m not sure why it struck a chord with India. I was being pulled into starting BrubeckNYC.
But, what should Brubeck even be? If Mongrel2’s role is diminished, is Brubeck still interesting?
The Twisted community likes to crap on gevent. They sometimes make valid points, but they’re mostly an arrogant component of the Python community that feels their model can solve everything. Try to teach a new programmer how to use concurrency in Python and the ease-of-use that Python usually affords newbies is quickly erased. Gevent, however, makes a lot of sense to new programmers.
But, can I claim Brubeck is easier if someone has to compile mongrel2 and use zeromq? NO WAY.
Let’s also consider Go. I took a class on Go back in 2011 with Justin Lilly. I recognized the similarity between Go and the Gevent experience of Python right away. Concurrency in Go, however, is in the language instead of being a library. Anyone who says concurrency can be a library is being foolish and I have no problem saying so, which also means I am claiming Python itself is being foolish. Python wants to keep things simple and easy and then it shits all over the concurrency world with Twisted, Tornado, gevent, eventlet, and now Tulip, which is still a library even though it’s officially part of Python 3. Go, however, got concurrency much righter by basically implementing the same mechanism that gevent uses in the language itself, though a pedantic debate would bring up important differences. It should be no surprise that the people who feel how I feel are going to Go and the people who disagree are sticking with Python, which means my opposition to their view is increasingly becoming the minority.
Where am I now?
I recently stopped being an investor. John Maloney was a lot of fun to work with and we’ll be friends forever, but after meeting many entrepreneurs I eventually reached a point where I couldn’t quiet the voice in my head that asked, “why aren’t you doing this?”
Why aren’t I building a company? Where has all that time gone?
I originally left financial services with the goal of starting a company and here I am, 4 years later, without one. It was HUGE for me to start one with John, but my need to create wouldn’t be quenched by giving other creators money to chase their dreams. I have to chase mine.
I left VC because I didn’t want to give money to other people to build things, but Brubeck and open source itself is not much different. Instead of cash, you give code, but you’re still helping other people build their things.
Realizing this hit hard.
Brubeck, as of today
I am not sure what Brubeck should be. I am still a big fan of gevent, but I don’t care too much about building servers anymore. I am also more motivated than ever to start a company. I said this last year too, which lead to me starting Terrapin Bale with John.
I plan to focus on iOS in 2014 and I still want to build my first few servers in a framework named after one of my favorite musicians. Brubeck, therefore, has been chopped up into a minimal gevent framework (note: I didn’t say web) which will make it easy for me to focus on building iPhone stuff. My goal is to build a company, not a framework. It is vital I don’t get distracted by the needs of an open source community, so I built a plugin system that allows anyone to tweak Brubeck however they see fit.
Brubeck, then, will be a startup-oriented server framework. Well, I say “Brubeck”, but I think I might even start a new project for it. The point is to build things very fast. Complication will be shunned, as will strong opinions. And, I hope to be writing a post about the company I’m building by the time 2015 rolls around.