|
1. Use of Change Packages 2. Stream-based Branching Strategy - do not overload branching 3. Status flow for all records with Clear In Box Assignments 4. Data record Owner and Assignee 5. Continuous integration with automated nightly builds from the CM repository 6. Dumb numbering 7. Main branch per release vs Main Trunk 8. Enforce change traceability to Features/Problem Reports 9. Automate administration to remove human error 10.Tailor your user interface closely to your process 11. Org chart integrated with CM tool 12. Change control of requirements 13. Continuous Automation 14. Warm-standby disaster recovery 15. Use Live data CRB/CIB meetings 16. A Problem is not a problem until it's in the CM repository 17. Use tags and separate variant code into separate files 18a. Separate Problems/Issues/Defects from Activities/Features/Tasks 18b. Separate customer requests from Engineering problems/features 19. Change promotion vs Promotion Branches 20. Separate products for shared code This time around, however, I'd like to focus more on some related process and tool issues and practices. I've listed them below, and then I go into some detail on each of them. Hopefully you'll find these to be key factors to consider for your own environment. 1. Look, Again, At What Processes/Tools are Available 2. When Selecting a Tool, Use the Vendor for Free CM Technology and Trends Training 3. Don't be afraid to Change Your CM Processes and/or Tools 4. Look at the Full ALM Problem, Not Just CM 5. Use Agile CM Methods 6. Using Role-based Interfaces and Dashboards 7. Interactive Build Comparisons 8. Pay More Attention To Backups, Recovery and Availability Strategies 9. Use Multiple Site Solutions That Span the Entire ALM Spectrum 10. Unit Testing and Peer Review of Changes 1. Look, Again, At What Processes/Tools are Available Many tools do not evolve rapidly. Perhaps they focus on simplifying administration or on improving performance. But there are a few tools out there that evolve very rapidly compared to the rest of the industry. As well, there are a number of new tools on the market. If your needs are modest, new open source offerings may be able to provide much of the capability you're currently paying for. But, as license costs are such a small portion of the total cost of operation (TCO), I would strongly recommend you look beyond open source. 2. When Selecting a Tool, Use the Vendor for Free CM Technology and Trends Training This is an opportunity for free training in state-of-the-art CM technology. And as many vendors are process centric at this point, you're CM process skills may be broadened somewhat as well. Now I've been in the CM industry for better than 30 years and I'm still broadening my reach. It's important to understand what capabilities there are and what trends you see so that you don't lock yourself into 2nd generation, or even early 3rd generation, solutions. 3. Don't be afraid to Change Your CM Processes and/or Tools Look around your shop. Identify what is ailing your developers, your build team, your testers, anybody and everybody involved in your product development. If you can go up to them and offer them a solution that easy to use, easy to learn and not only addresses their concerns but throws in some neat new functionality as well, I'm sure their ears will be open. Get your vendors to help you to do the sales job. And make sure that it ends with: and we'll save loads of effort, time and money. When you look around, cast your glance wide. Perhaps you've used three CM tools, and you look at them and find that they're still basically the same with just some nice window dressing - not enough to cause you to switch. Well then you're missing a number of other tools that will give you more than enough reason. However, if you find that the evaluation process for a tool is complex, perhaps you should take this as a warning sign of tool complexity and just move on to the next. 4. Look at the Full ALM Problem, Not Just CM If you look at CM, in isolation from these other users and their tool requirements, you will be limiting the scope of your solution. More than that, you will be limiting the capabilities of your solution. If I can track exactly what release each customer has installed, and compare the current release to that customer's release with a single click, it may be a lot easier to identify if the problems they're having have already been addressed. If my requirements and testing are addressed by the same management tool (and repository) as my version control and build management, not only am I going to be able to navigate traceability links more easily, but I won't have to maintain glue that integrates all of my tools together. That in turn will allow me more flexibility in customization. Don't forget about less administration, less training, easier upgrades and probably lower licensing costs too. Developers are often quick to dump on CM teams. But give them an end-to-end tool that meets their needs and perhaps the dumping will stop - and perhaps the rest of the product team will be able to communicate more easily with core development, by virtue of the fact that they have access to the same repository of data. That's where the team building starts, and that's when CM starts to be recognized as a backbone business technology and communication, rather than as a developer tool. 5. Use Agile CM Methods I see CM tools out there that require you to branch when you shouldn't have to (and then of course you have to merge and retest). Some make you use different tools for version control and for change management. Some have minimal, or even no, change packaging. Some force you, or someone else, to update the status of a problem or feature in a different database, or as part of a separate action than the one that you've already performed that already implies the status change. Some let you work your way into trouble if you miss a key step. These are things that make CM tools and processes non-agile. If I have to manually tag items because the tool didn't capture information based on what I was doing, not only am I wasting time, but I'm potentially influencing quality on the down-side. If I have to tell my team to hold off checking in code because of my tools and processes, I'm impacting schedules and efforts. This is not what Agile is made of. Agile CM should support traditional project management, but it should also drive priority-based feature and problem fix scheduling. It should allow team members to look at what needs to be done next without having to wait for a meeting that may have been delayed because someone got sick or was caught in a traffic jam. An agile CM tool is one that will improve communication considerably by allowing the data to do most of the talking: approvals, assignment, status updates, etc. An agile CM tool needs to be able to provide the right information with little or no guidance. If it takes me 2 days to compare the current release functionality to the previous, that might be OK for the technical writers preparing release notes, but it's not going to help developers who need to identify if a problem has been fixed between the two releases, nor one who is trying to track down when a problem was introduced so that (s)he can review the change delta to more rapidly pin down the cause. So, the bottom line here is: move to a more agile CM process. Make your tool move with you or leave it behind in favor of one that's up to the task. 6. Using Role-based Interfaces and Dashboards If your shop doesn't have interfaces that are tailored to each role, you're going to waste a lot of money training people what not to do, and searching for how to do what they want to do. What are the things a developer does? Those should appear in the developer interface. What about a CM Manager? How about a Product Manager? A Project Manager? A Tester? They all have different roles. Yes the same tool can help them all if it's well designed. Each should have their own set of Inboxes/To-Do Lists specific to their roles. Each should have the abilitiy to add and modify the data for their role, and to navigate it easily. In recent years, the concept of a dashboard has arisen. Dashboards are nice - they summarize what you need to know, and you can even zoom-in to details with most of them. But as your responsibility increases, your dashboards can get cluttered. The solution is role-based dashboards. Let me look at the info from the perspective of this role, then that, then another. In fact, as dashboards have evolved, a few things are obvious to me:
What's a Work Station? It's basically a dashboard of information from which I can actually do work. For example, I might have a Change dashboard that let's me zoom into changes to see the details of each change. But maybe I'd like to use the same dashboard to do peer reviews, or as a developer, to do my checkouts and checkins from, and more. The ultimate Work Station for me is a Meeting Work Station. It's a work station dashboard that I can use to run a meeting. For example, a Problem Review Board can use a Meeting Work Station to present the Problems being reviewed, to zoom-in in a priority-based fashion, to add decisions, approvals, comments, etc. Even to assign and re-prioritize the problems. Similarly for a CRB (Change Request Board), a quality review board, a project management team, etc. Design the work station to make the meetings run smoothly while at the same time ensuring that all information is immediately captured. When looking at how you're using your current tool, or for planning your next tool, consider role-based user interfaces, with role-based dashboards, and work stations, that are easy to customize (and easy to build in the first place). Resist the temptation that a tool vendor already knows what you need and has hard-coded the dashboards for you. "What you need" will change over time, more rapidly than you know. 7. Interactive Build Comparisons
These questions are asked by developers, CM managers, build teams, customers, documentation teams, testers, management and more. These are important questions, and I'm sure you can add a dozen or so more related to the comparison of two builds (or any context view and a build, for that matter). Build comparisons in a VC tool tell you what code changes. In an ALM system, that's one option, but there are many others: problems fixed, features addresses, requirements satisfied, additional testing completed, new files added, customer configuration files to be removed, and so on. It is not sufficient to ask these questions only when you're ready to deliver a new release. If that were the case, it wouldn't matter if it took a few minutes, a few hours or a few days to get the answers. These are day-to-day queries that are used to tune your agile decision-making. Your build comparison capabilities must be interactive and responsive so that they are used as part of a solid decision-making capability for all parts of your development team. When a new problem arises, build comparison should be the first action used to narrow down the cause - not by looking at lines of code, but by first considering and narrowing down the list of potentially responsible changes, by looking the functionality they're addressing. Even better, as you're browsing through each of, say, a couple dozen changes, it would be useful if the delta for each of the changes were presented in case you needed to delve down deeper. Good tools, with good performance and smart dashboards, can present this information. Don't expect it from many of the older tools. 8. Pay More Attention To Backups, Recovery and Availability Strategies
Next generation CM environments allow multiple recovery paths, whether dealing with disk corruption, disasters or data sabotage. Full traceabilty of changes should double as a capability to restore and then re-apply the changes. Multiple Site strategies should double as disaster recovery capabilities and as an extra level of backup. Most of your data is not changed day-to-day, or even month-to-month, so your backup durations shouldn't grow indefinitely as your repository does. There are other things to consider as well. Like what happens if a new release of software corrupts a version file? Do you have to duplicate the entire disk to protect against disk failure? And perhaps a bigger question: how many people are affected by a server outage, and for how long? What about outages for upgrades - does your information disappear for a few hours or days, or do users not even notice a blip in most cases? What about all the other data that's on user disks, perhaps on laptops? Are there stategies to easily backup data in workspaces or elsewhere? Staging is one popular way of doing so, but does this staging clutter up the CM database with a lot of irrelavant data in between good data points, or is it done more effectively? There's a lot to be covered here, and some of the best tools can have some of the worst levels of exposure in this area. Again, familiarize yourself with vendor technology and use this information as a lever against your current vendor to get your requirements met. 9. Use Multiple Site Solutions That Span the Entire ALM Spectrum Or perhaps you have different tools with different multiple site capabilities for the different pieces of data being controlled. You might be able to get this to work successfully, but more than likely, there's some consistency exposure, not to mention an extra level of administration to coordinate the multiple solutions. Whatever your solution, make sure your global development is covered by a consistent multiple site solution across all parts of your ALM function. 10. Unit Testing and Peer Review of Changes If you're not doing unit testing (where the "unit" is a change package, a.k.a. an update), you'll notice your quality dipping as changes are made. Unit testing must be done by the developer before checking in software, or at a minimum, before checked-in software is marked ready for build integration. If you think your organization or project has a good reason to avoid this, think again. If there are road blocks, remove them. The cost of not doing so is simply too high. Along with unit testing, peer reviews of code are critical. A well groomed peer review process will be more effective than testing at discovering product quality problems, and at a much lower cost. Peer reviews should not just review code changes, but should include a demonstration of the problem fix or new functionality, and should also review the unit testing for completeness and success. CM/ALM tools come into play here by providing the means to record unit testing scripts and results. These in turn can be used by the test teams to help ensure that their verification suites are updated, though developer test scripts should serve as an alternate accounting of the required tests to complement those developed by the verification team. CM/ALM tools should also make it easy to do peer reviews. It should not be necessary for all peer reviewers to meet at the same time to review the changes. On-line reviews, with comments and responses, should be easily managed by the CM tool. As well, it should be easy for architectural gurus, and others involved in multiple reviews, to perform multiple reviews in succession with minimal keystrokes. The CM tool here can help by tracking reviewers, providing reviewers with To-Be-Reviewed in-boxes, and by providing effective dashboards to navigate change packages in these in-boxes. It should also help by providing point-and-click traceability to the specs, problem reports or other data from which the changes were derrived. So there you have it. Another 10 CM Best Practices geared for Next Generation projects, processes and tools. Combined with my previous "Best Practices" article, we've covered a lot of ground. If you want your CM to be more effective, run through these practices, where applicable, and through the previous 20 I've referenced. Let me know if you disagree with them, and I'll either try to convince you otherwise or change my mind. If there's some that I've still not covered, don't be surprised, but let's hear from you so that I can cover them in the "reply" section or in a future column. Joe Farah is the President and CEO of Neuma Technology and is a regular contributor to the CM Journal. Prior to co-founding Neuma in 1990 and directing the development of CM+, Joe was Director of Software Architecture and Technology at Mitel, and in the 1970s a Development Manager at Nortel (Bell-Northern Research) where he developed the Program Library System (PLS) still heavily in use by Nortel's largest projects. A software developer since the late 1960s, Joe holds a B.A.Sc. degree in Engineering Science from the University of Toronto. You can contact Joe at farah@neuma.com
Set as favorite
Bookmark
Email this
Hits: 2171 Trackback(0)Comments (0)
|


A couple of years ago I wrote a detailed article on the Top 10 CM Best Practices for Next Generation CM organizations. However, it was hard to identify just the top 10, so I also included 10 runners-up to give a total of the top 20. You can review these in the article as the link [Nov. 2007 CM Journal]: 
