Looking For a Partner (or Three)
This is a post from Luke's old blog; it is saved here statically for historical purposes, as of October 2008
I am looking for a cofounder/partner for Reductive Labs. Being at the Web 2.0 Conference just reinforced how important it is to be able to work with someone, and the full list of what I hope to do, which was not shortened any by the conference, makes my solitude that much more difficult.
I am primarily looking for a kick-ass developer or two, because that's the area where I need the most help, but I am also looking for someone with serious web design and web community chops.
The Project
I am writing a distributed, self-updating server automation framework. The three key aspects of the framework are the language, the client/server framework, and the library.
The Language I have created a domain-specific language for configuration management. This means I'm maintaining a Yacc-like grammar (written in Racc, a lexer, and a set of AST objects. It began as a child of cfengine, but it has now diverged dramatically.
The language is a relatively simple declarative language. It only has two (very similar) control structures, and only a few syntactical constructs. As Puppet matures, I expect the language to mature and change with it, but it seems sufficient for now.
Client/Server The client and server communicate over XMLRPC, using SSL certificates for authentication. Puppet ships with a simple certificate authority to handle certificate management.
The server is composed of several modules, such as file serving, configuration serving, and log collection. Each of these modules is decoupled and independent and can be run on separate servers for larger organizations.
Library The library is the heart of Puppet's functionality. It is how all of the work is done. The library is composed of primitive types that map directly to configurable elements on a computer. One of the key goals of Puppet is to be able to draw discrete elements out of otherwise aggregated sets, like drawing individual cron jobs out of a cron tab or individual service configurations out of
inetd.conf, and then manage those elements as separate objects. This removes a lot of the opacity that results from most existing configuration management tools while significantly increasing the flexibility.
I am doing all of my development in Ruby, and I expect to make significant use of Rails in the near future. While experience with these is not required, it'd certainly be great.
The Partner(s)
I am looking for someone who can help to fill some of the gaping holes in the system administration toolchain. I want Puppet to become the spider at the center of a great web of functionality, and I need someone else who is committed to creating software and solving difficult problems. I prefer someone who is more programmer than, say, project manager, because I have too much development to do and not enough bandwidth to do all of it.
Also, as I expect that a significant amount of my future development will be in the form of simple web applications, a great web designer/developer is highly desirable.
I don't have a hard definition of what I'm looking for. My product spans a pretty large range of topics, so experience in any one isn't particularly important. There are a few hard requirements, but they are more related to company's position than the work you would be doing:
Independence I am looking for a partner, not an employee. I want someone with whom I can collaborate closely, but I want someone who will be a self-starter and will be able to create task lists, not just polish them off. Lack of direction from me would never be considered a valid excuse for idleness.
Dedication I need a full partner, someone who can afford to make this his or her full time job, even though it might be a couple more months until we start making money. This requires some level of financial independence (although I could potentially contribute, depending on the situation), but more importantly requires time, time, and more time. This also requires a 6-18 month time commitment.
Desire I am doing this because I want to make great software, not because I want to make money. I want to build software that will revolutionalize computer administration, not just make it easier, and I want to apply all of the great technologies from around the tech world to the problems of maintaining those technologies. I don't plan on ever being satisfied, and you shouldn't either.
Development Skills
The short summary here is that I think a great developer is a great developer, regardless of specific skills or training. No specific skill here is a deciding factor; they just describe what I am doing and thus generally what I am looking for.
Puppet is currently focused on two areas, language design and library development. While experience with language design and parsing would be a huge plus, it's not required, since that area is solid enough for now. That leaves library development: I am writing a cross-platform library capable of modeling and managing every discrete element on any computer, including those that the computer does not treat discretely, like cron jobs (which are aggregated together into a cron tab), users (which are spread across /etc/shadow and /etc/passwd), and many others.
There is a huge amount of work to do to implement all of these elements, and that work is made more difficult by the fact that each element should work on as many platforms as possible. Therefore, abstraction is going to be a big part of the job.
In addition to the current work, I am planning on expanding into how to handle the data produced by Puppet, which will necessarily involve human-digestible output, which almost certainly means Ruby on Rails. I hope to have, oh, many small and essentially independent Rails apps accepting data feeds from Puppet.
Interested parties must be great at testing. I already have about 30% of my code base dedicated to testing, but I know my tests aren't sufficient, and test driven development is a big part of how I code these days.
All of my code is in Ruby, so experience with that would be a plus but not necessary. The more languages the better, in my opinion, but experience with more dynamic or "different" languages like LISP, Smalltalk, and Haskell can only mean good things, in my opinion.
Other Skills
Community, and especially web-based community, is a critical aspect of an successful OSS project, and as already mentioned I expect we'll be developing many small Rails apps in the near future, so web design skills would be a serious positive, along with experience and skills in the area of developing and maintaining a community.
Locale
Locale does not matter that much to me, but I currently live in Nashville, TN, right now, and all things being equal the company is likely to stay headquartered here.
Business Model
I assume any potential parters are interested in what the business model will be, so... It will initially rely on service (training, and consulting to help customers get an initial Puppet install) and support. It should scale well for the first year or two, and I think there are plenty of opportunities for the longer term. Talk to me directly for more detail.
Any interested parties should contact me at luke at reductivelabs.com.