It is tempting to start a new project with the interesting bits, but it's often a mistake. One of the first steps in a new project should be to sort out deployment: getting the software installed and configured so it can be used. This is particularly important if it's not a simple command line utility, but something that connects to databases, web servers, or requires authentication or other sensitive operations.

The following has never, ever happened to anyone, but if you're not careful, it might happen to you.

It's Friday, last day before your team goes on summer holidays. There's only you left at the office, everyone has already left. You can leave too, as soon as you've deployed the web service your team has developed to a server, so that the customer can test it during your holidays.

You add some Debian packaging. You build the package. You install the package on the server. Everything's fine, except the service doesn't actually work.

It turns out that you and your team have been using the built-in HTTP server in, which is meant for debugging and development only, not for production deployment. Even if you were happy to just use that, since it's not in real production yet, your software has no way to configure the HTTP server to listen on anything but You need, at minimum, to add a configuration file, and oh yeah, TLS support would be nice, and, um, there needs to be a way to include the configuration in the package, and um. You really don't want to run the debug server, so you need to add integration to a WSGI server. After all, you've done it before, how hard can it be?

Your spouse calls you and wants to know when you should be picked up to leave for the trip you're starting that day. You should leave early to avoid rush hour traffic.

You're in a hurry, you don't have time to do things right. You log into the server, and hack up code in-place. You are in a hurry, so it takes you twice as long as it should, but after a couple of hours you're done.

You leave. You go on your trip, and have a lovely holiday. You come back, and new disasters take up your time.

A few months later, someone asks if you can fix the service, since it seems it doesn't work anymore. You say, "um".

Don't go there. Get your deployment done at the beginning, and use it throughout your project, and you'll be able to rely on it when it's time to deploy for real.