Category Archives: Advice

And work on them.

There are many times in life when we don’t get what we want.  A business idea fails, we lose an argument, we don’t get the job promotion or pay raise we hoped for. It’s easy to find excuses that absolve us of any blame – people just don’t understand, the other guy pulled some strings, the game is rigged.

Here’s a bit of advice, consider the possibility that you are at fault for the loss.  Perhaps you needed to be more articulate or exude more passion in your words. Perhaps you needed to be more political in building support for your ideas. Perhaps you just haven’t proven you deserve that promotion or raise yet.

Whenever you ask yourself a question your mind will come up with answers.  You have to be careful to ask the right questions to get helpful answers.  Answers that put you into control.  “Why didn’t they pick me?” is an open question that invites speculation as answers. “What could I have done better?” helps focus things inward on yourself – where you have the power to make changes.

Blaming others, or blaming the system will only serve to make you bitter. It gives you no actionable steps to do better next time.

Coming up with good answers to these questions requires some knowledge. If you don’t know anything about salesmanship then it is easier to be oblivious to seeing others apply it, or recognising the need for it in yourself.

A broad base of knowledge comes from reading and deliberate learning.  Without the foundation you won’t come up with answers on your own. However, being cognisant of your own self to the degree that you can identify when you don’t know and have to rely on an outside perspective is rare.  Very rare.  We all feel like we have a good grasp of how the world works, when the reality is that we are all clueless. The human mind isn’t sophisticated enough to comprehend the interactions of 7 billion other people.

If you are able to accept your own faults and listen to the criticism you are better than most.  If you take action on it, to improve yourself, you are one of the very few who do.

 

There are proponents of both cases for building a business.  Should you identify the vision and strategy for one amazing product and chip away at it until it becomes a success, or should you try 10 small experiments, see what sticks then focus on the winners?

David Heinemeier Hansson of BaseCamp started his venture with a dozen different web apps, developed more or less in parallel for several years.  After a while it became apparent that one of them was vastly more popular than all the others and those lagging Apps were eating up precious attention that could otherwise be better spent focused on making their Basecamp app even more awesome. Eventually they sold off the other assets and doubled down on their winner.

Ford on the other hand started out famously with one car that was available in just one color.  The model-T was a singular project and the focused effort one building just one thing really well is what helped Ford compete and survive in those early years of the automotive industry. Had Henry Ford decided to develop 10 models of car at the same time it’s unlikely there would be a Ford Motor Company today.

Had DHH decided to start his company based on just one of those 12 app ideas, there’s less than a 10% chance he would have picked Basecamp and ended up with the winner he has today.

It seems that in both those cases one approach or the other was a requirement for their success.

However there is another strategy that attempts to strike a balance between these which is the pivot.  With this approach you focus on one vision until it can be validated by the market and at a certain point if things look like a dud then you re-align the company on a new vision.  This has the advantage that you maintain the efficiency that comes with a focused mission, but if the market doesn’t resonate with the product you can keep the company together, re-used some of the assets you’ve built and test another market with a renewed focus and determination.  Hopefully it doesn’t take too many pivots to find something that fits.

How do you know what is the best strategy for your business?  I think it comes down to how the development cycle matches with the marketing cycle.  A lag creates gaps where the development team may not have market driven direction to go, and the marketing team may not have anything new and hot to sell.  Filling the voids (if you have them in your business) may be an opportunity to develop a new idea, or an indication there is an opportunity to re-structure and tighten up the slack.

I have been writing for my blogs for over 15 years now.  A lot has changed with the internet in that time, and over the years I have investigated many ways to let my websites pay for themselves.

When Adsense was first announced I jumped on it only to find that it paid almost nothing to publishers like myself.  Just pennies at a time would take years to generate enough given the traffic on my sites for Google to cut me a cheque.  In all the time I had been running ads I think I had only ever received a payment once.

The dismal returns eventually made me realize that the ads were more detrimental to my readers than they were worth.

However, recently I have been on a mission to cut my budget for servers and part of that effort is to get my websites to pay their own way or else risk getting shut down.  I started by experimenting with adding Adsense back to one of my blogs and found, to my surprise, that it earns enough to pay for its hosting costs.

I have extended ads onto this website, so that I pay less out of my own pocket to keep it running.  Hopefully keeping these sites financially sustainable will be mutually beneficial to both me and the readers.

One of my ambitious goals for the year is to take on 12 programming projects.  The projects I’ll undertake for this challenge have a couple of requirements:

  1. It should be something that I can complete in 1 month of calendar time
  2. it should take less than 40 hours of effort
  3. it should ideally challenge me to learn something new
  4. it should maximize impact for someone other than myself

Trying to think of project ideas that can have a big impact with less than 40 hours of effort is not easy.  Luckily Kenneth Reitz serves as a model for how to accomplish this.  He is best known for authoring the awesome requests library, which is ubiquitous. Over the last while he’s been on a tear.

  • typy.io – a service for sharing text snippets
  • pipenv – a wrapper that combines pip and virtual envs
  • maya – datetimes for humans
  • saythanks.io – a way to send thank you to open source developers

These are potentially high impact projects compared to the effort required to create them. It’s something that I will try to replicate this year with my own projects and an approach to open-source development that I wish more people took.  Flooding the community with high impact contributions enriches us all.

Impact can be a trade off.  A large impact can come from a small improvement for many people or a large benefit for a small number of people. And of course these are all relative to what leverage you have to help.  The audience that Google can have an impact on is vastly different than the number of people I can reach. So I’m trying to be realistic about what kind of impact a 40 hour project can have.

Optimizing for impact seems to be a great goal.  It re-frames the importance of a project; If I could do something in 40 hours that would double someone else’s business it might be a worthy project to consider.  If I could contribute a wrapper for an API that is used by 1000s of developers it could have a wider impact.

Scratching your own itch is the common motivation for open-source development, but in a sense it is inward focused and self-serving. In a world where we increasingly don’t talk to our neighbors or contribute to our communities doing things to help others sounds radical.

Be radical, make an impact.

I’m ramping up a couple of eCommerce websites as part of a strategy to create a home based business that my wife can take charge of when our daughter starts school in 9 months.  Part of building the foundation for a business like that is to get re-acquainted with the world of internet marketing… something that I was deep into several years ago but am now way out of date.

Facebook Ads seems to be an interesting platform for advertising now and is significantly different from Search advertising.  I’ve been reading and learning about various strategies for marketing on Facebook and I’m hearing about some really crazy and convoluted advertising funnels, like leveraging cheaper advertising markets for likes and engagement to help drive down costs and help improve social proof in the target market.

The interesting marketing psychology is that people are not on Facebook to look to buy products and so ads which sell things stand out as an ad and are not engaging. There really needs to be some kind of entertainment or curiosity value.  Like paid advertorials in print media the goal should be to mix in with the rest of a person’s news feed and not stand out as an advertisement.

To that end I’m going to be pumping a fair bit of money into Facebook over the coming months to test ad campaigns and find viable ways to run an eCommerce business.

 

For software developers there is an unhealthy prevailing belief that being a great programmer is some innate skill that others have. Brilliance with developing code is difficult to train for because it either requires some gift you don’t have or years of on the job experience.  There is a large amount of impostor syndrome within the community which is not healthy or productive.

Of course people who are top developers know that it takes a lot of hard work to understand core concepts. It helps to have a mentor and a solid education and access to training.

There is a tactic to getting better which more programmers should be using.  Deliberate practice is the most critical aspect to improving any craft and programming software is not an exception.  Like playing piano or painting or ceramics there is creativity and technical skill which can be improved on with deliberate practice.

If you want to get better at your craft it is not good enough to simply work on job tasks. For work you typically do something once and then it’s done, there’s few opportunities for repetition and critical evaluation.  If you were learning to play piano and you had a sheet of music the equivalent to developer workflow would be to play through the song once, stopping to go back and fix your mistakes then when you finished you’d put the song away move on to a new song.  Practising piano requires playing the same song hundreds of times, you start by playing and focusing on not making mistakes, when that is accomplished there is still practice at making the song sound good with appropriate pedal usage, tempo and dynamic, and finally when that is good enough you can continue to practice the same song and add your own touches – arpeggios, slurs, delays etc.

How many times have you implemented a deck of cards?  Can you write one top to bottom without looking up examples on stack overflow, or querying the documentation or searching through code completion lists? Could you write a deck of cards in a procedural, functional and object oriented styles?  Could you meta program a deck of cards? Could you make a deck that is thread safe? distributed? Web scale? Obfuscated?

Practice. Do it often, and do it deliberately.

Writing code everyday has been an interesting challenge.

In 2015 I started to work towards a long streak on GitHub which eventually capped out at 250 days. The questions I wanted to answer was:

  • Can I apply ‘deliberate practice‘ to programming and get better?
  • Can ‘free coding’ (like free writing) be effective way to push through writers block?
  • How important is memorising to your coding performance?
  • If syntax and API unknowns don’t present bottlenecks to your flow how fast can I translate an idea into code – can it be limited by typing speed?

I started a repository for my daily coding.  It had a simple script to generate a blank file everyday for me to code in and I would try to code something.  Sometimes it would be to explore a new python module, or fiddle with syntax, or challenge myself with a rosetta code example or replicate a previous day’s code from memory.  I wrote dozens of Flask apps, memorised the methods of lots of APIs, and gained a level of confidence with writing Python that I don’t have with any other language.

At the end of the streak I had a repository with hundreds of small scripts.  Only a handful of them were multi-day efforts or had any real value.  The variety of this collection proved to be useful on it’s own too – several times I have referred back to these examples to help with my actual work and to copy/paste snippets from.  Some of them started me down a path of exploration – like calculating the return on investment for solar panels.

Part of what enabled me to maintain this streak as long as I did was a simple script I wrote to check GitHub for daily activity and email me if I hadn’t yet committed any code.  This simple hack was enough of a reminder to keep me focused even when I was otherwise distracted.

This past week I turned that script into a web service anyone can use.  CodeStreak.io will watch your public github activity and email or SMS you if you haven’t yet pushed any code for the day.  This is the first project of 2017 that I plan on building to expand on my previous streak.

In 2017 I want to build 12 projects.  Each should be roughly 10-20 hours of effort and result in something that provides value for other people.  CodeStreak.io is an example of the kind of project that I want to undertake this coming year, but it is also a tool to help ensure that the momentum is sustained for 12 months.  Blocking out 4 hour chunks of time is a helpful way to really focus and be productive, but 4 hours once per week has been (for me) too sparse to maintain interest in something long enough to finish it.  A little bit everyday keeps a project on your mind.  Attempting to maintain a streak will be a tool to power through the bits that are otherwise uninteresting or difficult.  CodeStreak.io is a foundational tool necessary to accomplish my 2017 goal.

The questions I want to explore with this new goal are:

  1. Without a concern for generating revenue can I just write cool things and get them out there?
  2. Can I get deeper into something new and create something useful out of it with less than 20 hours of effort?
  3. Can you get good at seeing a project from start to finish – what skills or traits will improve the odds?

Hopefully, I’ll have some answers at the end of 2017.

Recently I’ve been interested in finding a business investment – something like a B&B that allows me to put some of my retirement savings into a business that I have some control over its success.  The normal process for something like this would be to write a business plan or at least do some back of the envelop estimations for how much revenue is expected from the property.

The usual tool of choice is a spreadsheet.  And those are excellent ways to work through the numbers and visually see things.  However, the flexibility of a spreadsheet is somewhat limited for even more advanced analysis.

I wanted to take things to a different level.

What information could I get from looking at the market and scraping webpages that I could feed into a bigger model to see how other owners of similar businesses do.  By pulling in 1000+ comparables and running them all through a similar model to estimate each of their profitability it becomes possible to identify the traits of a successful business.

Applying this sort of ‘big data’ analysis is proving interesting.  There is an amazing amount of information freely available on the internet, but much of it exists in different silos.

In the example of running a B&B, there are lots of them listed on booking.com and similar travel booking sites.  These provide a partial picture of how popular a place is (from it’s availability) and the revenue (from the cost to stay there). Another big piece of the picture is the costs – which you can estimate by checking real-estate listings.  By putting all this information you can see many interesting things.

If your model is accurate then you can get answers to these questions:

  • What percentage of B&Bs turn a profit each year
  • Is there an optimal size / number of rooms
  • which attributes of the property correlate most to it’s profitability

You can take a deeper dive into the best performing properties to see if they do something unique – do they have nicer websites / photos? Do they do aggressive advertising? Are they active on social media?  Answers to these questions can help you find the strategies that are working best in the market – and perhaps things that are a waste of time.

This type of analysis is something I think more people should be doing.  It provides some competitive advantage in terms of the information that you bring with you into a potentially big investment, and reduces the risk that you inadvertently buy a lemon.

 

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.

Productivity is closely related to skills and talent so it’s been something that I have a keen interested in.  The actions you take to get better at what you do have fairly important role in your wealth and happiness.

I recently read the book “Talent is Overrated” by Geoff Colvin.  It was insightful in a lot of ways and built upon ideas that I had myself about what it takes to reach for the pinnacle of success.

Geoff busts a number of myths about successful people.

  • High IQ does not correlate to significantly more success
  • Fantastic memory is a skill you develop
  • “Deliberate Practice” is the (only) key to improvement
  • Experience in many cases correlates to lower job performance
  • Child prodigies rarely maintain their lead into adulthood

In a handful of skill sets there is a very clear framework for practice.  Music, athletics and chess have very well understood methods for improvement.  You start early, practice, learn and exercise until your skill improves. Stick with it long enough and it’s possible to reach world class standards.

With other domains of knowledge the frameworks for practice are not as well defined.  How do you practice software programming, project management or reading x-rays?

If deliberate practice is the determining factor in skill acquisition then how can we make sure that the education system supports it, and society builds on it to influence corporate decisions in an ongoing way?

The term “deliberate practice” is specific.  Simply working 9-5 at work related tasks where you’re expected to produce output is not considered practice.  Deliberate practice is hard by design, it is a process to continually push you slightly past your current limits, repeatably, and with feedback.

Hitting a bucket of golf balls at the driving range is not practice, but it provides the illusion of practice.  Without a coach to identify and provide feedback on each swing it will be very difficult to improve your skill.  Even Tiger Woods, at the top of his game, had a coach.

To answer the question for something close to my heart, how do you deliberately practice software development, I believe the answer lies in either finding someone better than you who can review or pair program with you who also understands how to coach, or by finding superior open source code to study and reproduce.

One of the examples from the book was how Benjamin Franklin learned to write. He picked articles from Spectator magazine that he wanted to emulate and he would take notes about the article.  After a few days when he had forgotten the text he would open his notes and try to re-create the original article. Then by comparing his against the original he could identify what he could have done better.  In the absence of a coach, this seems like a fairly ingenious way to get immediate feedback on your practice.

It would be good to test this sort of approach with programming skills.  It’s a concept I have started to test.  As with all practice, it’s is a long effort before the benefits are expected.