Skip to content.

Personal tools
You are here: Home » Members » chrism's Home » Python Advent Calendar 2012 Topic

Python Advent Calendar 2012 Topic

An entry for the 2012 Japanese advent calendar at

Over the last few months I've been trying to integrate Pyramid, ZODB, relational databases, a payment gateway, a bulk email system, and a plethora of other bits of Python code big and small. Some of the time I've been doing this for customers, other times I've been doing it for open source projects. And I have to admit to you in all cases, after a while, I start to wonder just what in the hell I'm doing, and I daydream about maybe becoming a veterinarian.

That's because it's so damn hard to make systems do what you want them to do. Trying to integrate two or three things together to produce some outcome is always difficult. You have to deal with bad docs, downed servers, bugs, and deployment issues. You have to cope with version control, merging your changes with other people. And you often have to communicate with many people and explain yourself and the system to make sure it all works out ok. It's a real pain in the ass most of the time.

That's why the best software is really, really boring. It has docs that tell you what you need to know on a number of levels: an API guide, and integration examples. It has a mailing list with knowledgeable people who are willing to answer your questions. It has a nice website that doesn't make you want to gouge your eyes out. And that's it!

Pyramid and other Python web frameworks are useful and reliable; and honestly pretty dull. You configure a web framework to answer a request on a set of URLs; your job is to make all of the URLs do the right thing. The best systems will stay out of your way while you get this job done. The worst systems will put you into a rage by injecting themselves at every turn while they make you care about irrelevant things when you're just trying to get things done or by simply not working at all. Reasonable people can disagree about where the line is between useful and annoying, but I am thankful for very boring software.

I encourage everyone to celebrate boring software. Software itself should be dull as dirt. The excitement should come from creating boring software.

How do you create boring software? I'm not totally sure, but here's what seems to work for me:

  • Be honest with yourself. While you're writing a bit of code and you feel like you're in over your head, maybe you are. Don't ignore it. If you are in a position to ask for help, ask! Get it off your plate if you don't have the time to learn enough to feel comfortable. If you can't get it off your plate, make the effort to learn enough so you no longer feel like you're in over your head, and you understand exactly what you need to do and how to do it. This could take weeks or months for certain kinds of problems. If it's appropriate, take that time. If it's not, scale back expectations to meet reality.
  • Obsess over details. Don't inflict some half-baked thing you barely understand on your co-workers; or worse, inflict it on strangers who download it on the Internet. This is the opposite of creating boring software. Your initial reaction to someone telling you that there's a bug in your software should be skepticism. If it's not, it means you were not honest with yourself when you put it into production. You can get this kind of confidence by writing tests and documentation.
  • Create beautiful things. Don't allow yourself to be bullied into putting things you hate into production if at all possible. Be proud of your code.
  • Help, encourage, and compliment other developers. Use Stack Exchange, or IRC, or mailing lists to answer other people's questions. Any job, in my opinion, is almost completely pointless unless you're interacting with other humans in some way on a level that is not pure consumption or usury. You might as well just pick up trash in the park or become a stock broker. Keeping interested in the human side of software keeps things interesting and fun.
  • Try to stay positive. I'm personally a pretty pessimistic guy, and that helps me write very good software, because I expect nothing to work right. But in real life, you need to try to find the good things about situations that you find yourself in. To concentrate on the negative all the time will make you unhealthy, and you need to be healthy to make dull software.

If you do these things, it will be very difficult to avoid being happy, healthy and wealthy in your job, even if your software is terribly dull. Here's to a great 2013 for Python and web technologies!

Created by chrism
Last modified 2012-12-25 06:18 AM