How did you get into development?
Like most people, I got started at a young age. We were pretty poor at the time, so I didn’t have a computer. But, I did have a Q-Basic book so whenever I got a chance to program in basic, I would. That was my first intro to programming and computers. That, and the Apple II computers at the library, but those were mostly dedicated to playing the Oregon trail. From there I just got started by reading manuals and experimenting. Trying different Linux distributions in the 90’s when we did have a home computer.
I majored in Computer Science and Religious Studies at Monmouth College in Illinois. My senior thesis was comparing J2EE to .NET. Java was really nice because it had more open source libraries for sure, but tooling around .NET was superior. After I graduated, I started my career in 2005 doing .NET on a small development team for a large company.
There is a point in programming where you reach the end of what you can learn in a language so you need to jump over to something else. Also, as a programmer, we just like to keep solving problems. Sometimes we create them for ourselves, just so we have something to solve. I decided that I had done as much learning as I could with C# and wanted to learn something new so I picked up Node.js.
Tell me about hapi
Eran Hammer is the creator of hapi. When I joined his team, before the 1.0 release, hapi didn’t have a lot of tests, and hadn’t really been used to deploy anything into production.
After I joined Walmart labs, I worked with Eran to build hapi. We were building it for our team first and wanted to make it really robust to meet all the needs we had. We wanted to make sure it was stable, safe to extend, and easy for teams to use.
One thing we did early was to make the routing table deterministic. That separated us from other frameworks. We also didn’t start adding properties to the core Node req/res objects. We had our own abstraction. No monkey patching. We created our own routing logic and provided extensibility hooks instead of just using middleware, which is what others were using.
How did hapi come about?
A lot of it was because the only real solutions at the time were Express or restify, and neither were going to work for us. Everything was using the middleware pattern where the order you add things really mattered. That wasn’t going to work with a lot of people adding business logic to a server.
We had a lot of Java developers switching to Node, and it was new to them. We wanted to make that switch as painless as possible. The solution needed to make sure routes wouldn’t conflict. We needed an easy way to determine conflicts and it needed to be plugin based so it was easy to extend.
Do you still work on hapi?
I’m still actively maintaining some of the core modules (“lab” and “wreck”), and many more companies are using hapi now.
After the 1.0 release, little by little, we started handing over the reigns to the community. We licensed hapi under BSD to make it very easy to contribute to. It’s nice that we split things out. It was simple to entrust the community since we were already using a modular architecture.
What did you do after you left Walmart?
Is there anything fun or exciting that you’re currently working on?
Joyent is a company that values open source more than any other company that I’ve been at. Everything is 100% open source. Right now we’re doing a lot of experimentation in the realm of containers. I’ve been working a lot on containerpilot, to make it easier to use in Node. It tackles the issue of moving a Docker container in a particular cloud vendor to another.
For the last year I’ve been working on ContainerPilot in the context of Node, as well as working on other various projects at Joyent. The power of ContainerPilot is that it enables you to transfer from on premise to any cloud. Anything that supports Docker.
What you should really get out of Docker is portability. That’s something people overlook. They just start coupling their applications to one cloud provider and it makes it hard to move. If you architect your applications to be less coupled to a particular infrastructure it allows developers to actually test things they deploy in production, locally.
What is a piece of advice or wisdom that you like to share with others?
The most common answer would be to contribute to open source. Beyond that, fork a product that’s open source and redistribute it. As developers we really struggle with taking someone else’s project, improving it, and redistributing it. If a maintainer doesn’t take a PR, we should just take it and redistribute it. That gets you practice with maintenance.