Ask HN: Do you automate most of your routine tasks?
Right now, I have a few small tasks I need to complete every other day, it does take up some time. I could also spend around 2 weeks to code and automate whole process. Would you?
Also, what other tasks do you currently automate?
27 comments
[ 6.5 ms ] story [ 71.6 ms ] threadThat said, I would always err on the side of automating - at least some of the tasks. Take the low hanging fruit and tackle those first.
For example, I send out a weekly report containing a bunch of metrics sourced from our website monitoring tool. It took me a couple of days to automate that, but it saves me a good hour every week (and means I don't make mistakes copying and pasting figures which I used to with alarming regularity). It also means that my Monday mornings can start immediately without pounding through a repetitive task.
I've automated a lot of small tasks lately and as a result I have a small library of stuff which makes it easier and faster to automate yet more small tasks. It definitely is worth the invested time.
At work we have to create performance reports monthly for a particular client. The procedure has always been to do it manually, which takes around 4 to 5 hours. Writing the code to automate this in C# took less than 4 hours and now the reports take 2 to 3 minutes each month. Time well spent, money definitely saved.
Now it's just a doubleclick on a .cmd file on my desktop.
1. We had a support portal at work which I had to check regularly during the day. I wrote a small program that monitors the relevant page and pops up a taskbar notification when something new arrives. Used the opportunity to learn about taskbar notifications and a little WPF.
2. I sometimes get database backups from customers and have to restore them on my machine, which means opening SQL Management studio, clicking and right clicking a bunch of things. Then I need to add myself as user, change a couple of settings before I can use the database for anything. I wrote a small utility so I can right click on any .bak file in explorer, choose Restore database and update the relevant tables so the database is ready to use right away with the connection string on the clipboard. Also used it as an opportunity to learn about windows 7 taskbar progress bars.
Basically I like doing small projects, but I never finish them unless they really do something. So, automating stuff I do makes much more sense than learning by following a tutorial that builds something useless.
The more you automate routine tasks, the faster you'll become. Don't just do a calculation of:
# of times to do a menial task * amount of time to do menial task <> amount of time to automate
That oversimplifies and doesn't take into account how much faster you'll be at scripting etc. in 20 years if you take every opportunity to hone your skills. Think of it like touch typing; might slow you down at first, but you're going to more than make up for it by the end of your career.
Automation doesn't just save time; it also avoids many mistakes caused by fat-fingering things or forgetting step 6 of an 8 stage process.
Also, once you have automated something, you've (at least potentially) created a tool you can share with someone else, which is good for teamwork, delegation and continuity in a work-place.
Nowadays I only do it after it's been proven (or I'm 100% certain up front) that a certain task will come up more often, and that letting someone else do it is not feasible or cheaper.
Right now I'm setting up a staging server for my new webapp (I'm frantically working towards a private beta). This is new learning for me- and I'm writing a script for everything I do (that I can). This not only sets up a way for me to do setup/config tasks automatically, so I don't make typos, etc.), but also documents what I'm doing. I hadn't considered that aspect of it before I started writing these scripts.
If the process is automated, it should be quite easy to use modified versions for similar problems. And you can quickly run it again and again without having to worry about making mistakes.
I do automate many of my computer related tasks. Since I'm a fan of the command line, small perl scripts, shell scripts and aliases do a lot of "work" for me.
When I say my daily routine feels automated I mean, when I have two boring tasks I usually combine them to make them less inane. So an automata type scenario comes into play. I don't have to 'think' about the two crappy but necessary tasks.
BCC is in maintenance mode, which means that my only interaction with the site is customer support and moving money around once a week to cover bills and my paycheck. Everything else is automated or outsourced. Bookkeeping for sales, for example, is 99.96% automatic. (Chargeback? Bah, you always miss one case...) Bookkeeping for expenses is about 90 ~ 95% static from month to month modulo dates and numbers, so I have my VA do it for me. Order fulfillment is automatic. Routine server administration is automatic. Customer services problems are, to the extent practical, automatic.
See generally: http://www.kalzumeus.com/2010/03/20/running-a-software-busin...
I should probably find a week or so to give BCC in the near future to make the ghost ship a wee bit less rudderless. (Like restarting content creation for it -- that was 99% automatic when I had a freelancer actively working on it, but she quit and I haven't bothered replacing her for... far too long now, it seems.)
AR and my consulting work are both less mature and, by nature, require more hands on attention. Still, you could reasonably expect that as I get more of a hang on what the business needs and where I add the most value to it, more work will get pushed off onto systems or processes.
I also spent a few bucks on an 8 GB RAM upgrade so I could just set MySQL, Postgres, MongoDB, and Redis to run on startup and not have to stop and start them whenever I am working on different apps, and I still have plenty of RAM left over for Photoshop, Starcraft II, etc.
I also spend time practicing vim tricks for things that commonly require a bunch of keystrokes, since practicing shortcuts until they become automatic is effectively the same thing as automating the task itself.
There are also a lot of things I don't automate, but it basically boils down to whether or not I use them enough to make it annoying enough to make me want to automate them. For example, I know that it's possible to set up a Rails template that creates a new Rails app with all of the gems, plugins, and configuration that you commonly use, but since I only create new Rails apps once every two weeks or so it's not enough of a pain that I want to spend the time creating the template.
Likewise, I've got scripts to extract strings to translate (with gettext()) using xgettext from various project directories, and merging it with older, already existing translations; and for installing edited translations afterwards (with msgfmt).
I also have a script to upload files that were changed locally to a remote server.
No, it didn't take me 2 weeks to code them.
Most of the time I just do the task once, and store the commands in a file. Next I edit that file replacing values with script arguments. Tada! Instant script. For lists of values that depend on the project, I create presets (one argument determines what set of values to use).
http://drupal.org/project/drush
If the cost of performing these small tasks over some specified period of time outweighs the cost automating them, and they /are/ in fact easily automated, then I think the answer here is clear: AUTOMATE.
Tasks I've automated:
* Server/OS/software deployment
* Daily calculation of linear regression of email queues on my mail servers
* Webcam snapshots and automatic uploads - http://www.charleshooper.net/blog/automating-webcam-snapshot...
* Most tasks requiring data entry - http://news.ycombinator.com/item?id=2359287
* And lots and lots of other things
-- Larry Wall
Task automation encompasses all three virtues:
Laziness - "I don't want to do this task every (other) day"
Impatience - "I don't want to spend time doing this task"
Hubris - "Of course this will work on the first try"
For example, I'll find myself performing tasks X, Y, and Z quite a lot. I'll find out that I have 20 minutes free and I'll figure out the most common denominator of the tasks, let's call it A, and then implement it. I'll quickly re-write the high level processes X, Y, Z and to use A and then move on with my life. The up-shot is that future tasks B, C, D, E, F can all use the now-battle-hardened procedure A, and maybe others in my company will find A useful.
1) I automated the creation of Google Adwords CPC keywords for my ecommerce website. Based on attributes of the product, the algorithm creates 500 unique keyword combinations. Over the coming days I will automate the creation of entire campaigns.
2) I automated gathering information about 200 universities by hiring a smart virtual assistant.
3) I automate my customer support emails by using canned responses.
4) I automate the running of my unit tests so that they run whenever I save relevant files.
5)I continue to automate my code base by writing new layers of abstraction which call lower layers intelligently.
So I wrote an app to remind me: http://i.imgur.com/exzb0.png
I find this sort of thing most useful if you have chores that you want to do regularly, but not on a specific day (i.e. clean every Tuesday).