This post is from the XebiaLabs blog and has not been updated since the original publish date.
Ergonomics and Deployment Frameworks
Guest Post: Bob Aiello, Author of Configuration Management Best Practices, Practical Methods that Work in the Real World Ergonomics is the study of making work environments more efficient, usually for the purpose of avoiding injuries and improving productivity. Another important aspect of ergonomics is avoiding mistakes. When looking at the controls in the cockpit of a plane, the untrained observer can easily see that engineers have designed the controls to greatly minimize the possibility of a human error. So it is puzzling to observe that some software engineers create confusing, incomplete and contradictory installation instructions that often lead to costly mistakes and rework. Technology professionals pride themselves on being smart and creative. I can recall many conversations where my colleagues tried to impress each other with their ability to handle complex concepts that others could not possibly follow. I am not like that. I prefer to create processes and software automation that ensures that a junior software engineer could implement the release even at 2 am (half sleepy) after drinking a couple of beers. Building in such user-friendliness requires some creative software ergonomics. Some computer languages are rather confusing. Many Perl programmers make use of complex (powerful) regular expressions that can manipulate and process large amounts of data. But then again, trying to read (and understand) some Perl regular expressions is almost impossible. I am not attacking (or against the use of) Perl, although I will admit my own bias in favor of Ruby as a scripting language. I am not alone in this regard as many deployment engineers utilize, and even some deployment frameworks are being written in, Ruby. A deployment framework is a set of tools and processes designed to help manage the entire deployment process. This often includes taking the existing deployment scripts and placing them into the deployment frameworks, usually enjoying the features of a dashboard showing the status of each step of the release. This is where deployment frameworks and ergonomics can share some synergy. Build, package and deployment automation should be created with a focus on ergonomics. This means that your procedures, including scripts, should be easy to use and resistant to the errors frequently caused during human interaction. That sounds simple, but how specifically does one implement ergonomics in a script? I write my scripts to including testing (often called verification and validation) into each step. This approach can help the operator verify that the correct results are being achieved. Now I might just loose some of my gunslinger reputation by making my scripts easy to use, but this focus on clarity also means that we are able to release code more often and be completely error-free-. Another tip is to allow the available tools to do the work for you. Some Deployment frameworks have the built in intelligence to work with application servers (e.g. WebSphere, WebLogic, Jboss and Tomcat). A few even sport advanced features such as algorithmic based release automation. Do remember that this is an iterative process and may take you a few release cycles before your scripts operate without any required human intervention. In fact, in the beginning you should have specific places for your operator to pause, read the messages on the screen and then press enter when they are confident that the script is working correctly. Using the concepts learned from ergonomics will help you implement deployment automation that is fast, reliable and completely error-free!