I started reading Tony Bourdain’s memoir, Kitchen Confidential this weekend, and it’s great. It’s been on my list since it was published in 2000, and I’ve only now gotten around to it. The book gained much notoriety for its warnings to diners about what not to order in restaurants (don’t order fish on Monday and avoid seafood at Sunday brunch being the the two most well known), but what interests me most is the insider look at what being a working chef is like.
In the book, he describes the concept of mise en place, which is French for “everything in its place” (more or less). What a cook’s workstation is “mise en place,” then all of his tools, condiments, and seasonings are well organized for use, and he has all the ingredients he needs for the dishes he’s tasked with making close at hand. It’s hard for a chef to work efficiently unless a state of mise en place has been achieved and can be maintained throughout his shift.
That led me to think about my own profession, programming. As I’ve matured as a programmer, my obsession with mise en place has increased. These days, I just can’t start on a project unless all of the files are properly organized, I have version control set up, and I have build scripts and so forth. That said, on my current proejct, I have all sorts of areas where my “miz” is being violated, and I was just this morning thinking about how much time it’s costing me.
My first problem is that my build scripts create WAR files that don’t deploy properly under Tomcat. For some reason, Tomcat can’t extract the files, so I have to create the directory myself and then unzip the files manually. That takes a little bite of time every time I want to update the application. Ideally, the build scripts would deploy the WAR files themselves, but they don’t do that yet. The second problem is that I’m not handling database configuration very gracefully. It’s in a configuration file that’s packaged inside the application, so whenever I move the application from development to staging to production, I have to do some manual hackery to make it work with the proper database. That also makes it more painful to deploy my applications.
There are some other little problems that make things a bit more difficult here and there that I need to address as well, and when you put it all together, it’s amazing what kind of impact it has on your overall productivity. When you can’t deploy your application quickly and easily, you’re less likely to update it with small fixes. It’s just too much of a pain. And when you’re in the Java world (as opposed to PHP, for example), small problems with your environment can be a big deal. The preparation to get things cooking is a lot more complex than just making sure a file is in the right directory, and so problems of organization and infrastructure are magnified. I urge you to make sure you keep your mise en place in shape.