Project, portfolio, program

Today, I’m starting out with a new series – focused on the PMP exam and meant as a preparation for it. Consequently, we are now moving back to “square one” and start with the basics to make sure we will use the proper terms.

What’s a project?

A project is temporary in nature, has a definitive start and end date. In PMI’s PMBOK Guide terms, a project is successfully completed when it delivered on the set goals and objectives – that also means that the involved stakeholders are happy with the outcome.

A stakeholder is anyone who has a vested interest in the outcome of the project (be it positive or negative). Obviously, a project manager needs to deal with stakeholders, because key stakeholders can make or break a project.

Projects only exist to deliver something new, like a new product or service, that doesn’t exist yet. Said products and services may range from something tangible like a car to intangible things like a new mobile service plan.

The features and characteristics of a project are commonly defined via progressive elaboration – I’d call it “agile specification”: it basically means that we start out with a rather rough plan at the beginning of the project and keep clarifying and making it more detailed over the course of the project. In principle, this is the only feasible way to deal with a project’s features anyways: when you launch a project, you simply don’t have all the facts and details on the table. A project sponsor will give you a vision and general idea of what he wants, but you’ll have to clarify that picture continuously to ensure you’re really delivering to his need.


In contrast – operations is ongoing and repetitive work that keeps going on without a set end date. Usually this means repeating a particular set of processes over and over again to deliver a specific output.

Nonetheless, it’s not uncommon to have a project extend into operations; this may happen for example when

  • developing a new product or service or changing an existing one
  • improving the product development or an operational process
  • in general – whenever a project reaches the end of a phase (and for example delivers to operations)

In summary

A project is

  • unique
  • temporary
  • has a definitive start and end
  • delivers something new
  • completed successfully after meeting the stakeholder expectations

What’s a program?

A program is a collection of related projects that are managed in similar and coordinated ways. Managing the program’s projects collectively allows one to deliver additional benefits which wouldn’t be brought to realization if the project’s were managed separately.

Therefore, the projects in a program work towards a common broader goal and deliverable. An example for such a program is a housing development program, which may consist of several projects – one for building construction, one for roadwork and traffic planning, another one for utilities and so on.

Programs primarily focus on managing project inter-dependencies and gaining a benefit from the connection.

What’s a portfolio?

A portfolio is a collection of projects, too. However, a portfolio’s projects aren’t necessarily managed in a collaborative way. Instead, they serve a common business objective, not a particular common goal.

For example, an IT company may have multiple “website development” projects in its “web development” portfolio; however, these projects do not serve a common customer or goal. They primarily deliver on the business objective to deliver websites to customers.

Portfolios therefore primarily focus on optimizing efficiencies over multiple independent projects – in regards to cost, resource, risks and schedules.

Installing PIP on Cygwin for PyGal

Well, this is a little off-topic, but nonetheless: lately I’ve run into the issue of installing PIP on Cygwin; I used a Python library called “pygal” to do some nice Risk Management charts and the most convenient way to get that running is via PIP.

Said library is usually installed via the Python plugin installer “PIP”.

While I started out on Linux developing the charts, I quickly realized that installing the library on a Windows machine might be a mixed bag of fun. However, after fiddling for about 15 minutes and doing some Google searches, I found a pretty quick resolution.

The error message I was seeing when I tried to run the regular PIP installer script:

Cannot fetch index base URL
Could not find any downloads that satisfy the requirement pip in /usr/lib/python2.7/site-packages/pip-1.2.1-py2.7.egg

First, make sure you have “curl” installed; then, simply start a Cygwin shell as administrator and get the PIP 1.2.1 installer package using CURL.

curl -O 

I recommend going with this installation package, because the regular, which you can get from the PIP project site simply falls over – particularly if you are behind a proxy, as it seems.

Afterwards, extract the package: in a Cygwin shell go to the directory you previously extracted and run

python install

Then, make sure to have the libraries libxml2-devel and libxslt-devel installed (I used the regular Cygwin setup.exe for that purpose); afterwards start a Cygwin shell and run

pip install pygal

and you’re good! From there on out you have PIP on Cygwin – ready and running to install any other libraries you might be interested in.

Project scheduling tools

Cleary, as the PMBok and the PMA baseline tells us, resource management and project scheduling isn’t the whole story in project management, but it’s an important part of it. That’s why I decided to go with “Project scheduling tools” as title for this article.

There’s this old saying that project management is really 90% communication. For me, this has been proven to be true many times over. Still, with the Internet around, social media and all sorts of new ways to communicate, it has become even more important to have a good plan for running your project(s).

There’s plenty of tools – some of them proprietary: e.g. Microsoft Project which now is available as standalone and online variant, there’s Merlin for Mac OS X. Many of the available tools are open source – e.g. ProjectLibre, GanttProject or TaskJuggler.

In the end, it’s really one’s personal preference (and also possibly corporate licensing standard) which pick the tool. Overall, these tools manage the same kind of problem:

  • building a work break down structure – creating phases and assigning work packages to them,
  • assigning the project’s resources to the work break down structure,
  • setting constraints on work packages and milestones and
  • last but not least schedule the whole thing.

Project scheduling

Project scheduling and resource allocation is really quite a complicated matter when a project grows complex; Googling the term “Resource Constrained Project. Scheduling Problem” or “RCPSP” for short may give you some impression on how much research is going on there. Even just building a work break down structure is complex enough that there’s books on the topic: I can highly recommend this one for example – it outlines a tool-independent paper based approach to building a WBS.

In principle, this scheduling problem is omni-present not just in project management but in IT departments and businesses in general, which try to succeed in an ever changing environment – they operate systems, provide services and strive to continuously improve their service offerings with a limited set of resources, which may be internal as well as external.

Having resource and risk management set up for regular service operation in addition to projects brings the same advantages to service management: whenever new requirements arise, problems need to be fixed or changes need to be implemented – they can be prioritized, scheduled and their impact be evaluated against expected gains and involved risks.

Depending on the complexity of the operation this may impose some additional overhead work. Oftentimes it’s necessary to rely on some tool to manage it. In the worst case scenario, one can use Excel to do some simple napkin math.

Task Juggler

Recently, I’ve used Taskjuggler a lot for project and work package scheduling.

While that tool offers a rather unusual way of approaching the usual GANTT chart creation, it has some very interesting features: it combines a feature rich text based project definition with a complex and powerful HTML report generation feature.

It’s a little bit like programming to get started, but once you get the hang of it, it can do what commercial tools like Project can do and then some more.

Additionally, there’s a very active Google group run by Chris Schlaeger, the creator of the tool. So whenever you’re stuck, you can post your problem and usually get an answer within a day – either by someone from the community or many times even by Chris himself.

To get going, you’ll need ruby installed – if you’re using Windows, you may want to install Cygwin beforehand. It offers a graphical installer and makes installing a breeze. Then, you can follow the TaskJuggler install instructions. Those usually are made up of one simple command: “gem install taskjuggler”. You’ll need administrative privileges to install Cygwin and taskjuggler. There may be ways of setting it up as portable installation but I haven’t tried that myself yet.

TaskJuggler’s user manual is a good place to start reading up on how it all works. When you’re done installing, simple move to the Getting started section and who knows, maybe we’ll meet on TaskJuggler’s Google group soon.