There’s a lot of debate out there on the “best” way to manage a custom software project. Just Google “Waterfall and Agile” – there are over 2.2 million search results. In case you aren’t savvy to Project Management (PM) lingo, and I wouldn’t blame you if you aren’t, Waterfall and Agile are two popular styles of PM.

Waterfall is the “old school” style where each phase of the project doesn’t start until the previous one has been signed off by the client – like water flowing downhill over a series of waterfalls.

Agile is the latest PM craze because it provides a lot more flexibility for gung-ho developers in a creative process by building in frequent build & review cycles with the client. Designing and building custom software is a creative process, even though it isn’t generally recognized as such, but that’s a post for another time.

Both methodologies have been successful. People want to know which method to use for their project, and the answer is… it depends.

The Method Isn’t Going To Manage The Project For You

However, even once you’ve evaluated how involved your client is willing to be, what your team’s preference and working styles are, the type and scope of the project, and defined your end goal, neither one of these PM methodologies will guarantee success.

waterfalls-5Even though WaterfallPM can provide tight control over your project, you can still get into trouble with scope changes. As time goes on, the client’s needs can change. Adding in features or making major direction changes mid-point can cause the project to nosedive.

One of two scenarios often happen with Waterfall PM.

  • The project leads follow the standard change request process and determine the changes are going to come with a new, often larger price tag. Because the entire project has been planned out in advance, these changes can have major impacts. Clients can balk at increased costs, and entire projects can be compromised or even killed.
  • The project leads agree to take on the new changes but don’t follow the standard change request process. This can happen in the hopes of preserving the client relationship and the project by avoiding the uncomfortable conversation of cost increases. This can lead to diminished profit margins – or even put the development team in the hole.

A highly skilled Project Manager knows how to navigate these pitfalls, and the best will be able to see these changes coming ahead of time, allowing for conversations earlier on (and with less expensive impact).

In contrast, the flexibility of Agile development is very appealing to many experienced developers. However, it isn’t well suited to every type of project.

  • Agile projects are notorious for a lack of solid documentation. The quick pace and frequent changes can lead to outdated process documents, user manuals, and even client communications. Adequate PM can require a tight control over information flow.
  • If the end product is already well defined with very small chances of the client’s needs changing, then the frequent client feedback cycles can be time consuming and unnecessary demands on the client’s time.


PM methodologies are intended to make your life easier, but you still have to do the work. An experienced Project Manager will craft the right balance of current documentation alongside short build & feedback cycles, and can identify ways to keep the client’s interaction to a minimum. An effective manager also communicates well with the development team, fostering a high level of understanding among team members and stakeholders.

Achieving Project Success

In short, success comes more from a competent, supportive, and proactive Project Manager who utilizes whatever method is chosen in an efficient and effective manner than from the methodology chosen.

That’s why utilizing the right PM person is still the most important approach to take.

There is a PHP error message so common that the web-o-sphere is littered with literally thousands of posts asking what it means. Dozens of WordPress plugins are affected as well as untold numbers of other applications written in PHP. I encountered this error in PHP apps so often that I have avoided PHP with almost a religious fervor. Today I think I understand the problem.

The PHP user base is constantly asking what these error/alert/notices mean. By and large these questions go unanswered. That indicates an unhealthy state of affairs for the end user. I have read many posts in the PHP community that say turning off the error display is an acceptable way to deal with these errors. I disagree.

Suppression of known faults is not a wise development practice. It leads to obscure problems that are hard to diagnose. It is worthwhile to add a little bit of code that does away with the notices while in debug or system configuration mode. Proper operation with error display enabled confirms that the application code is correctly dealing with environment state.

Here is a simple way to handle the condition in a deterministic manner. For the non-technical reader, please accept my apologies for the geek speak. For the technoids, I have tested this here with success. Your mileage may vary so check with your mechanic if something is less than perfect when you try it.

The Setup
WordPress 3.4.1 running on Apache 2 and Centos 5.
Any and all other plugins are deactivated

By the way, deactivating everything except the new plugin, or whatever, is highly recommended for installing any third party components in anything anywhere.

The Problem
Install something new via WordPress “Add new plugin” install feature. When you activate it WordPress reports “The plugin generated XXX characters of unexpected output during activation. If you notice “headers already sent” messages, problems with syndication feeds or other issues, try deactivating or removing this plugin.
Now there is a truly beneficent message. I wish the US Congress came with a warning like that. In WordPress, this means the program code did not load properly.

If the web site has the PHP error display feature enabled you are treated to the ever popular “undefined index” error in the top part of the web page:
Notice: Undefined index: GoThinGee in .../wp-content/plugins/wp-asaet/wp_amazingly_simple_and_easy_thingee.php on line XXX

Take a peek at the line mentioned in the error message; you are likely to find a snippet of code that looks something like this: if($_POST['GoThinGee']). “$_POST” is an array inside an IF statement. In most cases, the array will have stuff in it, including the value named “GoThinGee”. In the case we are looking at today the array is utterly empty and the error is that the index “GoThinGee” is not part of the array.

It only happens when the application is loaded. This can be considered a “threshold” or “initial state” problem.

The Solution
Adding a bit of defensive code to create a known state in the app environment is all that is needed to avoid the “undefined index” condition. This accomplished by assuring that the array $_POST has a set of index names with reasonable values.

In most applications, it is best to use a human readable value such as the string literal “undefined” to initialize the array. However, the application we used for this article has a large body of existing code that assumes a valid array of empty strings. Using a human readable term such as “undefined” would require changing a great deal of the existing code. For this reason, the initialization value is a pair of single quotes.

This extra code must be added prior to any evaluation of the array $_POST.

// August 20, 2012, mophilly; set default values to stop undefined index errors.
$default_string = '';
$_POST['GoThinGee'] = $default_string;

What this bit of PHP code does is add an index named “GoThinGee” if it does not exist. The new index is initialized with the value of $default_string.

I hope this helps someone.