Category: Advice

  • On Taking Action

    Many years ago I started reading and taking advice from a dating guru. One of the most important things I got out of the material was the frame of mind that being the guy who actually does things and leads by example is critical.  I changed from the guy who doesn’t dance to the one who is always first on the dance floor.  That re-frame cascaded into other areas of life.

    Being the first person on a dance floor takes confidence and an ability to see what to do and then take unilateral action. Taking action and following through until completion is something that I take a lot of pride in.

    Changing a broken lightbulb, writing code for a personal project, trying out a business idea or building something are action items that can make a real difference. Not every action leads to success, but luck comes to those who keep trying.

    Like this quote from Thomas Jefferson:

    I’m a great believer in luck, and I find that the harder I work, the more I have of it

  • Flâneuring

    A term made popular by the French Poet Beaudelaire has been on my mind for the last month.

    Flâneuring is when you take an idle stroll. It’s a practice that that I learned about from reading vagabonding by Rolf Potts. In the world of travel, flâneuring is a way to break out of the tourist traps and find your own adventures.  You just wander until you come across something that peeks your interest and let serendipity play a role in determining your experiences.

    The act of flâneuring necessarily requires you to abandon the structure and habits you might have – to give up your schedule and open yourself up to things as they happen.

    Even when not being a tourist, flâneuring can be a positive and eye opening experience in your own city.  A random stroll through unfamiliar streets gives you the chance to discover new restaurants, shops, paths and people.  It is all too common to for people to live in a place and never see it.  You get stuck in a routine for the regular route to work and the shops you frequent.  It seems odd but there are many native New Yorkers that have never been to the Statue of Liberty, but when things are so close it can be easy to take them for granted.

    More broadly, the spirit of flâneuring is that of discovery and exploration – something that seems so natural to us as kids.  Everything is new when you are young.  The older and wiser we get the more we need to go out of the way to encounter new things.  New things drive personal growth and make life interesting.

    Go flâneur!

     

  • Learning How to Learn

    My recent experience with daily freecoding taught me a lot about learning programming and about how you learn new skills.

    There were several types of freecoding sessions that I did and each of them proved useful for different reasons.

    I had a handful of memorized programs one of which was to program a deck of cards, shuffle the deck and print them all out.  I memorized this and practised several times recalling the whole program and typing it as fast as I could.  Getting fast at this reinforces basic syntax, it improves your muscle memory for typing and helps add to a repertoire of coding patterns that can be recalled quickly.  Since the bulk of programming day to day is loops, string manipulation and parsing, this type of practice can greatly improve your productivity.  However, it doesn’t help with your ability to solve problems.

    Other days I would seek out a problem.  Rosetta Code is a good resource for coding problems that can usually be solved in just a few lines of code.  I’d find something that sounded interesting, implement my solution and then compare to the published one. This process helps with your ability to produce code that can do what it needs to do, but also by then reading other people’s solution you often learn about nicer or more concise ways to implement it.

    The final type of freecoding I did was to find an interesting library or package I wanted to try out, and implement some examples with it.  From a learning to code perspective this doesn’t help a lot.  Much time is spent going though documentation and the temptation to copy and paste is high.  It did, however, let me explore a lot of variety and learn about some specialized things – such as what you can do with special non-printable terminal characters)

    Some ideas I have to make the experience better going forward would be to add a scheduling component.  We remember things better if we try to recall them just before we forget them.  This is the concept used in Spaced Repetition Systems (SRS).  Applying this to a learning system for coding might include a development phase where you create a new piece of code that introduces new concepts and then a handful of recall sessions where you try to re-implement one of those previously created programs at a later date.

  • Lessons From 253 Days of Consecutive Freecoding

    My recent camping vacation is what broke an epic 253 day streak of github commits.  Overwhelmingly this activity was a daily practice of freecoding to see first hand just how effective it could be at getting better at programming.

    Freecoding is based on a writing technique called free-writing which is supposed to get the juices flowing and eventually lead to you developing a faster thought to fingers connection for getting your ideas out.  It is a popular practice for authors, but has never become something that programmers took up.

    With a bit more extensive experience now with the process and it’s effectiveness I can draw some conclusions about how it works and where the difficulties are.

    By far the biggest difficulty is trying to think of something original to write every day.  Unlike story writing where you can ramble out words with markov chain like inspiration, the strict syntax of programming forces you to think ahead about what you want the program to do.  I also found it psychologically difficult to finish a program that had syntax errors.  Finally, writing a script is not always easy to to linearly and jumping around the code provides an interruption that can stop the flow of thoughts.

    There were a lot of positives though.

    • Finding interesting things to program everyday inspired me to keep a list of interesting projects and try them out
    • It gave me an excuse to test out things like how threading is limited by the GIL in python which I hadn’t run into with my job
    • was able to scour through the standard library and uncover some features that I now incorporate often into my code.
    • got a much better handle on parts of the language that I didn’t use often such as functional programming
    • took time to try some popular libraries in areas I don’t usually get to deal with (mathematics, graphing, and machine learning)

    Through this practice I feel like my knowledge of Python was able to reach a new plateau.  Learning by doing and practising everyday is a tremendously good way to improve.

    if you are curious what kind of code I wrote everyday for 253 consecutive days it’s all on my github account.

  • Why You Should Find Time to Play

    Play is one of the more undervalued activities we can undertake as an adult, yet it is one that differentiates many of the worlds top performers from the rest of us.  Playtime could be considered to be the pinnacle of Maslow’s hierarchy of needs.  When you are intrinsically motivated and enjoy what you’re doing  you might considering it playing.  It’s fun.

    Play is an activitiy which can promote dramatic shifts in learning.  When you are exploring the boundaries of your understanding through play it becomes ok to try and fail, to do thing that might be crazy.  Stretching yourself often enough results in leaps in your skills.

    With physical skills the benefits of play are particularly well appreciated.  We go to the playground and become ever more confident with our balance, strength and co-ordination.  These basics translate into other physical skills with bikes and skateboards, and those of us who continue to play like this through into adulthood can reach a professional level.

    For mental skills the idea of play is a lot more varied.  It could include anything from board games, to trivia nights to personal challenges to building something or just thinking.

    Over the last 227 days I have been committed to writing code every day. Sometimes this is a chore and other times it is one of the highlights of my day.  This daily goal of writing a little bit of code every days is my chance to play with software in a way that I don’t normally get to do with my job.  I have been writing python code for this and as a result of all this play my depth of knowledge has increased dramatically.  It’s code that I enjoy writing and as a result of that fun the positive emotions carry over to my work when I write code there.

    Richard Feynman was one of the foremost physicists of the 20th century.  He never stopped enjoying himself or having fun with the work he did. In the book Surely You’re Joking Mr. Feynman it was quite apparent just how much benefit he got in work and in life from being playful and curious with everything and everyone he interacted with.

    I don’t believe you can be a top performer in your field unless you can find the joy and the play in what you do. As adults we easily lose sight of this aspect of life.  Play is not only a chance to improve ourselves it is also part of the spice in our lives that can make it worth living at all.

  • Book Reports

    For the last couple weeks I have been trying to catch up on my goal for reading 36 books this year.  Progress so far has been good and I have gotten through a decent backlog of books that I have wanted to read.  With the new morning routine of  reading before the day starts I have built some momentum that keeps me interested in finishing the books throughout the day when I have a spare few minutes.

    All this reading has been giving me quite a few new insights.  The bulk of my reading this year has been in entrepreneurship and management areas.

    One new practice that I have started to do with the last 3 books I have finished is to write a book report.  Just a 1-page report of the major impressions from the book, any lessons worth keeping and any other notes I want to have if I need a quick refresh about the book.  It’s like high school. When I think back to books I read just 1 year ago, my memory is fuzzy of anything specific

    One of the things I want to get better at is recalling the title and author of the books I’m reading. Writing the report forces me to learn how to spell the authors name and type out the title of the book. I’m hopeful that that simple thing alone will help me recall the books I’ve read so that I can more quickly talk about them in conversation.

    It seems like a nice habit to have, and I hope it proves worthwhile.

  • How to Maintain Momentum

    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.

  • New Bike and Fractured Rib

    This weekend I picked up a balance bike for Ada to start playing with.

    green_sport_1__83411.1405352731.1280.1280These Strider bikes seem like a good way to get a child used to biking and gaining balance skills.  It sort of takes the place of ever needing to go with a tricycle or a bike with training wheels.  Once they get good at balancing on these they can graduate directly to a regular bike.

    In the process of giving Ada her first lesson and riding around the kitchen table I managed to stub my toe and fall into a doorknob.  I’m fairly sure I fractured a rib 🙁

     

  • Asset Allocations

    Late last week my RRSP transfer from mutual funds into Questrade completed.  It feels as if I lucked out in that the 5 worst days of the year on the market happened while the cheque was in the mail to move money.

    Trying to devise a strategy for investing that is both safe, has the potential to beat the market, and protects me from myself lead me to read a couple of books on portfolio management theory and devise an overall approach to managing my investments.
    The take away from the world’s best investors is that the best approach for investing is:
    1. Diversification is the only guaranteed way to reduce risk and maintain good returns
    2. Rebalance your portfolio no more than twice per year to reset your risk exposures to account for drift
    3. Don’t trade on emotion – you are your own worst enemy
    4. Always consider the tax implications and costs to trade
    One of the biggest lessons I got from working at an investment management company is to hedge all your bets.  You never put all your chips on red because your analysts think it’s the best bet.  You buy the whole board and make small bets.  This way you maintain diversification – which lowers the variance of your whole portfolio.  And provided you can do better than 50% on picking winners and losers the portfolio will do better than it’s benchmark.
    Extending that to the asset allocation for a complete portfolio is relatively straight forward.  It starts with the question: What should my portfolio look like at a high level?  To answer that I’ll go through the break down of how I built my portfolio.
    The asset types I went for were:
    1. 40% Bonds
    2. 50% Stocks
    3. 5% Precious metals
    4. 5% Commodities
    Noticeably missing from this list is REITs.  I own a home which is more than enough exposure to real estate for my liking.
    I’m targetting 90% of my investable assets into broad low cost ETFs. 10% is individual stocks which I believe have good moderate term prospects to beat the market.
    Within each broad asset category things are further diversified:
    Bonds:
    • 1/4 High Yield corporate bond ETF (HYG)
    • 1/8 DEX index Canada government & municipal bonds (XBB)
    • 1/4 Canadian Real Return Bond ETF (XRB)
    • 1/4 Canadian Hybrid Bond ETF (XHB)
    • 1/8 Emerging Market EFT (LEMB)

    For bonds I wanted a good mix of corporate, government, and international bonds that were hedged against interest rate changes a bit with the Real Return bond (XRB).  Once I get a chance to compute the co-variances on this selection I may re-allocate.  In particular it seems a bit under-exposed to US and EAFE bonds.

    Stocks:

    • 4/10 TSX 60 ETF (XIU)
    • 4/10 EAFE ETF (XIN)
    • 1/5 Personal stock picks – currently (AAPL, BA)

    Admittedly this isn’t as diversified as I’d like, future purchases may go towards something very broad like the MSCI World ETF (XWD) or Vanguard World ex US ETF (VEU). I’m betting on Apple because they have a strong product lineup, entering new markets next year and have been doing a lot of stock buy backs.  Boeing is my bet that if oil stays low, airlines around the world will see billion dollar profits and funnel that back into growing their fleets with new planes.  Boeing is also a hunch that it’s possible to get ahead of the next trend by thinking critically about where profit from the current trend could end up.

    Other:

    • Precious metals are in gold bullion (CGL)
    • Commodities are in a broad ETF (CBR)
    There are so many options for things to invest in that it’s hard to choose.  My hope is that this portfolio will be low risk and have great returns.
    New money added to the RRSP will be used strategically to keep the portfolio in balance which will hopefully reduce the need to make big re-adjustments.  The way to think about this is that I will be buying the assets which have become the least expensive – thereby dollar cost averaging down.  It’s a way to frame things to avoid panic selling at the worst possible time.
    It was kind of a fun week to research, read and figure out how to invest things.  Learning is, of course, an endless journey and I’m excited to iterate and get better at investing.  It’ll be exciting to see how this portfolio does over the next year.
  • Why You Should Build Your Own Tools

    Something has happened in the manufacturing world that is nearly irreparable.  As America moved production to China and downsized factories to realize the profit gains from low wage Chinese workers it also decimated an entire skill set from the national tool belt.

    When a factory tools up a new line to produce a new iPhone, sneakers or toy it is the job of a skilled tool maker to decide what custom tools can be designed to make things efficiently.  These may be custom 1 of a kind drill bits, platforms, moulds, or machinery that someone with a creative and technical skill-set needs to design and create.

    When America outsourced it’s factories it also lost these very valuable skills.  Now, as a result of that loss of knowledge spinning up a new factory in America is a very difficult task to accomplish.  That loss will take a long time to recover from.

    In the world of software development, abstraction is often a panacea.  Abstraction has created a similar migration of technical skill sets over the last few decades.  We abstract out the complexities with layers upon layers of helpers, protocols, frameworks and libraries.  These extra abstractions can boost our productivity tremendously so long as we don’t encounter a use case that isn’t handled by our chosen abstraction technology.

    The danger when you completely ignore how those abstractions work is that the skills and knowledge it took to create them die out as well.  Who are the tool makers?

    I have found it incredibly useful when trying to understand a new tool to have a solid grasp of the underlying technology. Knowing how to build a HTTP service at the TCP level (and from time to time actually doing it) makes it easier to reason through issues and push the limits of a framework like Ruby on Rails.

    Software developers everywhere should spend just a little more time writing the tools they need to do things quicker in the future.  It is investments in the tooling that has the chance to compound to make future work exponentially easier.

    Create stand alone services that can be leveraged on multiple projects, write code generators, and libraries. Create your own frameworks.

    The style of programming required for creating a great re-usable library is very different from that used when doing a business application.  Good, flexible code often relies more on using the dynamic capabilities of a language.  You’ll often find yourself needing to use meta classes, introspection and other fun constructs.  The people that know how to wield these tools are going to be better at debugging, see opportunities to improve code, and create their own tools.

    My plea to software developers everywhere: create your own tools.  Know how to create the tools you use, and how to use the tools you create.