Placing Constraints

Constraints force you to commit to one path and follow it through. They force you to think creatively in order to work around them. They force you to focus your energies onto a smaller set of possible solutions. Adding constraints improves and accelerates creative challenge solving.

It may sound intuitively wrong, but the fewer restrictions you have on your work the more difficult it is to be creative. One of the crucial skills you need to learn is when and how to place restrictions on yourself.

Specs are a perfect example of self-imposed constraints that help enormously in producing a final product. Without the structure of agreed-upon specs you would have to spend much more of your time remembering what you're doing and how it fits with the last piece you built.

On the group level, specs are indispensible. Without agreeing on specs before beginning to code, it's almost guarenteed that your team's code will not work when you piece it together. By constraining yourselves to a set of specs, you are free as a group to take more liberties in implementation and workflow with the confidence that your project will work when everyone has finished their piece.


Common Constraints

Here's a quick look at the types of constraints a software developer will confront on a daily basis. While this list is written with developers in mind, you'll find that many of these sound familiar from your industry.

This list is long and it's not even near comprehensive. Rather than looking it as an enormous list of shutdowns, try thinking of it as a bunch of decisions you don't have to make. Free yourself!

Some common constraints when developing software:

  • The audiences:
    • A user must understand your applicaiton.
    • Developers must understand your code.
    • Computers must run your code.
  • Other people
    • Bad legacy code
    • Unpleasant team-mates
    • Bad junior developers
    • Even worse senior developers
    • Bad managers
    • Impossible customers
  • Yourself
    • Skill/experience limitations
    • Tool familiarity
    • Bad work habits
    • Bad attitude
    • Poor team-working skills
  • Development
    • Deadlines
    • Budgets
    • Specs
    • Unexpected changes in any of these
    • Architecture
  • Technology stacks:
    • Programming languages
    • Frameworks
    • Lack of frameworks
    • Compatibility
  • Hardware, yours and users:
    • Speed
    • Price
    • OS
  • And so so many more ...

Resources



results matching ""

    No results matching ""