Blog
Why Adding Resources Doesn't Always Help
Those who've read the book The Mythical Man-Month: Essays on Software Engineering know the mantra Adding manpower to a late software project makes it later. But why does it make it later? How many resources should you put on a project to optimize the delivery date? How do you explain and justify to the customers and teams the optimal number of resources to be on a project? How do you explain that adding more than the optimal resources won't make the delivery date sooner? Resource saturation is my answer.
Optimal Delivery Date And Optimum Resources
I started with a simple premise for planning project. Something that was a known size, I could add as many resources as possible, but the delivery date needed to be as soon as possible. I don't often get offered unlimited resources, so I was intrigued with the plan. Some assumptions I noted for estimation.
- The scope was 24 man months effort
- The lowest granularity of the work is one month
- There are no critical path dependencies between 24 work items
- There is zero ramp up time for adding a resource to a project
- There are no vacations, sick time, or holidays
- 1-24 resources could be added
- Optimize delivery calendar time
- 10% communication time between team members (four hours per week)
Adding resources to a project helps initially. Once the team reaches a certain size, the amount of time saved by adding an additional resource has very little impact on the delivery time. I used a factor of 10% of the time per resource spent in just communications (e-mail, meetings, discussions or interactions with other members of the team). That number is likely too low compared to an average organization and likely unrealistically low for large organizations which have a significantly higher communication overhead, but for the initial optimization of resources, it doesn't really affect the optimum number of resources by a significant amount of calendar time. I built a simple spreadsheet to do the calculations. My spreadsheet had more detail, but hopefully you get the idea.
- 1 resource, 24 months
- 4 resources, 6.4 months
- 6 resources, 4.6 months
- 8 resources, 3.4 months
- 12 resources, 3.2 months
- 16 resources, 3.1 months
We can see that four resources instead of one cuts the time to 25% of the original 2 calendar years. Six resources, cuts it to about four months and two weeks. Eight resources, cuts it down to three months and two weeks. From there, it takes an additional four resources (for a total of twelve) just to bring the delivery date in one week earlier (3.2 months). Doubling our eight resources to sixteen only saved two weeks on the calendar time delivery. What happened? We hit resource saturation. I put together the image below to show what resource saturation looks like and how adding resources affects the project time it takes to complete the work.
Resource vs Time
Resource vs Time showing resource saturation above eight resources.
If only 10% of developer time was spent in communication, by the time we hit 10 resources, we had the equivalent of one full time person doing nothing but communicating. That causes and interesting thing to our costs. As we add resources, we are adding communication to the team. That adds costs, which goes up non linearly.
Resource vs Cost
Adding more than eight resources didn't affect our delivery date by more than two weeks, but adding more, certainly increases our costs. Optimizing both resources and costs gives us a a good range for planning. I've rounded the numbers up to the nearest week. This is the type of information that we might need to present to a team or a customer. This doesn't take into account vacations, sick time, or holidays, but it does give a rough number for resource planning and allocation.
- 6 resources for 4 months and 3 weeks
- 7 resources for 4 months and 1 week
- 8 resources for 4 months
We now have enough data to logically explain planning questions.
- How long do we anticipate the project to take? Approximately 4 months with 8 resources or 5 months with 6 resources.
- Can the project be completed in two calendar months? No, regardless of the number of resources, the full scope can not be complete in two months.
- Can the project be completed in three calendar months? It may be possible, but it's unlikely it can be completed in three months.
The most significant thing that can be done to improve the delivery time is to prioritize the features and delivery less feature and function in a shorter time and then follow with a subsequent release with the remaining function. The next most significant thing that will affect the delivery date is the injection of overtime. While I'm not a fan of using overtime for planning, once resource saturation occurs a 10% increase in time can shorten the delivery date because it doesn't typically add an increase in ramp up time or an increase in communications to the team. Planning more than 10% overtime over any extended period of time is unsustainable and unrealistic planning.
Adding Resources Makes a Project Later
We found an optimal number of resources, and an optimal time and delivery date, but I still haven't answered the question, why does adding resources make a late project later? Once resource saturation is achieved, adding resources to a project underway does two things.
- It Increases the amount of time that an existing team member must spend in explaining what has been done already and what is planned. This increases the overall communication time spent by the team.
- It increases the amount of ramp up time that a resource must spend on learning what has been completed already.
I was reminded of this both by prompting from a customer and by an article Jeff Atwood wrote on Revisiting The Facts and Fallacies of Software Engineering.
The model I show doesn't exactly simulate adding resources to a late project, but it does show what happens when communications is increased. Instead of having 10% communication, what if we increase the model to 33% communication overhead, what happens?
Instead of decreasing the time to delivery, it actually takes more time. 24 resources take the same amount of time as 3 resources. After resource saturation, adding resources makes projects later.
Related Items
Help Generation Tools
Help authoring tools like RoboHelp and Doc To Help provide the ability to generate PDF, Word .DOC, and compiled html help (.CHM) from a single HTML source.
Some time ago, I needed the ability to generate other forms of documentation for help files other than HTML. The original content was authored as a standalone simple HTML (h1, h2, ul, ol, dd, dt, p, etc.) with images and used a common style sheet. I needed the ability to generate other forms of documentation that could be printed and transmitted over the Internet to clients (Word documents, PDF, etc.).
Requirements
The general requirement was for end user help for administration screens, not for programmer internal object or API help. There are further tools that are more suited for generation of programmer API documentation (like Microsoft Sand Castle on the Codeplex Sand Castle site)
- Help documentation was originally written in HTML pages (standalone read from files, no ASP.NET or IIS Server)
- Generation and distribution of standalone PDF’s
- Generation and distribution of standalone .CHM (Microsoft Compiled Help)
- Generation and distribution of standalone HTML files viewable in Internet Explorer
- Generation and distribution of standalone Microsoft Word.doc files.
- HTML Used as primary Help and displayed in IE.
- Table of Contents written in HTML Pages
- Include HTML Images in all output (PDF, DOC, CHM) without requiring re-work.
Help Authoring Tools Evaluated
- RoboHelp by Adobe new $999, upgrades from $499
- Doc To Help by Component One new $900, upgrades from $500
- Microsoft HTML Help 1.4 SDK - Free
In evaluating the tools, I already had existing HTML documentation with images present. If I were creating a new documentation solution from scratch, I might have chosen a different tool or approach.
The Microsoft HTML help compiler generates .CHM files from HTML, but it does not generate Word .DOC, or PDF formats so this didn't meet the requirements. Both RoboHelp and Doc To Help utilize the help compiler to generate the .CHM files.
Doc To Help generated CHM files, PDF files and Word Documents, but generation of documents took a very long time (i.e. 20 minutes or more). The output of the images in the PDF and Word Document was problematic. I never could figure out how to generate the "contents" of those documents correctly.
RoboHelp generated the CHM files, PDF files and Word documents fairly quickly (less than 5 minutes). The images were placed correctly, and with only minimal work I was able to generate the table of contents for all documents correctly.
Both tools provided the ability to edit HTML content, but this wasn't really utilized since all content was already in HTML format. Both tools also provided the ability to utilize the existing CSS style information when it generated the documentation.
Robohelp was selected because it was significantly faster and had fewer errors in generating the required output than the Doc To Help product. Doc To Help would have required further investigation and “manipulation” of the original HTML source in order to generate .CHM or .DOC files without errors. It's been used for several revisions of the documentation and it still works fine.
RoboHelp has also been a consistent Award Winning help generation product and has won the Best .NET Products of 2007 for Help Authoring.
Differences In Output
Why generate different output formats? Each format has unique features that the other formats don't offer. Some clients reviewing our documentation prefer one format over the other. In particular, many clients prefer the ability to print the full set of documentation for review when evaluating the product. Each format helps support the sales cycle as the circumstances dictate. Printing in HTML and CHM formats is listed as poor because these formats only allow printing one page at a time.
Format | Size in bytes | View | Search | |
HTML | 15,398,787 | Excellent | Poor | Poor |
CHM | 4,431,489 | Good | Excellent | Poor |
DOC | 6,974,976 | Excellent | Average | Excellent |
3,538,957 | Excellent | Average | Excellent |
Sample Output
HTML Help sample viewed in Internet Explorer
PDF Help Sample Output from RoboHelp
Microsoft Word Sample output from RoboHelp
Compiled Help Sample output from RoboHelp
API Documentation Tools and Links
- Sand Castle on Codeplex and Sand Castle Docs
- DocumentX by Innovasys about $594 USD for one user, 2008 version
- NDoc on Sourceforge - no longer updated
- VB Commenter in Power Toys for Visual Studio - No longer needed in Visual Studio 2008
Related Items
Best Company Ever Award For LOD Checklist
We strive for good quality, a job well done, making the client happy. Having a customer or client that is so enthusiastic about a solution my team and I delivered that they use dramatic phrases like “improved the way we do business and increased our competitive advantage” from Bob Ulrich the chairman and CEO and “Life just got simpler in our stores” from Craig Lindner Senior Manager, Store operations both from one of the largest retail organizations in North America can only be described as an honor and a privilege.
Last week I was at Target Corporation in Minneapolis for the formal presentation of the “Best Company Ever” team recognition award to the Target TTS team for the LOD Checklist project. Junction Solutions provided the front end graphical solution, and approximately half of the numerous back end services for the LOD Checklist solution. I've been working as the project manager for this project at Junction Solutions for the last two and a half years.
Bob Ulrich Chairman and CEO Target Corporation
Target Managers Anand Sing and Pat Connolly
Related Items
Best Company Ever Award Invitation
For the last two and a half years, I've been working on helping Target corporation with a project to bring a dashboard reporting application to work on a mobile device. The project has been well received and so popular among store managers, that it's won an award within Target. Not just any award, but the Best Company Ever Award. It feels like winning an Oscar.
Why did it win? First and foremost for the vision the business leaders had in providing the software tools that make the day to day life of the store managers easier. The bottom line, it saves time, not just a little bit of time mind you, but a big chunk of time that managers had to spend getting data from multiple systems and from multiple printouts now combined into a real time display of events as they unfold in the store. Everything from unloading of stock on trucks to stocking of shelves and price changes. The vision didn't come easy. Numerous releases were put through the paces before the team hit on the award winning combination with a graphical interface that worked on a touch screen without requiring a stylus.
The second reason I believe it won was an extremely high quality deliverable. The last release provided for testing only had one issue reported against over 100,000 source lines. The high quality made for quick pilot and rapid deployment throughout the 1600 stores. The high quality allowed the team to focus on developing new features, and not become encumbered with extensive support issues.
The solution was developed by Junction solutions, and the development was completed by the development team at ISS India PLC. I was fortunate to participate as the project manager for Junction Solutions on this project.
Quick Application Stats
The application is a true service oriented application gathering data from numerous enterprise and store specific systems to present them in a seamless interface to the store managers.
- ASP.NET 2005 application
- SQL 2005 database for main response information
- Oracle database for news information
- Over 100,000 source lines
- 24 client screens (full IE and mobile device touch screen based layouts)
- 6 ISP .Net Services
- 1 POS .Net Service (Real time sales)
- 6 Headquarters Java based Services (Sales, Payroll, REDcard, Guest Survey, Birthdays and Anniversaries, Transitions)
- 15 admin screens
- 2 admin reports
Award Information
The Best Company Ever award at Target is presented twice a year to the project that is the “Best” overall project within the entire Target Corporation. The award is selected from all projects (not just IT) within the company and was awarded to the October 2007 release of iLeader (Automated Leader).
The award invitation reads:
You deserve our highest recognition
Your team delivered more than major results on a major initiative. Your Energy, Enthusiasm, Execution and Excellence demonstrate what it means to be the Best Company Ever.
You did it!
Thanks to your work in creating a new tool that delivers real-time actionable information through an easy-to-use, easy-to-understand interface, leaders on duty now get an instant big-picture view of store performance in the palm of their hands. This ultimately helps them operate their stores more efficiently and deliver on our “Expect More. Pay Less.” Brand promise for our guests.
The formal presentation of the award will be Wednesday, March 19, 2008 by the president and CEO, Bob Ulrich.
Related Items
Sites For CSS Design Themes
Don't pick a web site engine (blog, CMS, or other), unless you have the ability to customize the style. A web site should have the ability to change designs over time as personal preferences, and desired style and color preferences change. Sites using a site builder tool require a lot of hand coding or a complete re-generation of the site. This can add additional cost or time to customize. Sites that use a theme engine can be modified or changed quickly with minimal cost or time.
For a better example of what theme switching can do, see Themes Galore.
Engines that use a theme engine to allow quick styling and deployment include the following.
For a more extensive list of Content Management Systems (CMS), refer to the post on 50 Content Management Systems.
Some of the more interesting CSS templates, or themes I've seen are listed below. These themes include the CSS and the templates uses for posts, pages, headers, footers, etc.
- Arcsin CSS Design Templates
- Themes.Wordpress.Net
- Bloggger blogspot templates
- Free CSS Templates.Org
- Free CSS Templates.Com
- StyleShout.com
- Wordpress Themes Free
- 83 Beautiful Wordpress Themes You Probably Havent Seen
- Template World
- 4 Templates
- SnowCovered - DotNetNuke Skins
- Css Template Heaven
Tags: Free themes, CSS templates, Wordpress themes, XHTML templates
Related Items
BlogEngine.Net Secret Links
BlogEngine.Net provides quite a lot of very rich functionality, but the rich functionality is not documented as extensively. I've tried to put together a list of all the types of links that BlogEngine.Net supports.
Posts
- http://tim-stanley.com displays the home page. The home page can be configured to show a specific page, or the most recent list of posts.
- http://tim-stanley.com/blog.aspx displays the list of first blog page entries, even if a page is configured to show a specific page first.
- http://tim-stanley.com/post/{Post-Name}.aspx displays a specific post.
- http://tim-stanley.com/2008/Default.aspx displays posts for a specific year.
- http://tim-stanley.com/2008/03/Default.aspx displays posts for a specific month.
- http://tim-stanley.com/2008/03/07/Default.aspx displays posts for a specific date.
- http://tim-stanley.com/author/{author}.aspx displays all posts by {author}.
Pages
- http://tim-stanley.com/page/{Page-Name}.aspx displays a specific page.
Categories
- http://tim-stanley.com/category/{Category-Name}.aspx displays a list of posts with the named category.
RSS Feeds
- http://tim-stanley.com/syndication.axd
- http://tim-stanley.com/category/syndication.axd?category={GUID} category syndication feed.
- http://tim-stanley.com/syndication.axd?post={GUID} - comment syndication feed.
Special Links
- http://tim-stanley.com/archive.aspx displays a list of archives grouped by category.
- http://tim-stanley.com/contact.aspx displays a contact e-mail entry form.
- http://tim-stanley.com/error404.aspx displays the custom file not found error page.
AXD Handlers
- http://tim-stanley.com/file.axd used for file downloads.
- http://tim-stanley.com/image.axd used for images, i.e. src="/image.axd?picture=SomeImage.jpg".
- http://tim-stanley.com/syndication.axd used for RSS feeds.
- http://www.tim-stanley.com/sitemap.axd used in robots.txt to create a sitemap for search services.
- http://tim-stanley.com/trackback.axd
- http://tim-stanley.com/pingback.axd
- http://tim-stanley.com/opensearch.axd used for open search results. If the link was found by a search result from another site, the site will display other "similar" pages that match the search criteria.
- http://tim-stanley.com/metaweblog.axd used for MetaWeblog API defined at XMLRPC.com for services like Windows Live Writer, Flickr, Google Docs and others services to allow post, edit, or deleted posts or pages on a site.
- http://tim-stanley.com/rsd.axd RSD handler used to publish the links used by services to read, edit, or work with the site.
- http://tim-stanley.com/css.axd CSS compression handler.
- http://tim-stanley.com/js.axd JavaScript compression handler, i.e. src="/js.axd?path=%2fblog.js".
- http://tim-stanley.com/rating.axd rating feedback handler.
- http://tim-stanley.com/opml.axd handler for OPML at OPML.org that allows sharing of site information.
- http://tim-stanley.com/monster.axd
- http://tim-stanley.com/blogml.axd blog export / import XML standard at blogml.org. Supported on engines like CommunityServer, Subtext, DasBlog, .Text, and others.
- http://tim-stanley.com/sioc.axd handler for SIOC that allows sharing of data based on profiles for content, author, comments, and sites. Read more on the SIOC Implementation for BlogEngine.Net.
- http://tim-stanley.com/apml.axd handler for APML.
Related Items
How to Remove Projects in the Visual Studio Project MRU List
Visual Studio.Net (2003, 2005 and 2008) keeps a list of recent projects shown on the Start Page in the IDE. Sometimes when moving projects around on the disk, one can end up with duplicate names and this can be confusing. To resolve this, the list in the registry must be updated.
Visual Studio Recent Projects
Visual Studio .Net keeps it's list of projects in the registry. Depending on which version depends on which location the list is stored.
- Visual Studio 2002 - 7.0
- Visual Studio 2003 - 7.1
- Visual Studio 2005 - 8.0
- Visual Studio 2008 - 9.0
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.0\ProjectMRUList]
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\ProjectMRUList]
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\8.0\ProjectMRUList]
[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\9.0\ProjectMRUList]
There is also a FileMRUList that is maintained for individual files as well.
Warning: All the normal cautions to editing the registry apply. Editing the registry can corrupt your system. If you don't know what your doing and don't know how to fix it, don't even think about doing it.
The registry entry contains a list of files as REG_EXPAND_SZ values similar to what is shown below.
File1 - C:\Projects\Test\Test1.sln
File2 - %USERPROFILE%\My Documents\Temp\ReportTest.sln
File3 - %USERPROFILE%\My Documents\Projects\ReportTest.sln
All you have to do is find the entry that you want removed, and delete the registry entry.
Update: If you remove an entry in the middle of the list, then Visual Studio does not show any entries after the entry that is removed. For example, consider a list that contains the following registry entries before editing.
File1 - C:\Projects\Test\Test1.sln
File2 - %USERPROFILE%\My Documents\Temp\ReportTest.sln
File3 - %USERPROFILE%\My Documents\Projects\ReportTest.sln
File4 - %USERPROFILE%\My Documents\Projects\Solution4.sln
File5 - %USERPROFILE%\My Documents\Projects\Solution5.sln
File6 - %USERPROFILE%\My Documents\Projects\Solution6.sln
If you remove the entry for File4 then you would be left with the following.
File1 - C:\Projects\Test\Test1.sln
File2 - %USERPROFILE%\My Documents\Temp\ReportTest.sln
File3 - %USERPROFILE%\My Documents\Projects\ReportTest.sln
File5 - %USERPROFILE%\My Documents\Projects\Solution5.sln
File6 - %USERPROFILE%\My Documents\Projects\Solution6.sln
Visual Studio however, will show only the entries for 1 through 3. If you want entries after 3 to show, then you must renumber the subsequent entries to have the following.
File1 - C:\Projects\Test\Test1.sln
File2 - %USERPROFILE%\My Documents\Temp\ReportTest.sln
File3 - %USERPROFILE%\My Documents\Projects\ReportTest.sln
File4 - %USERPROFILE%\My Documents\Projects\Solution5.sln
File5 - %USERPROFILE%\My Documents\Projects\Solution6.sln
Josh Beach wrote a tool Visual Studio Project MRU List Editor that appears quite useful if you have to do this on a recurring basis. [1]
Updates
- May 22, 2007 - original post.
- Mar 8, 2008 - update with Visual Studio 2008 notes.
References
- [1] Visual Studio Project MRU List Editor codeproject.com
- [2] Visual Studio Project MRU List Editor II codeproject.com