<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>pingVision</title>
  <subtitle>Interactive Design + Development for Drupal websites</subtitle>
  <link rel="alternate" type="text/html" href="http://pingv.com/blog/cyberswat/200706/project-management-drupal"/>
  <link rel="self" type="application/atom+xml" href="http://pingv.com/node/3682/atom/feed"/>
  <id>http://pingv.com/node/3682/atom/feed</id>
  <updated>2007-06-04T13:07:07-05:00</updated>
  <entry>
    <title>Project Management with Drupal</title>
    <link rel="alternate" type="text/html" href="http://pingv.com/blog/cyberswat/200706/project-management-drupal" />
    <id>http://pingv.com/blog/cyberswat/200706/project-management-drupal</id>
    <published>2007-06-04T13:07:07-05:00</published>
    <updated>2007-06-04T13:07:07-05:00</updated>
    <author>
      <name>Kevin</name>
    </author>
    <category term="Drupal" />
    <category term="Project Management" />
    <content type="html"><![CDATA[<p>Over the past few months, we at pingVision have been working on an in-house system -- built, of course, in Drupal -- to help facilitate our effective management of multiple concurrent, overlapping projects in various stages of completion. These are some of our thoughts so far. We welcome your feedback.</p>
<h3>Drupal and Project Management</h3>
<p>Two of the challenges faced in every project are the task of identifying milestones and distribution of work.  Many systems and methodologies have been created to help address these issues but there is little information about using these practices in Drupal development.  This post is an attempt to identify a methodology and tool set for managing the development of a Drupal based project.  I'm going to outline both the modules we use and the process we take to take projects from a conceptual overview to a finished item.  The goal of this process is to allow for both in-house development as well as remote development while providing the mechanisms to evaluate progress.  The information in this post is by no means a definitive solution.  We'd be interested in hearing how others are approaching this problem with Drupal.</p>
<h3>Modules and Tools</h3>
<p>Before getting into the process let's take a look at the modules being used in this process.  We are running our project management site on <a href="http://drupal.org/drupal-5.1">Drupal 5.1</a>.  Each project will be entered as an <a href="http://drupal.org/project/og">Organic Group</a> so that we can track content on a project basis.  <a href="http://drupal.org/project/casetracker">Case Tracker</a> will be used to create cases or tasks to assign to developers and themers.  Once a fundamental understanding of the client's needs are in place a <a href="http://drupal.org/node/284">book</a> is created.  The <a href="http://drupal.org/project/cck">Content Construction Kit</a> is also utilized to allow for cases to be related to book pages that will be created to visualize the project.</p>
<p>In addition to Drupal we use <a href="http://subversion.tigris.org/">Subversion</a> to manage client documents, meeting information and media as well as development code.</p>
<h3>Methodology</h3>
<p><a href="http://www.extremeprogramming.org/">Extreme Programming</a> was utilized as a basis for the methods outlined in this document.  It is a good system that has proven itself over time.  We needed to balance the full gamut of Extreme Programming with a workable solution that integrated itself with Drupal.  As a result, we focused primarily on the concept of "Use Cases" and spent most of our focus in determining what the project needed to have to be considered successfully complete.</p>
<h3>Information Gathering</h3>
<p>The first step involves a high level of customer communication as the requirements for the project are extracted.  Each client has a decent concept of what they want but typically has little understanding of how their needs map to Drupal.  During this stage any information that can be received from the client is valuable.  A new project is created in Subversion to track the documents and notes we gather from the client.  Generally this structure is followed:</p>
<ul>
<li>svn root</li>
<ul>
<li>client name</li>
<ul>
<li>trunk</li>
<ul>
<li>docs</li>
<ul>
<li>client-docs</li>
<li>client-notes</li>
<li>design-comps</li>
</ul>
<li>www</li>
</ul>
</ul>
</ul>
</ul>
<p>Client communications including office documents, pdf files, and text files are stored in client-docs.  Meeting and developer notes are placed in the client-notes while design comps are stored in design-comps.  Once development begins, code is stored in www.</p>
<p>Typically we have up to three developers involved in direct client communication to extract requirements.  It is the responsibility of these developers to formulate the first ideas of what will be necessary to implement the client's project.  Once all relevant information is recorded in CVS a project manager begins the process of translating the information in the svn repository to a Drupal book.  Design comps and initial requests from the client should be finalized before the initial creation of the book pages.</p>
<h3>Organic Groups, CCK and Case Tracker</h3>
<p><a href="http://drupal.org/user/9034">Morbus</a> is the maintainer of the casetracker module and posted a good explanation (<a href="http://drupal.org/node/105808">here</a> and <a href="http://lists.drupal.org/pipermail/consulting/2006-October/001349.html">here</a>)  on how to approach the integration of these modules.  There is also an <a href="http://drupal.org/node/113857">issue on drupal.org</a>.  It is worth reading to understand why we are approaching this problem in the fashion we are.</p>
<p>We begin the process by creating two new content types <em>Client</em> and <em>Case</em> at q=admin/content/types.</p>
<ul>
<li>Content Type - Client</li>
<ul>
<li>Name -&gt; Client</li>
<li>Type -&gt; content_client</li>
<li>Title field label -&gt; Company Name</li>
<li>Default Options -&gt; Published</li>
<li>Default Options -&gt; Create new revision</li>
<li>Default comment setting -&gt; Disabled</li>
<li>Attachments -&gt; Enabled</li>
</ul>
<li>Content Type - Case</li>
<ul>
<li>Name -&gt; Case</li>
<li>Type -&gt; content_case</li>
<li>Title field label -&gt; Issue Description</li>
<li>Default Options -&gt; Published</li>
<li>Default Options -&gt; Create new revision</li>
<li>Default comment setting -&gt; Read/Write</li>
<li>Attachments -&gt; Enabled</li>
</ul>
<li>Content Type - Knowledge base Book page</li>
<ul>
<li>Name -&gt; Knowledge base Book page</li>
<li>Type -&gt; book</li>
<li>Description -&gt; Use this for creating knowledge base content -- reference, etc. that might be useful to client's ... or ourselves.</li>
<li>Title field label -&gt; Title of Page</li>
<li>Default Options -&gt; Published</li>
<li>Default Options -&gt; Create new revision</li>
<li>Default comment setting -&gt; Read/Write</li>
<li>Attachments -&gt; Enabled</li>
</ul>
</ul>
<p>After adding the content types we need to use CCK to add a few fields. If you are following along with this post this happens at q=admin/content/types/content-case/fields.  We are going to add 2 fields: Description and Related Book.</p>
<ul>
<li>Field Type - Description</li>
<ul>
<li>Widget -&gt; Text Field</li>
<li>Label -&gt; Description</li>
<li>Rows -&gt; 8</li>
<li>Help Text -&gt; Description of problem/task/feature.  For problems please include the steps required to reproduce the problem.  For features please include the functionality and the motivation for the feature.</li>
<li>Text processing -&gt; Filtered text (user selects input format)</li>
<li>Default comment setting -&gt; Disabled</li>
<li>Attachments -&gt; Enabled</li>
</ul>
<li>Field Type - Related Book</li>
<ul>
<li>Widget -&gt; AutoComplete Text Field</li>
<li>Label -&gt; Related Book</li>
<li>Data settings -&gt; Multiple values</li>
<li>Help Text -&gt; Description of problem/task/feature.  For problems please include the steps required to reproduce the problem.  For features please include the functionality and the motivation for the feature.</li>
<li>Text processing -&gt; Filtered text (user selects input format)</li>
<li>Default comment setting -&gt; Disabled</li>
<li>Attachments -&gt; Enabled</li>
</ul>
</ul>
<p>Now that we have both our custom content types and our custom cck fields defined we are going to attach the fields to the content type content_case.  Content_case is the (q=admin/content/types/content-case/add_field) only content_type we need to add field_description and field_related_book to.</p>
<p>The last configuration item we take a look at is the Organic Groups configuration at q=admin/og/og.  We are interested primarily in the <em>Group Home Page</em> section.  We want to provide the "river of news" Group Home page focused on the Client node type we just created.</p>
<h3>Project Book</h3>
<p>The project manager is now responsible for reviewing the notes and documents stored in svn for the client's project.  As the notes are absorbed the project manager creates a book that stores the raw structure of the project.  This structure identifies all of the necessary modules, views, pages, processes and users of the system as it relates to Drupal.  When I perform this process, I often start with the following basic index for the book:</p>
<ul>
<li>Blocks</li>
<li>Modules</li>
<li>Pages</li>
<li>Processes</li>
<li>Users</li>
<li>Views</li>
</ul>
<p>Time is then spent translating the client documentation that is stored in svn to the book pages.  Each child page in the above tree is filled in to the best of the project managers abilities.  Even though most of what is recorded in the book is normally represented and stored in svn it is entered directly into the book vs. referring to svn.  This allows for a simple environment both client's and developers can collaborate in.  Design comps are inserted to visually describe key areas.  Once the development staff agree that all items are represented correctly, the client is invited to evaluate the book.  Many times it is prudent to sit down with the client and help them evaluate the book.  Once the client agrees that their project is represented accurately in the book a requirements freeze is put in place.  Ideally, no new changes or functionality are introduced and both the client and the developers have a solid picture of what will be delivered.</p>
<h3>Introduce the Case Tracker</h3>
<p>Once everyone is in agreement with the contents of the book, the project manager takes each page of the book and generates a ticket that represents the functionality described.  Because of the modifications we made earlier, each case can be related back to one or more book pages.  When you create the case you will have a <em>Related Book</em> area that supports free tagging.  Typing the title of the parent book page is sufficient to relate the case to the book.  CCK uses the title to create a node reference to automatically display a list of related cases on a books page.  Once all book pages are represented as cases, the project manager prioritizes to create the small releases suggested by the Extreme Programming model.   The core functions needed to complete other tasks are given the highest priority and collectively form the first milestone or release.</p>
<h3>The "Release" Cycle</h3>
<p>The Extreme Programming model is a proponent of many small releases intermingled with constant customer communication.  While not always practical to have that level of customer interaction, it is a good idea to have an internal meeting to evaluate progress.  During this stage each member of the development team gives feedback on the project and the direction it is taken.  Items that have been missed in the original project plan are identified, documented in the client's book and distributed through the case tracker as necessary.</p>
<p>The next milestone or release is set by re-prioritizing the remaining tasks.  Development work resumes and the "Release" cycle repeats.  The final rounds of this cycle tend to focus heavily on theming indicating you are getting close to a final release.  Once everything is complete a final internal meeting takes place in which the entire project is evaluated against the content of the client's book.  Once the development team agrees it meets the client's expectations, the client is invited to evaluate the work that has been performed.  If changes are requested by the client, the book is modified and the process continues until the client is satisfied.</p>
<h3>Not a Perfect System</h3>
<p>While this is not a perfect system, it does make considerable progress towards using Drupal to help manage a team of developers and ensure the product they create reflects the needs of the client.  It is important to remain flexible and understand that no matter how well executed the project may be the client's end goal is always an elusive target.  If you have additional ideas, methods or tools that could improve this process we would love to hear them.</p>
    ]]></content>
  </entry>
</feed>
