Protip of the Day: Always Delay your Email From Being Sent

This is a rather simple and should be obvious pro-tip: Delay all email from being sent. This helps to catch emails that have the wrong tone, message, audience or content before it’s sent. This tip has saved me from sending an badly formed email, or to the wrong audience many times. Just today I caught a work email that was missing information. It makes a difference from sending a brief and context email into sending a fully detailed email.


Why does this work really well?

I believe that this works really well because, like unit testing, it causes the author to separate the content creation with the later review. It forces one to reflect on what was created rather than to falsely believe what was written was perfect. It also gives us a chance to give more meaning and promotes a stronger signal to noise ratio in your messages. From my person experience little is gained from responding and sending anything immediately. Delays are a well accepted and expected situation when dealing with human to human communication.


That’s nice, but how would I do that?

A Few Signs That Your Project May Be In Some Serious Trouble

  1. Lack of leadership in developer operations
  2. A lack of reporting of improvements in code reuse, coverage, test cases, and stability.
  3. Underutilization of frameworks and libraries used within the project.
  4. Lack of disposable runtime environments [for development and testing].
  5. Build times are unknown.
  6. Long and detailed documentation is required to build your product.
  7. Dead code is left in the code base to rot for years.
  8. Bugs are being reproduced as unit tests.
  9. Third Party dependencies are not being upgraded.
  10. Code is badly organized. Models are placed anywhere, packages aren’t organized, etc.

Varying your Reading Materials

In recent conversations with my friend Warren, he recommended that I vary my reading materials. This is something hard to do for most people. When you find a comfortable niche, you tend to read similar material and not branch out. Enjoyable books can be very difficult to find. The Amazon Kindle sample feature can help elevate this issue, the sample feature sends a short preview of the book to your Kindle for free. You get a taste of what the book is about and the writing style used. If you didn’t like the sample just delete it, if you did buy the full book. In addition, if you purchase it and like it, then you will start to get recommendations based on it. Another alternative (But still involving Amazon), is that Kindle owners can borrow books from the “Kindle library” if they have Prime.

Another way to diversify your reading is to subscribe to blogs that are outside of your interests. Despite claims by “online media” experts, RSS is still alive and used. Use the RSS feed and subscribe to the blog to keep up with it. (You can even do it with this one) Google Reader has “Recommended Feeds” and “Recommended Items” features that makes recommendations based on your subscriptions. [Word of warning, the recommendations aren’t very good]

Part 2 of 2: How To Make Your Life Easier As A Tech Worker (IT/Software Engineering/System Administrator): Motivation

The lack of motivation can affect your work and personal life severely. These are some of the things I found to be helpful:

  • Having a daily status. This helps you to understand what needs to be done, what needs to be done later, what problems you faced, and helps communicate what you’ve been up to with your peers/clients/superiors. Good daily statuses answer the questions:
    • Did you have any roadblocks today?
    • What did you do today?
    • What is on your task list today?
    • Also I find that its incredibly helpful to finish the daily status prior to leaving for the day and reviewing the items left to do in the morning when I get in. Once the daily status is reviewed it is incredibly easy to focus and knock out tasks.
  • Daily statuses may help you get a raise or help to establish job security. Daily statuses can help you to support your claims of higher pay due to work performed. With a daily status, your manager can go back through them and see work performed, and it’s easier to account for your work. My coworker uses this template. [As mentioned in the last part of this series].
  • Plan out the tasks that need to be performed prior to starting them. If you have a task to build a twitter clone, breaking the tasks into extremely small tasks such as evaluate database, create test interface, create authentication system, etc would be a good way to go about it. Reviewing prior to the start of work is the way to go about this. With a good understanding about the tasks to complete, it becomes incredibly difficult to procrastinate or avoid working. The tasks are easily achievable and you have something to show for it, even when the work isn’t incredibly visible.
  • Organize similar tasks in batches. I’m sure Tim Ferris wasn’t the first person to suggest this, but I found this tip from one of his books. If you have lots of individual tasks that have the same process, collect all of the tasks and perform all of the actions in a batch-like fashion. For example: If the task is to go to the store every time you need something, consider creating a list and going to the store to get all of the items at once. This will cut down on the costs (time, money, and stress) involved with driving to and from [his example was batching bill paying].
  • Monitor your time – this may be an extension of the daily status suggestion. Monitoring your time helps you to identify times where you may become unproductive or easily distracted. It also helps you identify the amount of time that you can work until you need a break.
  • Weekly self reviews – this involves a bit more time. A weekly self review can help you see the big picture of the tasks that you performed that week, and may even change your mind about the approach taken. For example, if you repeatedly struggled with a Java GUI component every day of the week, a weekly review would show that a different component might be beneficial or that it might be helpful to go for training on the individual component.
  • Clear out your email box. Similar to a cluttered desk, a full inbox makes emails difficult to search through, and may cause new emails to be lost.
  • Keep a notebook or journal. New ideas rarely come when you want them to. Keeping a physical notebook helps you to write the ideas out without becoming distracted with what you’re working on. Also, a physical notebook acts as a unique outside task from your current job. It’s similar to “Rubber Ducking” the problem. Roald Dahl suggested doing this, too – he kept a notebook and wrote down every idea he had for a story as soon as it came to him (even using the dust on his bumper once when his notebook was missing).
  • Keep A Blog: Blog about the problems you’ve faced and how you overcame them. For example, when I had an problem with a particular issue with my Gentoo configuration, I wrote a blog post after going through the trouble of finding a solution and testing many others. When I ran into the same issue again when re installing  the solution now was quickly available to me. Google picked up the post and made the search even quicker. Also, it may turn out to be an issue that others have faced. If your blog is fairly popular you may even get feedback, or kudos for solving the problem that others have had.
  • Writing down expectations/concerns about tasks. This may sound silly, but writing down the potential negative feelings you have towards a technical approach may help you overcome biases or aggravation down the road.
  • Keeping a task list. Creating/using a task list will give a quick feedback on completing tasks. Use an online to-do manager that can schedule tasks, organize them into projects, and can integrate into your existing PIMs [Outlook, Kontact, Gmail+Calendar]. Some examples of this are, trello, vitalist, Toodledo, Nozbe, and Nirvana for GTD.
  • Keep track of things you want to learn. This helps when you have free time during work and want to learn something. Also, learning new technologies helps you with new tech projects and makes you more marketable.
  • Read Regularly. This may not be directly beneficial to completing the problems you face today, but this is more of a multiplier. It helps you to branch out from your current set of problems, and find new solutions. Blogs, RSS feeds, technical books, and most other books will help keep you motivated and productive.

Part 1 of 2: How To Make Your Life Easier As A Tech Worker (IT/Software Engineering/System Administrator): Automation

After some time of being a student, and a tech worker [Software Engineer, IT Consultant, or  System Administrator], you should start to find ways to make your job easier.  These are some of the things I found helpful:

  • Create templates for daily status emails. If your employer/ client requires a daily status, this makes the task of writing up the daily status easier. Outlook has the ability to keep track of email templates.
    • If the daily status is being sent to multiple people it may be helpful to create a distribution list. A distribution list is less likely to lose contacts between statuses.
    • One template a coworker of mine uses is this template.
  • Create filters for emails. This can help reduce the amount of email that requires attention. For example if a group communicates with a shared distribution list then create a rule or a filter that can organize that into a separate folder. This can also clear out “Build succeeded” emails [if your company automatically subscribes you to those]
    How To Create Rules In Outlook.
    How to Create GMail Filters.
  • Use SSH keys: SSH Keys can save a little bit of time by creating password-less logins. Also with SSH keys, scripts are able to run commands on other SSH enabled boxes. This means that much of the repetitive system administrative tasks can be automated. Gentoo Guide to SSH [This include generic non-gentoo instructions.
  • SSH Commands: SSH Commands are shell-less sessions in which a user logs into a SSH box with a key to kick off only one specific command. For example, say you had to reset an environment, and it required quite a few commands. With an SSH command, you would combine all of those commands and then kick off the command as an SSH command with its own key. From there on, you could kick off those commands by connecting to the SSH box with the key.  More information.
  • Backups- It can’t hurt to backup your data. I’ve never found a single person that was reliable at doing this frequently. Setting up rsync, SSH-keys and making it a cron job is a good first step. I’ve heard good things about luckyBackup, but I haven’t had a chance to try it. 
  • Using Salt/Puppet to automate system administrative tasks on multiple machines. This would be a bit more helpful for those who regularly roll out new software to multiple machines, or need to perform other system admin tasks.
  • IfThisThenThat (Review) is an online service that connects other online services to perform the intended result. For example, if a Google search reveals specific keywords, you can have that update a twitter account.