What do new hires at a software development shop typically do on the first day? They probably read through documentation, checkout some code, and maybe make some commits on a project. At some of the more progressive companies, new employees might even get to push changes to a live production server. At Highgroove, in my first week, I learned that we follow the philosophy of “Bias Towards Action” and actually “Deploy Code on the First Day.” It’s simply the best way to bring people up to speed and make sure they are comfortable deploying and delivering working software.
Think of it as a controlled experiment. If the new hire (me) deploys a new feature and then sees the staging (or production) server “break” first hand, they gain valuable insight into how to fix problems in the future. With deployments happening continuously (automatically as soon as code is pushed), rather than a big-bang approach planned at 6:00 pm on a Friday when everyone might not be immediately available, things work (or break) fast. It is always easier to do quick fixes and deliver value incrementally. This “learning by doing” is the kind of knowledge that is extremely important but hard to learn from documentation or examples. No amount of training or simulations can compare to the real deal of deploying live code to really get a sense of how to handle a “crisis modeâ€ situation.
Developer tools like git and chef along with writing tests make this whole process even easier. If a change breaks a server, just revert the commit and redeploy. Then write a test so the issue never comes up again. Problem solved. But there’s also a more subtle advantage to having such a quick and easy process for deploying. Developers have a different attitude towards pushing new code. Without an automated deployment process, developers might feel a little uneasy when they throw the new changes on the production server, since one small mistake could cause hours of troubleshooting and downtime. With an automated deployment setup, new code can be pushed out with little concern about breaking anything.
After only being here for a week, it’s already hard for me to even think about going back to not using tools like this. What tools are you using to allow even the new guy to push code to production on his first day?