An Ideal Development Environment

This is a work in progress. Feel free to leave a comment on it.

First Setup

Getting the Code A one line command to checkout the project they will be working on and all of its “intertwined” applications. If it’s a backend of an API, it should download the client code. If it’s client code, it should download the server.

Install Process All code that is grabbed from the source repository should have a one or few line install process for its dependencies. If the developer wants to install them differently, the process should be transparent enough for them to do it on their own. Pick good defaults.

For instance, on Leopard the install process should use MacPorts but should make sure the developer’s ssh, ssh-agent and ssh-add are the Leopard default ones. If they aren’t, the default ssh-key login code on Leopard isn’t used and the workarounds are awful at best. Think ssh-agent calls in .bash_profile checking whether ~/.ssh/environment existing. God help you decrypt the commands to add multiple keys. Brr. The install process should Do the Right Thing as much as possible, even with the developer tweaking his environment.

Hardware Give them a choice of laptop or desktop. If you’re doing well, allow them to ask for both.

Don’t fuck with a developers keyboard. On a Mac, I can’t have the Fn key anywhere other than the bottom left hand corner. The latest Apple keyboard puts that fucker up in that lonely island of keys at the top and to the right. Hell. No. Since using a laptop keyboard to type on a large screen is a) horrible and b) ridiculous, I can’t use any monitor they might want to get me. If I keep this up, I’ll probably get RSI by my 27th birthday (Hint: I’m just short of 24.) Logging in Everywhere Only use ssh-key logins for all machines. Allow for production deploys by developers but make it a culturally Bad Thing to do. Trust first. Restrict later.

Only be allowed to commit to trunk after vetting from another developer. Build tools to make this easy. ReviewBoard and their own git repositories on a common machine.