Archive for October, 2011

Before Agile, We Never Called It Waterfall…

October 31st, 2011 by clucca

A funny thing has happened over the last couple of years…. we started calling waterfall software development… er… “waterfall”. By this I mean, we never had a name for the process… waterfall was just called “software development”. There was no distinction or name for what we were doing- there was only one way. This is a draw of agile, it’s something different.. and it’s the only new development methodology to actually get attention in the last 10 years.

So, what’s the deal?

#1) Agile is an umbrella term for several methodologies.
Agile encompasses a lot of different things; it can mean different things to different people. This might be why people have such a hard time understanding it. So comparing “waterfall” to Agile isn’t entirely accurate, or possible, since it’s like comparing one NBA team to all of MLB. Agile encompasses several methodologies (such as XP, Scrum, Kanban), which are all iterative in nature… that brings us to…

#2) Agile is iterative.
Yes, agile is an umbrella term, but all of the methods in agile share common core values: The fundamentals are to incorporate iterative development and to have continuous feedback so that you can always improve. This means you continuously plan, continuously test, and continuously integrate so you can adapt when needed.

#3) Agile is adaptive, not predictive.
Do you remember what “waterfall” was like back in the day? We spent months gathering business requirements, writing specs, and designing, and then spent the next 10 months coding. Since we spent the first few months trying to predict what the next 10 months would entail, we could never accurately estimate how much work a task was supposed to be, and heaven forbid the requirement changed half way through! Agile is an attempt to shorten that cycle so we don’t have to waste 10 months before find out something was wrong.

#4) You can pick and choose what methods you want to implement.
It’s funny. I ask people all the time, “How agile are you?” They typically say “Well, we’re somewhat agile, but not fully agile.” People tend to measure some sort of agile “zen” in their head, and that doesn’t exist! If you’re practicing some agile methodologies, you’ve won half the battle.
You’ve won half the battle if you are practicing:
·         Continuous Integration
·         Agile Workflows
·         Test Driven Development
·         Short Iterations
·         User Stories
There’s no out of the box way to do this, but if these methods work for you… then you’re there.

#5) The genius Of Agile is in the name.
Since the word “Agile” can’t be traced back to a specific methodology like “waterfall” we probably won’t ever think of it as “development”. In addition since it’s not a prescribed method of doing things (ex: Watefall.. requirements->design->implementation->verification->maintenance) it just can’t fail… whatever methods we use can always be improved and adapted to best suit our needs.

Software Release Management: Ensuring Reliable, Reproducible Software Products

October 25th, 2011 by clucca

As the software development process has evolved over the past couple of years – particularly enterprise software development – one aspect  of software configuration management has drawn increasing attention as a means for controlling risk and maximizing success rates. Of course, I’m talking about software release management.

What is software release management?

It’s the practice of doing all the builds for the various aspects of a project and then moving all those builds to its particular process – development to QA to user acceptance to production to deployment.

What’s made software release management crucial to efficient and timely software development is the use of parallel and geographically dispersed development teams. What was once a pretty straightforward, linear process has now become a major, multi-tasking effort as engineering teams work concurrently on various aspects and features of a product that then need to be merged into a single main trunkline for QA, production, and eventual release to the marketplace.

Compounding this release management challenge are additional issues such as:

  • error correction
  • additional customer feature requests
  • risk management
  • product revisions
  • manufacturing issues
  • general software entropy over time

As a result, the release manager function was developed to deal with all these challenges – a sort of software release management superhero. Part overseer, architect, coordinator and support engineer, the release manager is expected to have a general, transparent view of the entire project development process along with a granular view of every aspect of it. Never mind real-time issue and code change tracking, along with  the ability to head off error propagation and broken builds. How can any one person manage to accomplish all this?

The best answer? With a software release management tool that provides a stream architecture, or something that can be described as “intelligent branching.” Streams are ideal configuration objects because they contain absolutely everything associated with any particular release, making it easy to track the history of the release and merge any changes with minimal (if any) errors. In fact, streams make it easy to dial back the clock and return to virtually any version of a release to quickly and effectively handle any errors that might pop up.

What makes this type of tool particularly useful is the way it helps release managers handle all the important aspects of software production, including build stabilization, QA testing hand-offs, product assessments, and archiving activities, to name a few. In short, software release management makes it really easy to move new builds to any one of the configurations needed in the software development and release process.

Some of the major features of our software release management tool include:

  • Use of streams to store and make available complete code files for all release versions
  • AccuRev TimeSafe architecture for atomic application of all code changes to minimize errors
  • Integrated issue tracking
  • Improved developer productivity

Version Control Software Can Help Ensure Success and Sanity

October 19th, 2011 by clucca

Back in the day when software development was more linear and proceeded at a more predictable pace with longer project timelines, version control wasn’t much of an issue. In most cases it wasn’t too hard to keep track of code changes, feature developments, and configuration files. If a developer – or even a team – created several different versions, multiple copies could be kept and, with some careful labeling and archiving, any version could be recreated or referred to later on.

But all that changed with the coming of Agile processes and the evolution of the multiple development teams approach, with different developers and teams branching off the main development trunk line to pursue new features or versions and then merging them back into the main line. If keeping multiple file copies could be prone to error in the old linear approach, you can imagine the danger looming with multiple teams working simultaneously. Suddenly, version control software seemed like a really, really good idea.

Now, of course, there are any number of version control software tools, ranging from very basic products such as open source CVS and Subversion, to some really sophisticated and comprehensive products that provide a variety of helpful software configuration management benefits. Regardless of the sophistication of the particular version control software being used, they all provide one critical benefit — the ability for multiple teams in multiple locations to work off the same source code base with minimal confusion and errors.

If you’re trying to sort out the features-and-benefits of version control software, here’s a short checklist of questions that can help you narrow down your choices:

  • Simplicity: Is your software development process modest enough for simple, text-based functionality or are you using a more complex, multiple team approach that would benefit from a graphic, browser-type tool?
  • Efficiency: Do you spend a lot of time analyzing and resolving merge conditions? If so, consider version control software with a visual tool that can help facilitate frequent integrating and merging codeline changes.
  • Collaboration: Do your developers work on code changes individually, with the need to occasionally share code with other developers or team members? Then consider version control software that includes the ability to both keep files in private workspaces and share them openly with other team members.
  • Version Control: Are your products subject to frequent, often substantial revisions that could be prone to errors without the ability to reproduce full version histories of all files and configurations?  Then look for version control software that provides time-stamped atomic transactions and an append-only database that prevents information from being lost and makes it easy to roll back code changes to a previous state.

Choosing the right version control software can make a major difference in your software development management, enabling you to get more robust, less error-prone products to market quicker and more efficiently.