Wouldn't it be great in your personal life if you had unlimited resources - unlimited personal time, unlimited money, unlimited space to hold everything that you buy? Don't think about that too long, because unless your last name is Trump or Hilton, most of us have constraints. We have to work, we have checking accounts with limited money, and therefore have constraints about what we do and what we buy in our personal lives.
The same holds true in our professional lives. For this discussion, I'm going to expand projects to be defined as a "series of tasks" in order to include as many of you as possible. As we are performing those tasks, we don't have the "blank check" to do whatever we would like to do. Sometimes the ideal way of performing those tasks isn't realistic. So what is reality you ask? It is defining the tasks that you perform based on particular constraints that exist within a business. The better you understand these constraints, the more realistic you will be in implementing those tasks. By defining the "round hole" using these constraints, you won't put frustrated later in trying (and wasting your time) to place your "square peg" into the round hole.
Constraint of Time - We don't have all the time in the world. There are only so many hours in a day, week, month. There are times we need to take a vacation, training or end up being sick. Plus, there is an expectation from the customer that things should be done in a reasonable time. What is reasonable time? You will need to determine but you must not exceed it.
Constraint of Budget - Most larger projects have a budget of what can be spent both labor and non-labor costs (equipment, training, travel, food, etc.). If your project doesn't, at least your company has a budget to follow. Budgets can be broken if reasonable, but you need to get approval from the project stakeholders. There usally is some wiggle room but not much. There is NO project worth breaking the bank (unless you are a startup and the project is to develop the product or service you are to offer and you won't make money until you have it ready).
Constraint of Skills - Even if you come up with a great idea, you may not have (or can obtain) the people with the right domain expertise to pull it off - either from the business or technical side (or both). You must determine who you have available and whether they can accomplish the goals. If they cannot, you should at least postpone the project until you have available resources. If the people have some skills, you should allow for rampup time either on the job or through training until they get up to speed.
Constraint of Dependencies - Some projects stand on their own, but many are dependent on either concurrent projects or future ones. You must understand those dependencies and make sure that everything is falling into place. Many people focus too closely at the project at hand, and accept when dates change but don't realize the impact to other projects. This is particular important when you are working on a project with a third party.
Constraint of Customers - If customers cannot use the results of your effort, you have failed. You must understand what your audience is capable of learning and make sure that your solution is both usable and simple enough for them to get it. If you have a highly technical and educated customer, you might be able to provide more complexity, bells and whistles. You must understand the breadth of customers you have in order to meet the most of their needs.
Constraint of Competition - You have to keep an eye out on competitors and what they are doing. If they decide to change direction, you might have to as well. You need to be careful that you are tracking what the industry is doing and not just following suit (and thus producing something that is just as worthless to you as your competitor). You don't control what you competitor does, but you may need to react to them in order to maintain a competitive advantage.
Constraint of Quality - You can't put out junk, you also cannot guarantee 100% quality (or zero defect in our arena - software). You must determine what level of quality is acceptable for each project and make sure that everybody involved in the project achieves that goal (not just the testers or the beta customers).
Constraint of Technology - Technology may not be ready to accomplish the goals that you have or they are too expensive because of costs or instablility. You also need to factor in that some technology may be changing at a pace that is faster than your product, and that by the end of your project there are significant changes. You can't let that happen, and need to allow for adjustments (i.e. upgrades or integration) throughout the project.
Constraint of Risks - Risks are inherent to any project. It is important to identify those risks as early as possible in the project, their probably and impact, and what contingency plans you have when the risk occurs. Even with all of that, you may be taking on more risks than you can afford and asking for trouble along the way. Understand with the stakeholders how much risk is too much and when to postpone (or even cancel) a project when that is the case.
Constraint of Need - If you haven't prioritized your projects and tasks based on customer need and value, stop right now and do so. Even if you are sure you are working on the highest need and value at the time, customers are either fickle or situations change that could cause other work to take priority. Monitor that during the project and allow for a certain amount of change. If there is a chance that needs will change more quickly, shorten the size of project to accommodate. There is nothing worse than having a team of people half way through a project and have them change gears. Find ways to avoid that situation.
Constraint of Resources - Resources aren't just people, but space, equipment, communications, training and other things needed on the project. Even if you have the money to add more people to the project, you may not have the space for them. You may not have the space to set up a complete testing environment and will need to rethink what is possible with your given space. Understand what your limits are and whether or not you can "outsource" them.
If you are a project manager, make sure you are considering and asking the right questions to determine what these constraints are and how you addressing them in the project. If you a team member or working on projects by yourself, make sure you have a clear understanding on these constraints from your manager before implementing your tasks. There are no absolutes or ideals on projects, there are many compromises you must make by balancing these various constraints. However, compromise in this case doesn't have to be a bad thing, in that you are trying to accommodate the best of all situations in order to meet the most needs. If you find you are on a project where there is too much compromise and nobody will be satisfied, you should seriously consider cancelling the project because it may be doomed from the start.