The Importance of a Successful Daily Build

Former Microsoft Visual Studio Product Manager Jim McCarthy used to say, “Successful daily builds are the heartbeat of a software project. If you do not have successful daily builds, then you have no heartbeat, and your project is dead!”

Daily builds also mark the progress being made and can indicate when a project is struggling. In addition, having a daily build can keep the programmers in “ship mode”—the attitude that the product could ship with the complete features on any given day.

A better metaphor is that the build is your product assembly line. If your assembly line is not moving or broken, your business is hurting, because you cannot turn out a product. Look at what Henry Ford did with his assembly line. Ford did not invent the car; he just perfected the way it was manufactured with the assembly line. I think the same holds true for software: By having a good build process, your company will be more efficient, successful, and profitable, and your employees will be happier.

How to Successfully Release Builds and Police Build Breaks

really like the Pottery Barn rule that was misquoted by Senator John Kerry in the second Presidential debate in September 2004. Kerry said that Colin Powell “told President Bush the Pottery Barn rule: If you break it, you fix it.” The anecdote comes from Bob Woodward’s book Plan of Attack, but Woodward actually reported that Powell privately talked with aides about the rule: “You break it, you own it.” He did not say this to the President, and it actually turns out that Pottery Barn has no such rule. Still, I think every build lab needs a poster with this rule regardless of who said it.

This leads to one of the most important rules in the build lab: The build team never fixes build breaks, regardless of how trivial the break is. That’s the developer’s responsibility. We took this a step further: The developer who breaks the build has to go to his development machine, check out the file, fix it, and then go through all the check-in process steps again.

Build Breaks Always Have the Highest Priority for Everyone

This rule means that if you are a developer and you can fix the build break, and the developer who broke the build cannot be found, you should fix it immediately. Afterward, send an e-mail to the developer and the build team explaining what you did to fix the build, and remind your co-worker that he owes you a favor.

Chris Peters, a former Microsoft vice president in the systems and applications group, used to say that people have to remember that the reason everyone works here is to ship software. That means everyone: development, testing, product support, vice presidents, administrators, and so on. If you are not moving toward a direction of shipping a product every day, you need to talk to your manager and figure out what you are supposed to be doing. Helping fix build breaks or not breaking the build in the first place is a good way to help, but don’t forget the Pottery Barn rule!

At Microsoft, developers understood that when they joined the Windows NT group, the following chain reaction would occur if they broke the build:

  1. We would try to call the developer at his office.

  2. If the developer did not pick up, we would call his manager and continue up the organizational ladder until we found someone who could fix the break or at least point us to someone who might be able to resolve it.

  3. We would call the developer at home if it was past the 9 AM to 6 PM working hours.

To follow this track, it is important to keep a list of developers’ home telephone numbers in the build lab or make them easily accessible to everyone who is working on a project. This list is especially helpful for build breaks that occur late at night or early in the morning. With the increasing number of people working from home, this list is even more important today than it was 10 years ago.

Another way to discourage developers from breaking the build is to establish a build fine or penalty. The build fine example in the following sidenote worked well in the NT group for a couple of years.

However, don’t execute the penalty by having the engineer who broke the build run the next one. Several companies try that approach, but this is another one of those “good in theory, bad in practice” deals. What usually happens is that you end up pulling a good developer off a project until some unfortunate developer breaks the build, and then you pull that person off until… you get the picture. If you entered this unknown factor into your project manager’s Gantt chart, you would see how this can mess up the development line and build progress. It really is easier and cheaper to hire a full-time builder.

 

Reference: The Build Master: Microsoft’s Software Configuration Management Best Practices

Tagged : / / /

Why DevOps skill is very important to have?

why-devops-skill-is-very-important-to-have
In the event that association has worked with a spry web advancement philosophy, then they are accustomed to seeing the advantages of composed cooperation, speedier turnarounds, and checkpoints and changes through the web programming improvement life-cycle. Along these lines of working can help your group make the move to DevOps, which dwells at the convergence of advancement and operations and exists to enhance the product conveyance chain, as well as the association’s general execution. A fundamental guideline of DevOps is to empower the advancement and operations groups to cooperate to see each other’s procedures and remarkable difficulties so they can discharge code speedier and be better arranged to react to changing business necessities. Much like deft, DevOps adopts a comprehensive strategy to programming improvement and prevails by changing the attitude of the staff and the way things are generally done. DevOps depends intensely on the human variable, so moving the corporate culture won’t occur without any forethought. Change needs to originate from the top, yet beginning from a positive place of “yes” will put you progressing nicely.
The effect that DevOps has on an association is quantifiable and receiving DevOps precepts, for example, code proprietorship, nonstop change, and robotization has gotten to be de rigueur for some corporate mammoths. Organizations including Facebook, Target, and Adobe have all gotten to be adherents as has Amazon which embraced a “You construct it, you possess it” culture where designers of an administration are in charge of its operations all through the lifecycle. Insights illustrate the DevOps development as found in Manikin’s Condition of DevOps reports. These yearly reports point see how organizations that actualize DevOps hones (i.e., high-performing associations) charge with issues, for example, sending, representative dedication, revise, and security. The noteworthy outcomes for 2016 are beneath.
           1. High-performing associations are definitively beating their lower-performing peers as far as throughput. Superior workers convey 200 circumstances more as often as possible than low entertainers, with 2,555                              circumstances speedier lead times. They likewise keep on significantly beat low entertainers, with 24 times quicker recuperation times and three circumstances bring down change disappointment rates.
           2. Superior workers have better representative faithfulness, as measured by representative Net Promoter Score (eNPS). Representatives in high-performing associations were 2.2 circumstances more inclined to prescribe                    their association to a companion as an extraordinary work environment, and 1.8 circumstances more inclined to prescribe their group to a companion as an awesome workplace. Different reviews have demonstrated                    this is corresponded with better business results.
           3. High-performing associations invest 22 percent less energy in spontaneous work and improve. Thus, they can invest 29 percent more energy in new work, for example, new components or code. They can do this since                they incorporate quality with every phase of the advancement procedure using nonstop conveyance hones, rather than retrofitting quality toward the end of an improvement cycle.
           4. Superior workers invest 50 percent less energy remediating security issues than low entertainers. By better incorporating data security targets into day by day work, groups accomplish larger amounts of IT execution                    and fabricate more secure frameworks.
Beginning a DevOps culture starts by building up a long haul arrange for that frameworks how you might want your web group to work in 12-year and a half. This is an ideal opportunity to investigate your arrangement, survey your procedures, and distinguish where you are seeing danger. Ask yourself and your group, “What is creating the procedure to be wasteful?” and “What are the run of the mill issues that ceaselessly emerge?” Give your group a voice and approach them for recommendations in the matter of how they think the procedure can be sensibly moved forward. What do they think about putting operations individuals on improvement ventures? Is there anybody on the group who would learn new aptitudes and work as the DevOps architect to conquer any hindrance amongst operations and improvement? Shouldn’t something be said about welcoming the operations group to commence gatherings? Gathering this data may require a couple shut entryway sessions with your staff, however in any event you will motivate them to discuss the procedure and consider arrangements. Once your arrangement has been actualized, impart it to different divisions. The excellence of a DevOps culture is that its foundations in venture possession and cross-practical groups can be actualized all through your association for expanded productivity and better results
Tagged : / / / / / / / /

Importance of Automation Tools in SCM

automation-tools-in-scm

Importance of Automation Tools in SCM
by John Ferguson Smart

Since the dawn of time, people have been using tools to make their life easier. Tools let you solve a problem at hand more quickly and more efficiently, so that you can spend your time doing more interesting things. The stone axe, for example, enabled your prehistoric hunter to cut up meat more efficiently, thus leaving the tribe with time to do much more satisfying activities such as grilling mammoth steaks and painting on cave walls.

Of course, not all tools are equal, and tools have a tendency to evolve. If you go down to your local hardware store nowadays, you can probably find something even better to chop up your firewood or to chop down a tree. In all things, it is important to find the tool that is most appropriate for the job at hand.

The software industry is no exception in this regard. There are thousands of tools out there, and there is a good chance that some of these can help you work more efficiently. If you use them well, they will enable you to work better and smarter, producing higher quality software, and avoiding too much overtime on late software projects. The hardest thing is knowing what tools exist, and how you can put them to good use.

That’s where this book can help. In a nutshell, this book is about software development tools that you can use to make your life easier. And, in particular, tools that can help you optimize your software development life cycle.

The Software Development Life Cycle (or SDLC) is basically the process you follow to produce working software. This naturally involves coding, but there is more to building an application than just cutting code.

You also need a build environment.

When I talk of a build environment, I am referring to everything that contributes to letting the developers get on with their job: coding. This can include things like a version control system (to store your source code) and an issue management system (to keep track of your bugs). It can also include integration, testing, and staging platforms, in which your application will be deployed at different stages. But the build environment also includes tools that make life easier for the developer. For example, build scripts that help you compile, package and deploy your application in a consistent and reproducible manner. Testing tools that make testing a less painful task, and therefore encourage developers to test their code. And much more.

Let’s look at a concrete example. My picture of an efficient, productive build environment goes something along the following lines.

You build your application using a finely tuned build script. Your build script is clean, portable, and maintainable. It runs on any machine, and a new developer can simply check the project out of the version control system and be up and running immediately. It just works.

You store your code in a central source code repository. Whenever you commit your code, a build server detects the change to the code base, and automatically runs a full suite of unit, integration, and functional tests. If any problems crop up, you (and the rest of the team) are immediately notified. You have learned from experience that committing small, regular changes makes the integration process go a whole lot smoother, and you organize your work accordingly.

You use an issue tracking system to keep tabs on features to implement, bugs to fix, or any other jobs that need doing. When you commit changes to your source code repository, you mention the issues that this change addresses in the commit message. This message is automatically recorded against these issue in the issue management system. Furthermore, if you say “Fixes #101,” the issue automatically will be closed.

Conversely, when you view an issue in the issue management system, you can also see not only the commit messages but also the exact modifications that were made in the source code. When you prepare a release, it is easy to compile a set of reliable release notes based on the issues that were reported as fixed in the issue tracking system since the last release.

Your team now writes unit tests as a matter of habit. It wasn’t easy to start with, but over time, coaching and peer programming have convinced everyone of the merits of test-driven development. Automatic test coverage tools help them ensure that their unit tests aren’t missing out on any important code. The extensive test suite, combined with the test coverage reports, gives them enough confidence to refactor their code as necessary. This, in turn, helps keep the code at a high level of reliability and flexibility.

Coding standards and best practices are actively encouraged. A battery of automatic code auditing tools checks for any violations of the agreed set of rules. These tools raise issues relating to coding standards as well as potential defects. They also note any code that is not sufficiently documented.

These statistics can be viewed at any time, but, each week, the code audit statistics are reviewed in a special team meeting. The developers can see how they are doing as a team, and how the statistics have changed since last week. This encourages the developers to incorporate coding standards and best practices into their daily work. Because collective code ownership is actively encouraged, and peer-programming is quite frequent, these statistics also helps to foster pride in the code they are writing.

Occasionally, some of the violations are reviewed in more detail during this meeting. This gives people the opportunity to discuss the relevence of such and such a rule in certain circumstances, or to learn about why, and how, this rule should be respected.

You can view up-to-date technical documentation about your project and your application at any time. This documentation is a combination of human-written high-level architecture and design guidelines, and low-level API documentation for your application, including graphical UML class diagrams and database schemas. The automatic code audits help to ensure that the code itself is adequately documented.

The cornerstone of this process is your Continuous Integration, or CI, server. This powerful tool binds the other tools into one coherent, efficient, process. It is this server that monitors your source code repository, and automatically builds and tests your application whenever a new set of changes are committed. The CI server also takes care of automatically running regular code audits and generating the project documentation. It automatically deploys your application to an integration server, for all to see and play around with at any time. It maintains a graphical dashboard, where team members and project sponsors can get a good idea of the general state of health of your appplication at a glance. And it keeps track of builds, making it easier to deploy a specific version into the test, staging, or production environments when the time comes.

None of the tools discussed in this book are the silver bullet that will miraculously solve all your team’s productivity issues. To yield its full benefits, any tool needs to be used properly. And the proper use of many of these tools can entail significant changes in the way you work. For example, to benefit from automated testing, developers must get into the habit of writing unit tests for their code. For a continous integration system to provide maximum benefits, they will need to learn to commit frequent, small changes to the version control system, and to organize their work accordingly. And, if you want to generate half-decent technical documentation automatically, you will need to make sure that your code is well-commented in the first place.

You may need to change the way people work, which is never easy. This can involve training, coaching, peer-programming, mentoring, championing, bribing, menacing, or some combination of the above. But, in the long run, it’s worth it.

Tagged : / / / / / / / / / / /