Archive for the ‘agile software development’ Category
I recently got a chance to work on a project using Collabnet Subversion and OpenMake Meister and put together a short demo on how to get the two tools to work together doing continuous integration. You can view it at http://www.openmakesoftware.com/flashdemo/Meister-SVN/omsvn_small/omsvn_small.html
Meister like most CI tools has several ways to kick off a CI build. You can do a scheduled build, or you can poll the SCM system. The third way of doing a CI build is to call the build from a Subversion hook. In the demo I show two of these methods: a scheduled build in Meister, and calling Meister from the Subversion post commit hook.
The setup is pretty simple. I have a repository in Subversion that has working copies for developers, and what I’ll call a ‘hands off’ working copy that only the build process uses (meaning, no developers are ever in that copy making changes. It receives changes strictly through a ‘svn update’ command run by the CI process). In Meister, I have a workflow that knows how to build a small DOS application from some code in the repository.
In the demo, I first show Meister running a build on a schedule. Meister updates the ‘hands off’ working copy and then compiles and links the code. In the second case, I turn off the scheduler, and instead activate the post commit hook in the Subversion repository. The hook code calls the Meister command line, which looks like this:
java -cp c:\openmake-meister\client\bin\omcmdline.jar com.openmake.cmdline.Main -BUILD "WINDOWS BUILD WITH SVN"
The same workflow runs in both cases. The advantage of running from the hook is that you are always guaranteed that every transaction in Subversion gets built. On the other hand, setting a scheduler to run every hour is easy and might be more appropriate for shops with less frequent code changes. In both cases Meister is driving the build with its dependency analysis engine, so the builds are fast and highly parallelized.
Overall it was pretty easy both to get the Subversion repository configured, and to get the Meister workflow up and running. The Meister command line lets you do things like set environment variables (not shown above), so you can control the workflow at a fine level of detail.
If you’ve been in the software business long enough, you’ve probably seen just about every methodology. Waterfall, RAD, OOP and Agile, just to name a few, have all been at the forefront of methodology circles, each briefly having its place as ‘the’ methodology, the One Right Way of doing software development. As different as these methods may be, they all have one thing in common: without execution by talented engineers, none are worth the paper they are printed on. Which brings me to the topic of this post. If you’ve settled on one of the agile methodologies and are using scrum to manage your engineering projects, you may encounter more than just a little resistance from engineers when switching to daily stand-ups and burndown charts. Beyond training, there’s one often overlooked practice that can help socialize the idea and practice of scrum inside your team – talking to people.
The daily walkaround that most managers engage in isn’t designed to randomly annoy engineers. Rather, it is one of the most proven methods of management – management by walking around, or MBWA. This simple practice ensures that you and your team members talk face to face, semi-privately at least once a day, partly to get caught up on activities, and partly to socialize new ideas. If the new idea is scrum, you might want to try a variation on MBWA that I call SBWA – Scrum By Walking Around.
The idea is simple. You’ve trained the team, but the daily scrums aren’t going well. People are missing their commitments, and the burndown chart seems to be flaming up like tech stocks in the good old days. Engineers are frustrated, and their frustration is partly directed at you for advocating YAM – Yet Another Methodology. If this is your situation, you need to do a better job of socializing scrum among your team members. There’s no better time to do this than during your daily walkaround.
Try this: plan your walkaround to take place in the hour before the daily scrum. As you visit each engineer, ask them how they feel the new methodology is going, and take lots of mental notes. Then spend a minute reinforcing the key goals of scrum: accountability to commitments, visible progress measures, and short term rigidity combined with long term flexibility. Later, after the scrum is over but before everyone leaves the room, share the concerns that you’ve gathered privately from your walkaround, and get everyone to agree on a plan of action to address the issues. Chances are that there are a few common concerns that everyone has. By getting these out in the open, it signals to the team that you’re responsive to them, and not just another pointy-haired paper-pushing process wonk.
When you work for a company, it’s important to align your goals with the company goals. In software engineering firms, that often means setting a goal to be adept at your coding job while following the company practices and development processes. If one of those processes happens to be agile development, strange things can happen when engineers try to ‘get with the program’ (coding pun intended!) Engineering managers at software companies, read on to learn how to help your team adjust to agile.
I think there’s a good reason why engineers can sometimes have a hard time adjusting to and adopting agile. The truth about agile as applied at software development companies is that it is not a software development process. It is a product management process, fundamentally designed to feed prioritized, must-do requirements to engineering teams. Once an engineering team has these requirements in front of them, individual engineers may find it hard to distinguish life before from life with agile. Someone, a manager or scrum master, asks the engineer to commit to doing some work. If the team is using scrum and doing short 2-week sprints, then engineer gets to give the most tried and true answer in software development: yup, it’ll take about 2 weeks. And then they put their heads down and start coding. Every morning they stand up at the daily scrum and say ‘yup, it’ll take till the end of those two weeks I told you about yesterday and the day before…’. From an engineer’s point of view, this interaction can be indistinguishable from their behavior under older methodologies like waterfall, and therein lies the rub.
For engineers to really commit to agile, they need to be told another truth. The hard truth in the software business is that it is market driven – and thus the real goals of a company from a product perspective are and should be defined and socialized internally by the marketing department. What agile really does for a company is to force marketing – product management, specifically – to constantly engage with engineering at a fine-grained level. Reviewing requirements, crafting stories, building a global, prioritized backlog. In other words, doing real work to ensure that requirements are understood and that new information on customer needs and market direction is properly reflected in the backlog priorities.
To successfully socialize agile within engineering, there are three things a manager must communicate to their team:
1. Priorities change
2. Team and individual commitments do not
3. Our process moves as fast as the market
The good thing about agile is that it is self-reinforcing with respect to these three points. By doing short sprints, changing priorities become an evident norm. Unlike waterfall, where an incoming course change forces developers to drop what they’re doing and work on something new, agile maintains current commitments until the end of the sprint, reinforcing point number two. When a course change comes in in agile, the next planned sprint can immediately reflect this, highlighting point number three.
Agile isn’t hard or easy. But it is different. By communicating clearly to your team about how priorities are reached, holding them and yourself to commitments, and adeptly shifting gears as your customer and market priorities change, you will improve your success with agile and win over even the most process-skeptical engineers on your team.
Agile governance is about as controversial a topic as there is these days in software methodology circles. Here’s a post that I did for AccuRev (my last before exiting the company) that summarizes my take on best practices in this area. Enjoy!
Here is a link to a blog post I wrote today on my employer’s website. It details the integration that I worked on between AccuRev and Rally – the first being the leading process-centric SCM system (and the company I work for), the second being an agile project management service. The integration was done in Ruby and Perl, and provides basic requirements traceability between issues stored in Rally and code changes performed in AccuRev.
Just to kick-start this site, here is a link to a post I did for the company I work for, AccuRev, Inc. It is a summary of a webinar that I participated in recently as a panelist about proper tooling for Agile Software Development. The webinar covered how to evaluate your development toolset, particularly SCM (software configuration management), to get ready for agile. (I’m the Technical Marketing Manager at AccuRev. Opinions expressed herein are my own, etc.)