Our
company produces software products (APIs for
developers) and uses those products to produce custom software
solutions for the semiconductor industry. Some products/projects
are run in a traditional waterfall methodology, and some in an
adapted Agile
methodology;
we can't be completely "Agile"
for many reasons - stakeholder expectations, the type of software we
produce, and our support/integration model for customers. But,
for the products we can run Agile,
we try!
We're
a Microsoft house, so use VSTS (Visual Studio
Team System) to capture requirements in "work
items" that are associated with a specific iteration (sprint). In the VSTS user interface, there are several "tabs" that are used to
group information associated with the work item; our VSTS administrator
created a unique Information Development tab with custom fields in
it.
At the beginning of each sprint, the writer(s) on the product assess its user stories and flag it if it requires some kind of documentation deliverable. Unlike
pure Agile recommendations,
we seem to have many tasks that don't always impact the end user,
like "upgrade the xxx robot driver to include HOME and FACE
commands" or "change the logging level of component X to
improve performance."
We have a free-form entry field for describing what might need to be done, which document it affects, and any history we want to capture about decisions that were made or outstanding dependencies. This is used both to evaluate the work at the beginning of the sprint and describe the written content we actually produced.
Writers also flag whether the user story goes into release notes, and if it does, write the content as soon as the functionality is finished. That way, we can run a query right before the product release, and it spits out the release notes for all the user stories. We do this for bugs as well. I love it because you can write the content while it's fresh in your mind, and you're not left reviewing 600 work items a week before the product release.
If multiple deliverables are affected by the user story, we just indicate which ones are being worked on. We don't make separate tasks for each deliverable. If there are multiple related user stories for a bigger "epic", we will just attach a task to one of the user stories, and leave the other stories alone. If the total amount of time to complete the documentation exceeds the sprint timeline, we will defer one of the tasks to another sprint, or "split" the task into two and assign to different people within the same sprint. If we don't get something accomplished like we had planned, we'll push the whole task to another sprint.
The
actual User Stories are resolved by
developers/closed by QA without reference to the documentation work.
We sometimes complete the docs work in the same sprint, sometimes not
- depending on whether we are dedicated to the project or not,
whether we're trying to "batch" work on a single
deliverable (e.g., it's annoying to touch the online help every
single sprint for a few small changes), and whether the work is
completed early in the sprint or near the end. Although this
doesn't tie docs to the "Definition of Done", it makes
everything work much more smoothly.
After
a few sprints have passed, we'll go through the list of
requirements/reported bugs and follow up on any that slipped through
the cracks, to make sure every one of them has been evaluated for
their effect on the documentation. It's hard when things get too far
behind - sometimes developers or QA are no longer available as
resources (moved onto another project) and for user-based
documentation, we sometimes miss the opportunity to improve
shortcomings in the GUI, because it's just too late.
At
the end of the release cycle, we sometimes have content that could be
investigated/elaborated upon/improved next release (due to lack of
budget, time, or resource availability). We create separate work
items for each, and they go into the backlog. We'll sometimes
pull them into subsequent releases if we're not crushingly busy -
actually that never happens. So realistically it's the death
knell for anything that goes into the backlog!
How
do I like writing in a more Agile environment? I love it! I've
always been able to participate fully in the development cycle of any
project – it's been part of our corporate culture since the
beginning. But it's the personal interaction, solving issues in real
time, and everyone working on a team that is a completely different
experience. Would you rather read a 20-page spec, which was written
by one person from their limited perspective and out of date the day
after it was written, or sit down with the entire team for an hour
and figure out how a feature should work? It makes for a better
product, better documentation, and a better working environment all
round.
No comments:
Post a Comment