Constructive Constraints

How can constraints be constructive? Constraints are usually seen as things which hold one back. They’re perceived as inherently negative things which only prevent accomplishments and success. We’ve all heard complaints like “I don’t have time” or “I need more resources”. What if constraints weren’t all bad?

Some constraints really are bad and hold you back, but many can be more empowering than restricting. It’s really a matter of perspective: if you perceive a situation to be negative, you’ll probably find a way to make it negative. With a small change in view point, “I don’t have time” becomes “How can I be more efficient and do more with my time?” and “I need more resources” becomes “How can I do more with less? What must stay and what can change?”.

Rewording the issue to view a constraint as a challenge can change your attitude towards it. We’ll always have limited time and resources, those constraints will never disappear. Being negative about such pervasive constraints won’t change them, so why should they be negative? Turn those problems into assets.

Now you might be asking, “how can a problem possibly be an asset?”. In a 1986 talk, mathematician Richard Hamming mentioned that some of the best work that came out of Bell Laboratories was done when the work environment was well below ideal. Innovation was driven not only by thoughts and ideas, but also by the needs of the researchers working there. The limitations of their work environment didn’t stop them from doing great work. They took what they had and did as much as possible with it. A lack of resources didn’t create an inability to work, it spurred innovation to do more with less.

Understanding your problems is the key to turning them into assets. Ask questions about the problem. Try to see it from different perspectives. Why is this a problem? What can I change about it? Why is this problem bad and how can it possibly be good? Once you understand your problems you can begin to change your perception of them. When a problem is seen as more of a benefit than a detriment it is no longer a problem, it’s an asset.

Let’s look into some common examples. These problems will never go away, so how can they be made positive?

“I don’t have time”

The first question to ask might be, “Is this really important enough to spend my time on?”. If the answer is yes for any reason, but you still don’t have enough time, start to dig into the cause of the so-called problem. How are you using your time right now? If it is for the most part being used wisely, identify the slowest or least productive tasks. How can they be improved? Can that work be automated or delegated? Do they really need to be done at all? Your available time can increase dramatically if you constantly try to find ways to improve your methods.

“I don’t have enough resources”

This question is more difficult because it can certainly be true in many areas. You can’t make bread without flour, for example. But do you really need every resource you think you need? Look at each element and identify exactly why it’s needed. What is its purpose? Can anything else adequately replace this resource? How can the requirement be reduced in size? Resources are limited, that will always be true, but there are many areas where resource requirements can be decreased.

As I mentioned, the above problems are often artificial. However, there are times when the problems really are problems. There’s no getting around the fact that you currently can’t write a novel in an hour or build a house in a day. When these problems are artificial, there are many ways to make the problem work for you instead of against you. When the problems truly are impediments to your progress it might seem impossible to turn them into assets. In that case, I still think you can to find a way to make them constructive. Necessity is the mother of invention.


Notebook Updater: Automating With Python

Last week I found myself wanting to automate some todo list maintenance. I’m keeping my todo list in a Zim wiki so I can access my notes easier. The internal links and formatting is very nice to have. Around the same time I was a bit curious about Python. I hadn’t worked with it in years, and even then I didn’t do anything significant with the language. I decided to take a couple of days to throw together a little script to take care of the menial work involved with maintaining my wiki. It’s a little kludgey, but it gets the job done. It probably isn’t very useful to anyone else, but I put it in a Gist just in case.

The work this program automates is fairly simple. It copies two sections of text from one file to another and does some minor editing of the first file. Since Zim has a small, regular syntax and stores everything in text files, this wasn’t a difficult task. As I started designing the program though, it became obvious that there was more work involved than I thought.

The Notebook Updater starts by reading two sections from the first (“Home”) text file — Schedule and Time Log. I keep all of my tasks in the Schedule section and a rough log of my time usage in Time Log. Both sections are copied to the second (“Week”) file and placed under the heading for the current day. After the data is safely stored in the Week file, the program starts modifying the data to update the Home file. The day’s completed tasks are removed and tomorrow’s tasks appended to the list. Then the Time Log section is cleared and the job is done.

Since this was such a small project it did not need any classes. I wrote tests using unittest for each function and tested the general operation of the program on some test data files.

This design worked out well, but there were some issues. When I started the project I didn’t plan as well as I could have. Some features of the program were designed on the spot as I was building. The features should have been well defined before I started working. This lack of design created led to messy code in some (read: many) areas. Even though it isn’t a huge or important project it still doesn’t feel right. Text manipulation isn’t my best subject, so I doubt the text-handling code is very efficient, but that’s probably not as important in this case.

The Notebook Updater project was a fun way to get started with Python. I learned something new and automated some menial work at the same time. Writing code for yourself really is a great way to learn.

You can find the Notebook Updater code here.