Author Archives: Matt Warren

The main lesson from a handful of recent books that I have read has been focus on fewer, more important things if you really want to make progress.  Less but better.  And that the best way to maintain the momentum on the projects you do want to take on is to make small steps and celebrate the progress, rather than reaching the end goal.

Studies have shown that the best way to create engagement in your work is to either experience achievement or recognition of achievement regularly.  This is something you have probably experienced personally.  The best projects are the ones that you can feel like you finished something at the end of every day.  Massive all or nothing projects that drag on each day where you work hard but it’s difficult to see the progress can wear you down very quickly.

With this in mind, it is important to structure your projects such that there are always pieces where people can feel personal accomplishment or otherwise provide some external recognition of something that cannot easily be sub-divided in to small tasks.

This works at various different scales too.  Entrepreneurs talk about Minimum Viable Products and “Done not perfect” to describe that initial ship-able product that can be celebrated as a turning point in the business.  At the day-to-day scale the accomplishments might be to implement a button on an app, or finalize financing terms for a business loan, or write a chapter for a book.  When you start off the day knowing the small task that provides a small step towards your end goal, then at the end of the day you can feel that sense of accomplishment when you complete it.

These small daily accomplishments are THE major factor in maintaining momentum.

Work each day without the sense of accomplishment is like crossing a bog – slow, tedious and dreadful.

With the sense of accomplishment it’s like driving a car on smooth paved roads – even if you take your foot off the gas you’ll keep going forward.

How do you make this concrete and apply it to YOUR goals?

There are two steps/skills required to control and build your momentum.

  1. Focus
  2. Planning

Focus is about very specifically knowing what your goal is and using that goal as part of all your decisions.  Develop your goal by taking time to really think about it, make it something measurable, attainable, and time boxed if possible: “lose 10 lbs by summer vacation”, “reach $1M in revenue this year”, “sign up 1000 new clients this month”.  With this goal in hand filter all decisions through it.  “Will X help me accomplish Y faster?” If the answer is No, then put it aside, decline the offer, and continue to use your time on things that will get you to your goal.

Planning is about taking the time to really think about how you can accomplish your goal.  Figure out how to divide a big goal into smaller daily or weekly goals – something that is actionable. $1M per year in revenue is more difficult to understand than a $4000 per day sales goal.  Then put systems in place to measure and accomplish those smaller goals. Up front planning is important but it is also critical to re-evaluate and adjust the systems as progress is made and you learn or experience roadblocks.

With a good plan and the ability to maintain focus on your goal you stand the best chance of having the daily accomplishments needed to create momentum.  Slowly but surely these accomplishments compound until massive progress is done, goals are met and success is had.

As the father of a 18 month old, it’s been fascinating to try and understand how her little mind works.  Currently she is getting quite good at classification: car, cheese, door, dog. Everything she sees is echoed back.

At this early stage in development it’s easy to see that what you say and do have immediate impacts with what she learns and how she behaves.

This doesn’t stop just because we get older and become adults.  Our minds are flexible and always changing – forming new memories, changing opinions, learning new things.  All these new growths in the mind are a result of the external and internal stimulus we give it.

It has been said that reading is the most effective form of mind control.  When you read, the words on the pages leave an impression. The concepts give your mind something to spin on until the books ideas merge with your own.

On the other hand. Feeding your mind with the wrong stuff can have unfortunate consequences. In an effort to teach Watson (IBMs Jeopardy winning AI) pop culture and slang, they fed it with the content from  Unfortunately it had the effect of turning Watson into a potty mouth.  With an AI they were able to simply undo that.  Human minds don’t have an undo function.

Do yourself a favour and be picky about the information and ideas that you feed your mind. Be mindful of the internal thought processes that develop your opinions. It will dramatically impact your future.

Sometimes you need to go back and look at the things you’ve done in the past to see if anything is due for an update or refresh.  Leaving old products to go stale is a sure way to let your customers know that you don’t care and don’t provide good customer service.

With that in mind we’re going back through our catalogue of products – stuff that we have spent thousands of hours developing – and seeing if we can apply what we know now to those products to breath new life into them.

Beyond the easy stuff like bug fixing, graphics tweaks and updating and modernizing the projects it’s a chance to apply entirely new concepts.

One that I’m particularly keen to experiment further with is Behavioural Dynamic Response.  The idea is to trigger context correct information to users to help push them through the key response indicators.  It may be a notification to get the user to finish the particular level they were on, or to come back to beat their friends score.  When you have sequences defined that you know you want your users to go through you can do whatever is within your power to get them to keep taking that next step.

Behavioural Dynamic Response is a super powerful technique that is not yet being widely used and shows a lot of potential for improving the user engagement with your products.

Even without the major overhaul and completely new features.  Just the occasional touchup to your products shows that they are still active and more worth checking out.

There are plenty of hurdles that you have to make in order to be successful.  Perhaps the most critical is taking something all the way to completion.  When you are not working with a team this is a deceptively difficult thing to do.

It takes determination, momentum and accountability to start a project and see it through to the end and beyond.  Many times you will hit on things that seem insurmountable or mind numbingly tedious.

When I launched the iPhone apps that I’ve worked on the struggles all add up. All the aspects to each project needs to be completed and to an acceptable standard.

  • Software development
  • Graphics
  • Sound FX and Music
  • business registration
  • iTunes accounts
  • bank accounts
  • certificates, signing, provisioning processes
  • marketing graphics, app descriptions
  • webpages, support forms
  • backend
  • testing and Quality Assurance
  • App Submission
  • ongoing marketing
  • iteration and improvements

If just one of these presents a hurdle you cannot overcome by either doing the work yourself or delegating to someone who can then your project is likely doomed to fail. Like the links in a chain only one link needs to break for the chain to fail.

That is why finishing is so hard.

Projects start with the best of intentions, fantastic ideas and a solid plan and can still be derailed by a hiccup.

The Agile approach of daily stand up meetings is supposed to prevent stoppages from lasting too long.  Eventually someone says: “I can’t continue until X is complete.” This is an indicator that someone in charge needs to take action quickly to keep the work progressing.

When you’re working on your own it becomes incredibly difficult to self diagnose these situations and push through.

That’s why I have tremendous respect for anyone who finishes a project on their own.

For those of us who can’t take the trip to Montreal this year for Pycon all the talks are on the Pycon 2015 youtube channel.

To become the best of the best you have to learn from the best and all the most active and knowledgeable Python developers are at Pycon giving amazing talks that will teach you something you didn’t know before.

This talk from David Beazley about concurrency and socket programming is quite informative. Watching him livecode the entire presentation is extremely impressive – it takes a tremendous amount of knowledge and experience to deliver a talk like this:

There are so many goodies in the youtube channel. I encourage every python programmer to watch and learn as much as they can.

I saw this said in a book I recently finished reading about company planning and strategy.  For sure when I read it first it caused me to pause.  Could there really be that much difference between good and great?

The more I thought about it, the more I came to agree that it is a pretty good estimate of the difference in costs to a business.  One great employee will do things better, with fewer errors and without the communication overhead of having to distribute the same work among three people.

In terms of salary costs that can add up very quickly.  The great employee may demand a 20-30% premium over the good employees but by needing 3 people your total costs skyrocket up 250%

It’s something to keep in mind if you ever are interviewing or hiring.  It’s usually better to wait for a truly great employee than to settle for someone that you don’t feel is going to bring a tremendous amount of value to your team.

Stack your company/team with A players and your chances of achieving your big audacious goals multiplies.  Introducing even a few even a few mediocre people can derail a project and create a stressful work environment for everyone.

Decisions can be paralyzing when you have to make them.  Even more so when you don’t have the information you need to make an informed decision.

In the day-to-day work of programming we make decisions all the time.  However the decisions we either don’t have answers for of don’t have the power to make ourselves can often block things.  These blocks can easily last hours or days if we need to co-ordinate with other people to make the decision.

Part of the planning stage of a project is to make as many of the decisions up-front before development starts so that the process of writing software doesn’t get blocked waiting for or discussing what to do next.  In an ideal case decisions would be always ahead of the developer needing to work on implementing them.

The output of the planning should be essentially a to do list that can be worked on quickly with enough information so that no further clarification is needed.  This is essentially the key that Kanban – writing tasks down on cards forces you to think through and make decisions so that the coding tasks are directly actionable.

When done right, programming can be extremely productive.  Having a work queue to pull from is a popular design pattern for implementing applications and it works similarly with scheduling programmers work.  When the producers (decision makers) ensure the work queue is full, the readers (programmers) won’t be blocked waiting for work to do.

This is commonly implemented with a Todo list, bug tracking software or Kanban style tools.

Whether it is a small one-person project or it belongs to a large team you should strive to keep everyone engaged by ensuring decisions are made before programmers need to implement them.

Why would anyone ever suggest that it’s better to focus on quantity over quality?  Clearly pushing out a pile of sub-par work is not a good idea when you could take your time to think though things and produce a master piece the first time.

The fact is that you can’t easily produce top quality work without the experience you gain from doing something many times over.  Each iteration is a chance to learn from your mistakes and iterate on better approaches.  You can’t gain this experience without sometime dedicated to producing a quantity of work.

Malcolm Gladwell might consider this to be part of the 10,000 hours it takes to really master something.  A Aikido dojo might just consider it practice, and a student would consider it to be homework.  This is what it takes to get really good at something.

When you learn your multiplication tables you take the time to go over them again and again until your recall speed is high.  If you got to the test and had to multiply every 1-digit number by counting on your hands you would never finish the test before the time was up.  Getting good at anything takes sheer quantity to train your brain to be quicker.

As adults we tend to stop focusing on this as a way to learn new things.  We’ll just wing it and let our previous 30 years of life experience just coast us through a new task.

Even by the time you get to University the amount of practice you are expected to do is greatly reduced.  Professors will walk through one sample problem in the classroom and give one assignment question for each broad topic.  It’s hardly enough time to grasp some concepts, and certainly not enough practice to burn that knowledge deep into your cerebellum.

A journey to undertake a significant amount of practice like this takes small steps of progress every day.  By adding to your daily habits with the action of doing something to add a bit more practice can make a massive difference over the course of a few months or years.

I have personally challenged myself to write some Python code every day.  After a streak of 150+ days in a row now this is very clearly paying off.  The more I do, the deeper into the language nuances I get and my speed and recall has gotten better.  It means I’m more confident in the code I write every day and I can leverage the language in ways that make the programs I write better.

The focus is on the process of doing these things in volume, with a eye towards getting better each time.

Daily habits like these have a massive effect on you over time.  It’s like compound interest.  After a certain amount of practice you will be better than 99.9% people and at that point you are at the high end of a long tail distribution and get to enjoy the benefits of being among the best in the world at something.

Being action oriented is one of the biggest differentiators I have noticed in the most productive people.  It’s amazing what you can get done in a day when you just take action to make it happen.  Even a small step can get the ball moving on a large project.

One of my partners is the most action oriented person I have ever met.  No time is ever wasted with idleness.  A car ride is a chance for brainstorming.  Every phone call is a chance to network, spread ideas and get commitment from others to meet deadlines.  It is no surprise that he has started many successful businesses and has an impressive network of connections.

It can be quite amazing what can be accomplished when you really take action and get some momentum on a project. or tasks.

Most of the time I find myself in these situations when I decide that no matter what “this is getting done today!”  Then it doesn’t matter what it is that needs to be done: clean the house, write code, write blog posts, run errands, fill out paperwork.

Taking action can also take another form.  It is a great immediate response to anything that you want to accomplish or take advantage of, but don’t yet know how.

For example. the Japanese economy is under massive strain. Debt to GDP is at unheard of levels which seem unsustainable and are at risk of a major correction ( think Iceland or Greece x 100 ).  Knowing this you might want to ask yourself what actionable steps you could take to profit off of a default on Japanese debts.

This frame of thought, to always think about what you can do is a key differentiator with the most accomplished people I know.

For a decade I have pushed back on switching to an IDE for coding Python.  My preference has always been to use the minimal editor possible to help force a level of consciousness in my code and avoid the complacency that can come from having tools that are just too powerful.  Auto-complete is awesome, but if you lean on it too much it can prevent you from actually caring enough to retain information.

When the answer to a question is easy to find – your brain opts to avoid the effort required to push that knowledge into longterm memories in favour of just asking the question again.  Why bother remembering APIs when the IDE will just finish the typing for you.

Perhaps some of my distaste for IDEs came from having to use Eclipse to write Java.  A slow clunky editor that even after years of programming left me feeling inadequate at writing Java code.  It pushed me back to Vim for a long time in an effort to actually feel attached to my craft again.

Over the last couple weeks I have been exploring using PyCharm to write python code.  This was driven by being required to dig into some incredibly convoluted code written by other developers where a simple text editor just didn’t provide enough help with understanding how things worked together.

This experience has opened my eyes.  A good IDE really can connect a lot of dots.  I still think there is incredible value in learning a language, frameworks, and libraries as well as possible by actually typing them out in a dumb editor.  It takes a while to develop the knowledge to really be considered an expert.

Once you have the expertise an IDE can provide a lot of leverage.  I will probably never give up the simple text editor (vim is always a requirement for remote development) but will continue to lean on PyCharm for when development speed is critical.  Especially with a dynamic language like Python the insight from an IDE can sometimes be a lifesaver.