Consulting Services

Welcome to Bob Aiello's CM Best Practices Website!

Please register for our newsletter and event announcements!

Hi, this is the website to support my book on Configuration Management Best Practices. We also provideconsulting servicesto help you implement all of the CM Best Practices described in our book.

Writing any technology book is very challenging because the landscape changes even before the book is off the printer. This website will help elaborate on the key concepts in the book. I hope to hear from you soon!

You can also contactmedirectly to discuss how our consulting services can help you implement Configuration Management Best Practices or if you would like to join our network of tools and process agnostic CM gurus.

Writing for me is a team sport, so please link with me on linkedin and do drop me a line (again my email address is posted on linkedin) to let me know what you liked most about my book and where I can improve to help you successfully implement Configuration Management Best Practices!

I am glad to make arrangements to give you a signed copy from my own supply at a cost of $30 a book plus postage. I am also available for training and consulting services (more on that soon).

Ergonomics of Software Deployments

There have been many high profile software glitches impacting thousands of users and causing considerable impact. Software reliability has become a major concern along with the prevention of mistakes that frequently result in serious problems. Leslie Sachs has been on a roll discussing many of the personality issues that result in problems and dysfunctional organizations

But I think that we need to refocus our efforts on the ergonomics of software development. Many other industries put a great deal of effort into engineering systems that are built to avoid mistakes. Unfortunately, software engineering deployment systems rarely put the focus on avoiding mistakes.as the amazing IEEE Sevocab online dictionary explains ergonomics is

"(1) the scientific discipline concerned with the understanding of the interactions among human and other elements of a system (ISO/IEC TR 19759:2005 Software Engineering -- Guide to the Software Engineering Body of Knowledge (SWEBOK), 12) (2) the profession that applies theory, principles, data and methods to design in order to optimize human well-being and overall system performance (ISO/IEC TR 19759:2005 Software Engineering -- Guide to the Software Engineering Body of Knowledge (SWEBOK), 12)"

Ergonomics helps us design interfaces that avoid mistakes, improve quality (and productivity). How are your interfaces designed? Can I follow your deployment scripts without making a mistake? In CM Best Practices, we design application build, package and deployment scripts that are reliable and help prevent mistakes. One key aspect of this approach is testing the interface itself. Make sure that you treat building your deployment automation as an application development effort and follow all of the same industry best practices that we advocate in developing complex systems!

Agile ALM

With the new year upon us, it is good to reflect upon our accomplishments, mistakes made and, of course, the obstacles that are ahead. This is a very challenging time for technology professionals. There are many factors impacting success along with demands for talent, skills and commitment to "raising the bar" to achieve our desired goals. Developing software and systems has become a remarkably complex task with many factors impacting the success of the development effort. {quote}Teams may be located in one specific “war” room or distributed across the globe, working at different hours of the day with varying languages, cultures and expectations for how they will operate on a daily basis.{/quote} The competition for specialized technical resources motivates many organizations to allow flexible work arrangements including telecommuting along with choosing office locations convenient to attract local candidates. Technology professionals choose between the demands of high paying (and often stressful) opportunities and trying to maintain a work-life balance. All the while learning new development frameworks and adapting legacy systems to meet the need for continued growth and flexibility. The internet has clearly become the backbone of commerce and companies are expected to continuously align themselves with growing web capabilities in order to achieve and maintain success.

Dealing Successfully with Complexity

It is clear that successful organizations need to support complex technologies, most often with a significant web presence. Even companies going out of business are expected to have a functioning web presence capable of handling the peek transaction requirements of customers and other users. In practice, these complex development efforts necessitate effective processes and methodologies to meet the demands of today and those that will surface in the future.

Agile CM and ALM

Agile Configuration Management (CM) and, by extension, Agile Application Lifecycle Management (ALM) have become two of the most popular software development methodologies in use today. Agile has resulted in indisputable successes boasting improved productivity and quality.My career has always involved Software Process Improvement with a particular focus on Configuration Management for over twenty five years. As a practitioner, I am completely tools and process agnostic. I have seen projects that successfully employed Agile methods and other efforts that thrived on an Iterative Waterfall approach. Still most organizations need a reliable and repeatable way to manage work, allowing full traceability and clear, complete communication. Years ago, we looked to the Software Development Lifecycle (SDLC) to guide us, although process documentation often sat on the shelf along with the outdated requirements specification from the latest software or systems development effort.Many companies struggled with improving programmer productivity and some tried to use the Software Engineering Institute’s (SEI) Capability Maturity Model (CMM). These efforts often had limited success, and even those that succeeded had limited return on their investment due to the excessive cost and effort involved. The SEI chartered a series of Software Process Improvement Networks (SPINs) throughout the United States which provided speakers and opportunities to meet with other professionals involved with software process improvement. I had the pleasure of serving for many years on the steering committee of the one of the SPINs located in a major city. Today, most of the SPIN presentations have a focus on Agile practices and most of the attendees are interested in establishing SCRUMs, iterative development and Agile testing. Agile has certainly had a major impact on software process improvement. Application Lifecycle Management (ALM) has also had a major impact upon how software development is conducted, particularly in large scale distributed environments.

Application Lifecycle Management

Application Lifecycle Management (ALM) developed from the early days of process improvement to provide a comprehensive software development methodology that provides guidance from requirements gathering to design, development all the way through to application deployment. In practice, ALM takes a wide focus with many organizations establishing an ALM to manage their entire software and systems delivery effort. Some organizations implement ALM in a way that would not be considered Agile using a Waterfall model that has a heavy focus on completing the tasks in each phase before moving on to the next. Configuration Management, consisting of source code management, build engineering, environment configuration, change control, release management and deployment have been a key focus of ALM for some time now. Another key focus has been applying Agile principles to support and improve Configuration Management functions.

Agile CM in an ALM world

Agile Configuration Management provides support for effective iterative development including fast builds, continuous integration, and test driven development (TDD) that is essential for successful Agile development. In a demanding fast-paced software or systems development effort, Agile CM can make the difference between success and failure. Establishing effective Agile CM and ALM practices can help you achieve success in the year and beyond.

Your Turn

There is more to the story of course and please drop me a line and let me know what you think of Agile ALM and how it may or may not impact your technology development efforts!

Creating Reliable Trading Systems

There have been a number of recent incidents involving systems glitches at major trading firms including the Chicago Board of Options Exchange (CBOE) and before that at Knight Capital Group. The incident at Knight resulted in a $440 million dollar loss and Knight Capital has recently finalized their merger with Getco. This is a polite way to note that a major company essential ceased to exist as an independant organization because of what has been reported to be a configuration management error. The truth is that there never should an outage of any major trading system. We have the techniques to prevent these mistakes and trading firms certainly have the resources to be able to afford software engineers with the skillset required to maintain reliable systems. So then why do we continue to hear about these problems on an ongoing basis?

I believe that we have failed to approach our work with what Edwards Deming called a constancy of purpose. This means that we need to focus on the long term plan and, as Deming also pointed out. we need to build quality in from the beginning. The first essential requirement is to have excellent source code management procedures. In my opinion, it is unacceptable that so many trading firms lack support and training for world class version control systems that include workflow automation (to help with traceability). Similarly, companies need to have support for automated application build, package and deployment including continuous (or at least frequent) integation and continuous delivery. DevOps has much to offer in terms of industry strength best practices and ultimately organizations needs to commit to creating the secure trusted base.

Creating reliable trading systems is very doable and also very cost effective. I would like to network with other technology professionals who are interested in understanding and promoting the exact details of how to create secure and reliable trading systems. It is no suprise that many of these same techniques are also essential for creating safety systems including life support systems and essential utilities such as Nuclear Power plants.

We can do this. let's work together to make this happen!

Agile Process Maturity

Agile process maturity can be understood in many different ways. The most obvious measure of agile process maturity could be in terms of the degree to which the practices adhere to the Agile Manifesto and the Agile Principles[1]. In some ways this could be understood almost in terms of a "purity" measure. In order for this measure to be valid we need to operationalize these principles. So how Agile are you?

Customer Focus

Do you make satisfying the customer through early and continuous delivery of valuable software your highest priority? Does your Agile ALM process harness change for the customer's competitive advantage and welcome changing requirements, even late in development? Your delivery cycle should favor shorter iterations, with delivering working software frequently, from a couple of weeks to a couple of months. Developers and business people should be working together daily throughout the project. Projects are built around motivated individuals and they are provided the environment and support they need and trusted to get the job done. Information is best conveyed face-to-face and working software is the primary measure of progress.

{quote}The Agile ALM should help all of the stakeholders to maintain a constant pace indefinitely in what is known as sustainable development.{/quote} There is also continuous attention to technical excellence and good design, including a focus on simplicity - the art of maximizing the amount of work not done. Self-organizing teams produce the best architectures, requirements, and designs. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. These principles have formed the basis of Agile development for many years now. In order to understand them, you need to consider how to operationalize and implement these principles in practice. Then we will see how they fit into and, of course, facilitate the Agile ALM.

Applying the Principles

Implementing the Agile ALM requires that you understand the Agile values and principles and, more importantly, understand how to utilize them in practical terms. Technology projects require a deep understanding of exactly what the system should do and also how it should work. These are important details that are typically expressed in terms of requirements. There are many different types of requirements from system level response time to functional usage including navigation. Many professionals use Epics[2] and Stories[3] to describe requirements in high-level terms. Writing and maintaining requirements document is often less than fruitful with most requirements document out of date even before they have been approved by the user. Agile takes a pragmatic approach to requirements management that focuses on working software instead of writing requirements documents that are often of limited value.

One very effective way to manage requirements is to supplement them with well written test cases and test scripts. Test cases often contain exactly the same information that you might expect in a requirements document.

Recognition by the Agile Community

Another indication of agile process maturity would be acceptance by the agile community and that can be quite a challenge to achieve.

I will be writing more about Agile process maturity in the near future, but I would like to get your input too. How would you define and measure Agile process maturity?