Automate Everything - the hacker way
tomblomfield.com
tomblomfield.com
I find myself having to fight against this instinct almost every day. There are a couple of problems with hacking for a couple of hours to save a few bucks a month.
Firstly, you now have an additional piece of software to maintain - you're committing yourself to an unknown quantity of future work.
Secondly, your software won't get any better without you actively improving it. The nice thing about software you pay someone else for is that it gets better over time.
It's a tough instinct to fight though. Building things is Fun. It's just that there are probably other things you should be building that are more important to your company.
I just find the $9/month per employee a bit repugnant - if we grow to 10 people, we'll be paying over $1000 a year for a piece of software that parses subjects out of emails and stores attachments. Doesn't seem like a good deal.
Taking a wider view, there's an appeal to "cloud components", where all components are rented - including ones as simple/trivial as this. For this to work, it has to be cheap enough to be a no-brainer (esp for projects made of such components). Say, 1/100 - pennies - e.g. 9 cents /m/e. In the long-term, you'll see free open source alternatives, and maybe even free hosting (cloud providers supply it free, to support their hosting of your actual app)... and maintained.
Would be interested to see a followup in 6-12 months.
If it takes employees an average of 5 minutes per month, you don't have a problem. If it takes them 2 hours per month, investing $9/employee/month is a net win.
As engineers, our instinct is to build things. Business discipline requires focusing on profitable uses of time.
It's highly unlikely that building expense tracking software was the best use of time for the original author. He writes that thinking about the POTENTIAL future costs of expense tracking software ($1000/year) upset him.
If one realistically considers the costs to "roll your own" in terms of time, maintenance overhead, hosting & administrative cost, and opportunity cost the obvious conclusion is that this is not a good use of time and energy.
If Tom had instead spent that time fixing a bug, doing hard sales/marketing work it would have been worth much more to him.
No for us, engineers, doing hard, repetitive work is the real discipline. Automating things and finding systems that can be made more efficient is the easy work. Picking up a phone and making a sales call, trying to improve ad words advertising....these are things that are likely more valuable than rolling your own expenses email system.
There are probably other companies in England that also need to report expenses to accounting.
For the non-techs, it's important for them to get their heads around the possibility that they may be wasting large quantities of worker-days doing what could be automated with a bash script.
For the techs, just because you can doesn't mean you should. Deciding to automate something when there's a cheap SAAS offering is often a destructive thing, mainly because even developers are prone to underestimate complexity and maintenance costs, and to goldplate a solution that's already "good enough".
I'm not saying Don't Automate. I'm just suggesting to be very cautious about undertaking any automation initiative. The things to automate are the baggage which you will take on your journey, and as such, they should be directly related up your core product/service. Something like a mailing list handler is probably not, and typical of the kind of underestimation that can take place (what happens when you discover your homebrew mailing list is blocked by every big mail provider's spam filter?).
I just don't know how much this "instinct to automate" can be taught.
Might be important to mention in these days where a new significant language seems to break onto the scene every 8 months or so.
I submit that any working programmer ought to know (or be about the business of knowing) at least one language well enough that they can go from idea to working prototype without spending a ton of time reading documentation and wondering about the canonical way to do something. One language where you can automate stuff and solve small problems.
And you can always write a little piece in Python, if any of the standard utilities are quite what you need.
You have a real language available with (arguably) fewer weird things and warts to be aware of or remember, better string manipulations and lots of other advantages, but if you really just want to send something through `awk` or `bc` you can do that just as easily as you do in bash and capture the result in a Ruby or Perl variable.
Seems like a win-win situation. (Unless you have an exceptional circumstance with requirements about running anything but shell scripts or something like that.)
For example, I recently wrote a quick Ruby script to test various parts of my internet connection (ping default gateway, test DNS resolution, etc) because I was bored and my internet connection was down. I used backticks to do things like grab a nameserver from /etc/resolv.conf and then ping the server, but I had the surrounding Ruby code doing things like parsing the output using regular expressions and doing some logic on the results.
Sure, I could have written the thing in pure bash, but Ruby has better text manipulation capabilities when it comes to things like parsing (in my opinion), and with the backticks, I still was able to harness the power of the shell anyways.
I'm not sure how portable such solutions are, but for a home-grown testing program written on a whim out of boredom, it was certainly enjoyable to have both the power of Ruby and the shell available.
This is a close cousin to what my grandfather used to call "working to get out of work" in other words spending a lot of mental effort to avoid manual labor. This usually involves fashioning a tool or device to move something that could have been moved more quickly with simple, but back-breaking manual labor.
I tend to do both of these things a lot!
People who are eager to get up in the morning and toil in the sweat of their brows are deeply suspect in my book.
I don't see much good coming out of that kind of attitude - when will they stop and ponder the inescapable nuances of life?
The world needs more lazy inventor types laying around daydreaming on lazyboys, not extra widget crankers milling around mindlessly in labyrinthine office hives.
IMNSHO, of course :)
One of the guys in the office was maintaining a monthly report that involved him burning 3 hours a week pulling and compiling reports into a needlessly complex Excel spreadsheet. I offered to help out, and wrote an Excel macro that did the job for him.
From there, I figured 'hell, why should everyone have to spend time doing this?' So I downloaded a copy of VB and learned enough of it to turn the Excel macro into a simple deployable application that turned an absolute waste of manpower into an easy-to-use desktop app.
In hindsight, a native application wasn't the best way to do it. Our office has a strictly controlled internet/intranet policy, and the people maintaining the database are likely too busy doing just that — maintenance — to build a more robust data reporting system. That might be the beauty of learning on your own, you quickly gain insight into how things should and could work.
It wasn't his point, but simonw is right: building things IS fun. I got started and I haven't looked back.
If innovation had to sit around and wait for the "best solution" or be overly concerned with how things "should" work, you'd be cooking your dinner by pounding it with a rock and we'd all be in awe of enterprise software architecture.
Innovation is about solving problems with the tools and resources that are available, and kudos to you for doing just that. If more people would be bothered (and, indeed, allowed) to learn a little programming, even in something like VB, the productivity of an average office worker would explode.
I think the OP is right in that wanting to automate repetitive tasks is inherent to humans. And the problems discussed in this post are exactly the kind my startup http://loggur.com aims to address. The goal is to let non-programmers automate and also to let programmers automate certain tasks (mainly data manipulation, analysis, triggers, and reports/notifications) in a fraction of the time it would take to otherwise hand-code it.
I should also mention that I am fully aware that what Loggur attempts to do is far from new, but I have yet to see an implementation that isn't a pain to work with. And it's designed with the current (and predicted future) state of things in mind and to be flexible enough to adapt to whatever the needs of the future may be.
On a persona note, I'm definitely in the automater category; on the few occasions when I've left a task unautomated because it was only supposed to be a one off it's come back to bite me repeatedly when month after month that same one off task pops up (admittedly after 2-3 repeats I then ignore the advise that it's a one off and automate anyway). These days if I can automate a task in slightly over the time it would take to perform that task, I automate by default. If there's a significant difference I weigh up the likelihood of repetition (by myself and/or others) against the extra time required to automate it.
This is the hacker way? Was it designed? It is not elegant. I think it was grown. It uses technologies which are cool and hip but also dependent on third party services.
POP3 is not a reliable delivery protocol for unique messages.
I'll leave it at that.
Zuckerberg explains "hacking just means building something quickly... Hackers believe that something can always be better, and that nothing is ever complete. They just have to go fix it — often in the face of people who say it’s impossible or are content with the status quo...Hackers try to build the best services over the long term by quickly releasing and learning from smaller iterations rather than trying to get everything right all at once."
A simple web page on the company intranet that let you upload the scan, and key in a description and amount, would be more reliable but somewhat less convenient. It's a trade-off.
This email-based expense system hinged on specific keywords would be great for a small business, but if you're a multinational with lots of legal oversight...
Its still not necessarily bad, such a system could be easily expanded to be an quick input method to a system that makes the beancounters and legal happy too. Say I snap a picture of a till receipt with my cellphone and send it off to the expense account. The backend could also hook into our timesheet webapp. I already have to choose the account I'm billing my hours to and some accounts require I put in a note. My expense could show up right in the list of hours I've clocked, then when I enter my hours at the end of the day I double check all the expenses are there, are for the right amount, choose the account to charge and pop in a description.
"Records may be preserved on optical imaging systems, and the originals discarded, provided that what is retained in digital form represents a complete and unaltered image of the underlying paper document."
giving the reference as http://webarchive.nationalarchives.gov.uk/20110720224136/htt...
Your start-up might not be in a position to do that, but removing the task entirely always seems preferable to me.
Obviously, it's not scalable, but anything that saves you an hour of sorting 500 files by category is a win in my book...
My context is data processing matlab (automation) & excel (manual).
Thus far, we have machines that think for us in countless ways, none yet that meditate for us.