Software Configuration Management for Cloud, Mobile, and Database Development


Supporting cloud, mobile, and database development sounds like a remarkably technical endeavor. In practice, personality issues between team members can impact just how effectively you handle these complex technical efforts. You need to be able to understand these challenges and how the personality of the members of your team will impact their individual performances as well as the performance of the entire team. The good news is that there is a lot you can do to ensure success. Here's how to get started.

Taming Complexity
Cloud, mobile, and database development have some unique characteristics. When Bob Aiello and I worked on the source code management chapter of Configuration Management Best Practices [1], specifying practices to handle mainline, bugfixes, and other variants seemed to be fairly straightforward. But version control in the cloud, on your Android, and also databases adds some unique challenges that are not always so straightforward to tame. For example, technology experts are highly specialized and may not have a firm grasp on all of the technical details requirement to produce a complete complex system. Much of this complexity revolves around managing ambiguity.

Dealing with Ambiguity
The cloud brings with it the risk of having to manage resources, over which you have little actual control. There is ample ambiguity in having to rely upon the service provided by a vendor that may or may not be in alignment with your own goals and priorities. Mobile devices have their own set of requirements and industry standards that are rapidly emerging as smart phones become as ubiquitous as less dynamic cell phones.

Trying to version control your database also carries its own set of complexities. For example, handling SQL scripts and stored procedures to managing low DBA level performance tuning takes creative and flexible strategies. Although, there are emerging tools in this space, there also remain considerable challenges. Some people are better at accepting and dealing with ambiguity than others. One effective way to tame complexity is to reduce it into simple constructs that are easier to handle.

Reducing Cognitive Complexity
Taking complex problems and reducing them into one or more, less complicated challenges, reduces work and eliminates many protential sources of error. Many technology professionals can tackle complex tasks but are very challenged when it comes to reducing cognitive complexity. When you feel challenged and uncertain as to how to handle complexity, start by defining the requirements for the situation at hand. Many agile practices are very effective at managing requirements and provide a good starting point for gaining a clear understanding of the system that you need to develop.

Requirements Management
Requirements may be specified in big documents with formal requirements specifications. Many agile enthusiasts prefer to define requirements in lighter terms using what are called epics and stories. [2] Still others use test-driven development to manage and reduce cognitive complexity. [3] From a personality perspective, a critical determinant is whether you are an innovative leader or will be mired and rendered immobile by the challenge of handling platforms that may be a little bit out of the ordinary. Innovative leaders help the team tackle tough challenges and set the direction for the entire development effort. This can be especially important when there is a lack of control.

Teamwork When There Is a Lack of Control
You will find that some members of your team are better than others at demonstrating leadership in the face of complexity. Make sure that you balance your teams with not only regard to technical competence but also sensitivity to  personalities. You need to have some people who will help provide the synergy for effective teamwork even when there is a lack of control.

Leadership for Managing Complexity
Some technology leaders truly shine in the face of challenge. When managing development in the cloud or newly emerging platforms such as mobile devices, management complexity must be your primary task. True leaders thrive on this type of challenge. They also create environments where learning can impact the entire lifecycle development effort.

Retrospectives for Learning and Improving
Agile retrospectives are a very effective process improvement methodology in which the team meets to discuss what went well and what needs to be improved. Agile retrospectives [4] provide an excellent opportunity for team members to meet and discuss what went well and what needs to be improved.  Some people find this introspection therapeutic and readily embrace the opportunity. Others find it uncomfortable to open up about mistakes and accept feedback from others. Too often, these sessions degenerate into finger pointing and name calling. Team leaders play a vital role in setting the right tone so that retrospectives can be effective and fruitful.

About the author

AgileConnection is a TechWell community.

Through conferences, training, consulting, and online resources, TechWell helps you develop and deliver great software every day.