Category: Productivity

Systems, habits, workflows, and personal optimization

  • Meditation For Programmers

    Programmers have one of the most intensive intellectual jobs.  It requires great focus and concentration to write software productively.

    If you measure the productivity of a programmer you might be surprised at the range. At the bottom there are software developers that actually create negative productivity; every line of code they write is one that someone else will have to re-write. At the top end is the so called ’10x’ programmers who can single handedly churn out multiple hundreds of lines of code per day.

    Average programmers experience ’10x’ performance occasionally as being in ‘the zone’.  When in the zone, time zips by, you find yourself knowing all the code you need to write and are limited only by your typing speed.

    Getting to this 10x level of performance consistently requires a lot of prerequisites to be met. You need to be proficient with your programming language syntax, you need to know the libraries you’re using and you need a base of understanding of computers and your problem set so as to avoid the need to refer to Google to answer “how to” questions.

    If you find yourself asking things like “How do I write a foreach loop in this language?”  or “What’s the API for doing an HTTP request?” or “How do I add authentication to this?” then you need to step back and do some more learning.

    Getting past this first bar to productivity is pretty clear: buy a book, read it.

    There is a second bar to productivity that is not so obvious how to improve on. Truly difficult problems require intense focus for long periods. External distractions can be mitigated with ease. Turn off your email client, silence your phone, put on headphones.

    Internal distraction something that I haven’t heard many discuss. Mental focus is a skill of the mind.  Meditation is a practice for training the mind. By practicing meditation you can  extend your ability to focus without interruption and gain a deeper perspective on the problems at hand.

    When you are able to think about  a problem for only 5 minutes at a time before your mind wanders or you get distracted then you can only gain a shallow understanding of the problem. With an hour of single minded focus you can get very deep into the rabbit hole.

    Training your mind for this level of focus can take a long time.

    Start your meditation by eliminating external distractions. Find at least 15 minutes in the day to focus inward. Start by thinking about your toes individually making sure each of them is completely relaxed before focusing on the arch of your foot, then the ankle and so on until you get to thinking about all the muscles in your face and head. Do not move during this exercise – even to scratch an itch.

    By giving yourself a routine like this to practice it’s easier to identify when and how often your mind wanders to other thoughts. When you do find yourself de-railed just bring your self back and continue relaxing where you left off.

    When you can maintain 100% focus on relaxing yourself through toes to head then you are ready to start pondering the problems at hand.

    Over time work yourself up to an hour of focused thought.

    Not only is the time you spend in deep thought productive at forming ideas and solving difficult problems, but you’ll find that your ability to focus when working  also greatly improves as well. You’ll find yourself in “the zone” more often and for longer.

    To those who have never tried to meditate I challenge you to try this relaxation thought exercise just to see how difficult it is to keep your mind from wandering or finding yourself focused on an itch you can’t scratch.  It’s not easy.

  • Creating Feedback Loops

    A feedback loop for success is anything that looks at your past or current state and if you have fallen off the tracks does something to get you back on them.

    That’s kind of vague. So here are some examples of feedback loops:

    • For a weight lifter – keeping a log of past lifts encourages them to lift more, and work harder if they see loss of strength over time.
    • For this blog a nag email goes out after a week of not writing, that email encourages me to write, which stops the emails
    • The Jerry Seinfield calendar which encourages you to do something every day.
    • A regular financial audit – helps to identify areas that need focus hopefully before they become a problem.
    • An annual performance review helps employees develop strategies to improve.

    If you have a goal then having an effective feedback loop can help you reach it.

    The start of the year is a good time to do a review of your feedback loops (a feedback loop for feedback loops) to decide if any of them are ineffective and can be dropped, or if new ones are needed to match your goals. For a business it helps to be systematic.

    If the goal is to 10x your business in 2014 then to start with you would create a strategy that would achieve it (concrete things to do). For each of those concrete steps in the strategy you would evaluate each major pillar of your business to see if any feedback loops would be appropriate – Financial, HR, Sales, Marketing, Product development.  Is there anything you could measure? A good feedback loop will help identify when you need to make adjustments to strategy earlier.

    The worst feedback loop for a goal is to just put it in your calendar – “Dec 31 2014: review business to see if it’s 10x”.  A day or week after setting that goal, you’ll forget about it, get derailed, and be surprised at the end of the year when you get the calendar alert. You can do better.

    If part of your strategy to 10x your business is to re-design your website, then an effective feedback loop is one that actually forces you to do the work. Perhaps an alert on the website’s github repository to ensure there is active development on it every day. or a kanban board to organize the work and visualize progress. If you want an effective website and not just a different one, adding A/B testing and doing a weekly review of conversion rates is a great way to keep focused on continual improvement.

    The most effective feedback loops will DEMAND that you do the work to execute your strategy, and will MEASURE the effectiveness of the strategy to achieve your goals.

     

  • Distraction Free Writing

    I have just discovered a feature in wordpress to do full-screen distraction free writing. The idea is to remove all visual distractions from the computer so that the only thing you can focus on is your writing.

    Managing distractions is something that I have always done at work. I turn of notifications for emails and twitter, and I work with a minimal text editor when coding.  When possible I avoid using the mouse because even the 1 second that it takes to remove your hand from the keyboard is enough to derail a train of thought.

     

    Screen Shot 2013-12-21 at 7.35.05 AM

    I hope to write more often next year. and this distraction free writing concept will help make my writing time more focused and productive.

     

  • Racing to 10% BF

    In the spirit of friendly competition, Colum and I are battling to be the first to reach 10% BF.  10%BF is a lofty goal that is difficult to achieve without serious commitment.  Winning will take everything I know and doing it all at once and staying committed to a lot of exercise as well as a strict diet.

    To start with I’m going to be heavily restricting my carbs. Zero sugar, no wheat, and very few starchy vegetables.  This was what proved to be the most effective diet I ever tried.  I will attempt to eat fewer than 50g of Net Carbohydrates per day in order to induce ketosis, a state where much of your body’s energy comes from keytones rather than blood sugar.

    Effectively it means eating nuts to snack on through the day, and having lots of salads with some meat for meals.

    The second component is exercise, which is more difficult since it requires more of a time commitment. I will be developing a program with a 50/50 split between cardio and strength training which according to research is the most effective way to lose fat.  Ideally I’d like to target 1 hour of exercise per day. To get to that level I may have to restart my early morning routine.

    Colum started with a 6% lead on me for %BF so I have some catching up to do if I’m going to win.

  • Exercise for Programmers

    Staying on top of your game is best accomplished by continuously learning and by ensuring you are mentally and physically at your best.  As a desk jokey it can be difficult to get enough exercise in a day so you have to be pro-active about staying in shape outside the office.

    For several years I did a lot of running, 4-5 times per week I would run between 5km and 30km. Running is a great exercise because:

    1. it’s intense – you can always push yourself to run faster/further.
    2. Very little equipment required – just running shoes
    3. Local fun runs and races to keep you motivated
    4. Great way to see your neighbourhood from a different perspective
    5. it engages your entire body

    After moving to a new city running became  less enjoyable due to poorly maintained sidewalks and the only walking paths close by are along a noisy highway.  So I discovered something else to focus on.  Strength training.

    Strength training has a number of key benefits to health.  It makes you prepared for those few days a year that require lifting and moving heavy furniture or equipment.  The last thing you want to have happen is to throw out your back when doing some chores around the house.  When it comes to strength training the classics seem to be the most effective: deadlifts, squats, and bench press.

    Regardless of if you choose to do running, strength training, cycling, swimming, walking or yoga it would be wise to trade some evening TV time for some physical activity.

  • Andromeda’s Savior v1.1

    Icon-72A late night of coding produced the first update to Andromeda’s Savior submitted to iTunes.

    This new version brings a health bar, a bunch of new enemies to shoot, and much improved Game Center integration.  It also includes a check to prevent people from cracking the game and getting free upgrades.  To date there are almost $5000 worth of purchases that have been given without payment.

    I’m particularly interested in seeing how the game center stuff works to improve the replay-ability of the game.  It will now show you, as you play, a picture of your friend who has a higher score than you as an encouragement to challenge your friends.  It adds focus to the players playing the game and should at least for some people egg them on to play more and for longer.

    The new update should be in the store next week.

     

  • Great App Challenge of 2013

    This year myself and a friend have taken up the challenge of releasing a new iPhone/iPad game every 2 weeks to hopefully have 20-25 finished games by the end of the year.

    The strategy is to build upon 3 different game platforms for all the games.  Each game will add one new feature to the platform and completely replace all the art assets to create a unique and fun game.

    The first game was submitted to Apple last week.  It was an update to the first game I did for iPhone called UFO Invader.  It will form the base platform for the next 8-10 games.  The second game, called Air Barons, was finished up and submitted to Apple last night.  The next game is an 8-bit styled space fighter and will add tile-mapped levels and designed coin/power-up layouts to the platform.

    The goal of this challenge is 4 fold:

    1. Learn how to create better and better games through fast iteration of the entire process – design, art, programming,  and marketing
    2. Reduce the risk of focusing on one big game by producing many games that each may resonate with different players
    3. Start generating a small cash flow quickly that will grow with each game release
    4. Build out a network of games to cross promote each other

    It is not going to be easy to do working just in the evenings and weekends but 2013 is the year to do it!

    I’ll be blogging about the work I’m doing here on this site as I go.

  • The Great App Challenge of 2013

    UFO Invader version 2.0 is submitted to the iTunes App Store for review.  It should be published in about a week.

    That marks the first app for what I’m calling the Great App Challenge of 2013.  The goal is to release 20-25 Apps this year between myself and Colum.  That’s one app every 2 weeks!

    The second game is called Air Barons and should be ready to submit tonight or tomorrow.  It is essentially the same game as UFO Invader except all the art assets have been replaced and we’ve managed to add a few new animations and effects to give the game a bit more life.

    The strategy for the Great App Challenge of 2013 is to iteratively improve the on 3 different game platforms focusing on one key feature to implement for each new game.  No doubt that most of the effort will be going into creating the art assets for all these games but by the end of the year we should have streamlined our production of new games to the point where both myself and Colum have a tremendous amount of experience creating and releasing some fun games.

    When successful,  these games will cross promote each other to build an even bigger audience.  It shouldn’t be hard to have all these games generating a healthy second income for both of us by the end of the year.

    Game #3 is going to be an 8 bit space fighter again based on the UFO Invader code.  It will feature a new tile based parallax background and the layout of coins in the game will be designed rather than randomly generated.   Target completion date for that game is February 20th.

  • Home Music System

    A while ago I set up a music system above the fireplace.  It uses an AirPort Express as a destination for playing iTunes music from my computers, iPhone or iPad.  The audio out channel from the AirPort Express feeds into a small amp that I found on Amazon for $20 which powers a pair of good bookshelf speakers.

    To control the music I have a spot where I can attach my iPad to the wall with velcro.

    It’s been a pretty good system.

    The Raspberry Pi is going to be making itself part of the system eventually as a podcast downloading alarm clock.  The plan is to write a simple script to download CBC podcasts in the morning and auto-play them with a bit of smarts regarding holidays and weekends.  I’ll have  simple web front end to control and configure the system.  Should be nice to have a little something to wake up to.

  • Finding Focus

    Programming is a task that requires long stretches of uninterrupted time to be productive.  A simple 15 second “How’s it going?” will almost inevitably lead to a 15 minute delay in work getting done.  A scary but true fact.  Programming, like design, and engineering tasks are most productive when you get into the “flow” or “zone”.  They are high momentum tasks that take time to ramp up to full speed.

    Task switching and multi-tasking kill the flow and are therefore detrimental to being productive.

    There are many tips out there for how to prevent disruptions.  Headphones have worked for me during late night coding sessions to help me forget how late it is.  Using full-screen apps is helpful as is turning off new email notifications.  Learning to use my editors keyboard shortcuts so that I don’t have to use my mouse is surprisingly effective – the mouse is a gateway to browsing reddit.

    I’m still looking for new tips all the time.  Anything that can help me chip away at the mountain of code yet to be written makes a difference.