Author: Matt

  • The Bots Are Coming

    Slack is the fastest growing startup in history, and it is starting to drive a new kind of interface for users to make things happen within their businesses.

    If you remember way back the only way you could interact with a computer was through a command line.  With this interface you form very specific commands that require a manual for reference. Then with the advent of the mouse and graphical operating systems, these command line tools were mostly replaced with buttons and menus. This opened up computers to a new level of novice users, but there still was a need for manuals and books to learn how to use all these graphical applications.

    Today we have two new possible interfaces for how you can make computers do what you want.  Voice systems like Siri offer a compelling next generation way to talk to a computer with your voice but the technical demands for integrating this technology is still FAR too difficult to make it work with arbitrary custom software.  The other option is bots that run in chat systems like Slack that can offer natural language interfaces that blur the boundary between what we have come to expect of computers and what the future may be like.

    The other night I programmed a quick slack bot powered by the script from The Big Lebowski (one of the best movies ever).  This simple script interacts with the user in a conversational way and took less than 1 hour to implement.

    This type of interaction offers a future where we can casually talk (through typing) to the computer and have it do things on our behalf.  It doesn’t require a manual to know how to specify commands.

    This seems like a step in the right direction towards a broad range of tools that work in a more natural way.  Ultimately replacing the text input with voice will bring us to a Star Trek style future. But until that time comes we will be continuing to develop frameworks that allow developers to create interesting tools that know how to interact with users naturally.

    These bots can trigger plenty of things that might not have been possible with other interfaces.

    >> matt: hey @meeting_assistant, start a meeting with @jack and @jill

    >> meeting_assistant: ok @matt, join the Google hangout <here>, I’ll keep meeting minutes of anything you type in here.

    >> matt: @jack can you contact the client about that thing at that place tomorrow?

    >> meeting_assistant: @jack I added a reminder to your calendar for this ^^

    >> matt: @meeting_assistant, all done.

    >> meeting_assistant: ok, I’ll email the meeting minutes to everyone.

    This sort of theoretical chat bot is now entirely possible and it may just usher in a new age of business communications.  It’s now easy to forego the large enterprise application development cycles and instead focus on small text based services that can easily be deployed.

    The future of this kind of interaction may create a new opportunities to reduce costs and streamline business functions.  By triggering messages based on external events it’s possible to prompt employees to their maintain their workflows, or reward them automatically:

    >> time_bot: @matt, you haven’t recorded your time for yesterday.  please update your timesheet.

    >> overtime_bot: @matt, thanks for staying late, but it’s time to get back to your family

    >> kpi_bot: @matt, your performance has been exemplary this week, we’re sending you an Amazon gift card as a thank you.  Keep up the good work.

    I think this could be a big shift in how businesses run.  And companies that take advantage of this next generation technology stand to gain a tremendous competitive advantage in the coming years.

  • Productivity of higher level languages

    I recently had an experience where I was given the same programming problem as a handful of other software developers.  My advantage was that I was using Python while the other people were forced to write their solution in Java or C.

    The difference in the amount of time it took to solve the same problem with a different language was striking.  Most other people completed in about the 45 minute mark whereas I had finished in just 15 minutes.  An average of 3x less time.  That’s a massively significant difference in developer performance that comes primarily from using languages that aim to be readable and focused on developer productivity.

    I’d always known that Python was a productive language but that was the first time that I had experienced first hand just how beneficial it can be to switch from one platform to another.

    Imagine taking a 3 month project and complete it in just 1.  That’s a massive savings; enough to change a business idea from impractical to highly lucrative.

    One thing I’ve learned over the last couple of years is that with the right approach and the right tools you can make difficult application development accessible to even small budgets.  Sometimes it requires creative thinking and accepting unconventional solutions.

    I’ve worked on $1M projects that could have been MVP’d for 20 cents on the dollar by choosing different technology and different developers. It’s quite shocking to see just how variable it can be to develop the same software with different tools.

    If there’s a lesson in this it’s: Take care when choosing the people and technology.  The right choice can save you a tremendous amount of time and money.

  • Being A World Class Programmer

    A year ago I started on a goal to write and publish code every day to my github account.  That streak lasted for 250 days.  It was a learning experience that gave me time to broaden and deepen my knowledge of Python.  Though the actionable goal was to maintain a streak of activity, the underlying purpose was to get better at programming (both speed and quality).

    It was in many ways a success.  I learned a bit and got better.  However, as a form of practice it had limits and ultimately improvement plateaued.

    Since then I’ve been thinking off and on again about what it would take to reach the top.  Not the top 1% but the top 10 globally of Python programmers.  Even though there is no measurement of the top as there is in something like chess, it’s clear that as an intellectual endeavour some people know more and can write better code than others.

    Then I read about how Ben Franklin learned to write better.  He started by finding a source of writing he wanted to emulate – in his case Spector magazine articles.  He would read the article sentence by sentence and make notes about each intention and meaning.  After a few days when he forgot about the article he would go to his notes and try to reproduce the article from them then compare against the original and identify where his version wasn’t as good. By digging into why specific differences were better he was able to learn how to write better.  He was able to expand on this technique to improve his vocabulary and techniques for overall structure of a story.

    I have on many occasions tried to equate learning to program with authorship skills.  This is another one where I think programmers have an opportunity to learn something.

    Becoming better at something takes deliberate practice. The keys to effective practice is focus and feedback. You need to identify things that need to be improved and focus on those individually and then get immediate feedback to learn what can be done better.  You then cycle this process for hours/days/years.

    Until reading about Ben Franklin’s technique I didn’t have a good answer for how to objectively get the focus and feedback needed for practice to work.

    The current approach to learning in a professional setting is:

    • peer review
    • books/reading
    • conferences

    Peer review is great if done right.  If people use the review process as a chance to coach instead of just scanning for overlooked bugs then there is a chance things will learned, discussions will be had and the product will get better.  However this is dependent on peers that want to offer this kind of feedback and who are sufficiently advanced to point out areas for improvement.

    Books and reading can be a source of great ideas but reading ideas is not the same as originating them. People learning a spoken language experience this difference.  Exceptional amounts of time spent learning vocabulary, verb conjugations, prepositions and sentence structures can make it possible to understand something they read, while at the same time actually being able to speak a sentence is stilted and slow.  The mental processes for taking an idea and turning it into speech or code is different from reading and understanding what you read.

    Conferences are much like books except you gain a few more mental hooks to hang memories on (I remember learning about that at a conference in SF last year), and the chance to discuss things with peers.

    None of these options really provide a great way to reach the top. But Ben Franklin’s technique for practicing writing may be a hint at something that could actually people achieve elite levels (with a lot of hard work).

    It’s an idea I want to explore further in the coming months.

  • Going Mobile

    Over the last couple weeks I’ve had a growing concern that my office is just not functional any more.  A standing desk in a room pulling double duty as a spare bedroom.

    So over the last week I have pulled out all the office equipment and turned the room back into just a bedroom.  The experience made me realize just how much clutter there is everywhere and it all creates distraction.

    The white tennis shoes scenario.

    There’s a classic book for writers called “The Artists Way”.  One of the anecdotes is about a pair of white tennis shoes.  Imagine for a moment that you have an immense project in front of you – months worth of work.  And in the dead of winter with a foot of snow outside you sit at your desk staring at your computer monitor.  Then, from the corner of your eye you see your white tennis shoes tucked in the corner. There’s a little bit of mud scuffed into the toe;  you look back at your screen.

    Moments later there is a nagging feeling, you must clean those shoes.  Never mind that you won’t be able to play tennis for months.  This must be done now. “It’ll only take a few minutes” you tell yourself.

    Several hours later you’ve cleaned the whole room and accomplished none of your work goals for the day.

    A messy office is full of white tennis shoes and as a result I haven’t been getting much work done for what feels like forever.  To address this I’m taking the unusual approach of getting rid of an office entirely.  I’m focusing on getting my mobile office in better shape so I can easily re-locate to a coffee shop, the bedroom or the kitchen table to get work done.  By just moving to a place that has limited distractions I’m hoping I can stay more focused and get more done.

  • Making Longterm Plays

    In an age where we expect everything quickly it seems that it can be harder to have the patience to endure long term investments.

    People are career hopping between companies and entire job types more today than at any time in history.  Employees who want to progress up the ranks find that a quicker route is to job hop.  Ambitious employees are not content to put in 10 years at a company before getting a promotion.

    Investors also look for quick gains.  Few are willing to park their money for multiple years in order to get rewarded with modest gains. We look for the quick buck.  Day trading to make 1000’s of dollars in hours instead of months.

    This psychology has repercussions in our endeavours.  It becomes hard to focus for years on a blog to build an audience or create a piece of software in our spare time, or start a business.  These long term goals take time and time is the one thing that we too impatient to wait for.

    However, being conscious of this is the first step to being empowered enough to account for our natural tendencies and make long term decisions that are in our best interest.

     

  • Overbuilding From the Start

    A project I have been working on for the past couple of months has suffered from a critical planning error that early on has resulted in time and budget overruns as well as a product that has performance and stability issues.  It’s all because the decision makers at the top decided to take on risky technology and design choices anticipating scalability problems before they even have scale.

    One thing that I have learned over the years is that you can go a long way on the basics.  MySQL or PostgreSQL will scale very well for almost all use cases you are likely to be developing for.  In very few cases is the horizontal scalability of NoSQL options worth the complexity it brings.  Building out a distributed clustered environment from the start is a sure way to add unnecessary complexity to every subsequent technical decision.

    Now the project is over budget and behind schedule.  Any work that needs to be done has to deal with an architecture that adds complexity to every software decision and makes deployments more error prone and time consuming.

    Lesson learned I guess..  An MVP release should really focus on the keeping things as simple as possible for as long as possible.  For a $1M project, a 50% cost/time overrun is a lot of money.  Especially when a simpler architecture might have been 50% below the initial budgeted amount.

  • Success and Confidence: The Trump Effect

    With election activity heating up in the USA, and the prominent Donald Trump attracting a lot of media attention as well as leading positions in the polls it is interesting to think about what a crazy world we live in that someone like him has accumulated so much wealth and power.  It begs the question, why is he a billionaire and not me?

    The one thing that stands out about Donald Trump’s character which likely has much to do with his success is the unflappable confidence he has in his own opinions.  It takes a certain type of person to be able to double down from a personal debt of $900M and get back to billionaire status.  It says something about the amount of risk he’s willing to take on, as well as the amount of assets he has been able to leverage.

    His confidence is further evidenced by the way he talks about crazy ideas like building a wall on the Mexican border – with absolute conviction.

    Confidence is a trait that on it’s own convinces us of an underlying intelligence even when it doesn’t exist.

    When you need to get buy-in from others, confidence is an important part of gaining support.  It’s no doubt that Trump’s confidence allowed him to negotiate tremendous deals that allowed him to build his empire.

     

  • Focus is Critical

    At this point we all know that being a good multitasker is a myth.  The time it takes to context switch between projects can vastly wipe-out any perceived productivity.

    This has become more apparent to me recently as I have been asked to take on more work, or have taken on more for myself.  As a result annual goals fall behind, projects make slow progress and planning overhead rises.  This has knock on effects to perceived expertise – the amount of forward movement on a particular project is less in real-time than hoped.  When a month passes by with only a week of progress things are intuitively slow and perceived value drops.

    It’s important to say “No” to incoming requests and limit what is on your plate at any one time.  This actually can have a positive impact on your perceived value.  Saying “Yes” and failing or being late is far worse than saying “No” and leaving the impression that you have more important work to do.

    Focus is critical to both your own stress management, your external perceived value, and your productivity. Strive for only what is important, say “no” more often, and you will benefit.

     

  • 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.