Constraints Are Necessary When Building Custom Software

Say someone wants you to build them some custom software. What are you going to build? How long do you have? What platform will you build it for? You can do anything you want. No constraints. At first glance, this might be exciting for someone who wants to let their creativity abound.

How do you even begin something like that?

While this scenario might be a bit unrealistic, I’m sure you’ve experienced something like this before. Perhaps you don’t have a release date for your project, or maybe there’s no strict budget or required set of features. One way or another, we’ve all worked within some form of ambiguity.

So, then consider the other side of it: The client has a clear vision, a clear timeline, a clear execution strategy. There are tight constraints. At first glance, some people may be unexcited about the perceived lack of opportunities for creativity or scared of an overbearing client. But this project sounds like a dream for me.

For example, I started thinking about a blog post topic a few days ago and was overwhelmed with the number of possible topics. I started, scrapped, and switched topics three times. I had no constraints when I started writing each of those posts and was unable to narrow things down to a clear point.

But as of writing this, I’m sitting in the car with a dead laptop and no charger. Suddenly, the number of viable topics I can talk about has dropped dramatically, as I can’t reference any code to write about a more technical subject. I finally have some constraints!

Filling the Constraint Void

Parkinson’s Law states that “work expands so as to fill the time available for its completion.” Indeed, time is just one of many constraints in a software project. With less time available, some form of success can usually be found (within reason). There are other metrics or levers, though, that can act as constraints in a project.

At a high level, in a software project, the three primary constraints are time, scope, and budget. Another metric, quality, is affected by these three, but I don’t see that as a lever that we can control. High quality software is at the heart of what we deliver at Atomic Object. But, we work with clients and stakeholders to adjust the big three constraints to find success in a software project.

At a more micro level, we need to place constraints, real or artificial, around work we do in a day. Working in no-mans-land without clear constraints is a recipe for disaster. Taking Parkinson’s Law into account, if we don’t set a constraint for a task or project, it can grow to fill an infinite bucket, and may never be completed. This is why the Pomodoro technique is so effective. It forces a constraint on a schedule, rather than letting a project grow to fill a limitless void.

Setting Constraints

If there are no constraints, work toward adding them to a project. Plan with product owners, or perform spikes to discover technical limitations. Actively work to remove the unknowns. If there aren’t real constraints, such as a planned release date or technical feasibility, consider adding artificial ones. These don’t always even need to be communicated to other people; perhaps it’s just a plan in your head.

A common one that I end up setting for myself is a time constraint: committing to finishing a feature in two days, or a blog post in an afternoon (in the car 🙂). Maybe it takes longer than that, but at least that’s something to work toward.

For example, when I have guests coming over and I have a whole day to clean the house, it will take me a day. If I have an hour before guests arrive, it will take me an hour. I may rush or cut corners in some areas, but suddenly a whole day of work seems unnecessary. If I give myself an artificial constraint of cleaning for an hour at the beginning of the day, I may work past the hour, but then I can relax without the stress hanging over my head.

Another example of an artificial constraint is behavior. Decide yourself or work with a product owner to define the behavior of a feature of an epic.

The Need for Constraints

If you feel like you’re floating in the ether of the unknown, you’re lacking constraints. Discover them. Make them up. Whatever it takes. Constraints are a good thing.