Category Archives: Advice

How to find time

One of the hardest things in getting productive work done has always been finding time to get focused work done.  There are so many demands on our time that what we want to accomplish gets pushed out in favour of other more immediate or more pleasurable things.

Back in the day when Ben Franklin, Albert Einstein, Nikola Tesla, and Alexander Graham Bell were alive the mind numbing effects of TV were not yet felt.  These great thinkers could devote an extra lifetime to their pursuits. The average Canadian watches 30 hours of TV per week! The loss of productivity to TV is astounding.  Taking that TV time and instead using it to learn, experiment and pursue goals would change the entire country.  If people took back their evenings to tinker with robots, or learn an instrument we would be in a very different planet right now.

Reducing or eliminating TV is the low hanging fruit for finding more time in the day.

For Ben Franklin not watching TV didn’t provide any competitive advantage over other people of his time (no body else had TV either). Franklin found his extra time in the mornings. By waking up before the demands of everyone else could direct his day he was able to get an astounding amount of work done. The quiet solitude you can find in the early morning hours can be more focused and productive than the rest of your day.  It is the perfect time to exercise, plan the day, or study something new.

Converting to a morning person takes dedication and planning. But it will give you a couple more hours in your day to devote to your pursuits. (How to do this is worthy of another post)

People today, have the additional benefit of the tools of automation and convenience. Microwave ovens, coffeemakers and dishwashers can each contribute small amounts of time back to our day if used. By brewing your own coffee in the morning you save both time and money over waiting in line at starbucks.  Technology is here to serve us and make our lives more convenient so that we may devote less time to chores, and more to what we want.

Technology and automation is the 3rd leg in our pursuit of finding more time.

Finally, with so many things demanding our time, finding focus and eliminating distraction will make the time we do get more productive. As a software programmer I am acutely aware of the pitfalls of multi-tasking. The human brain just isn’t very good at actively working on multiple things at once.  It takes time to really focus our attention on a task and get into a mental state where we can accomplish significantly more. Whether through physical isolation or by using tools to reduce chatter or developing a pattern of work that provides time to focus you can get more done with the time you have.

Of course you need the motivation and ambition to direct the time you do have to productive means.

Minimum Viable Sale (MVS)

One of the big things about running a business is managing risk.  As an entrepreneur I know that 25% of businesses fail within the first year, 60% have failed by year 4 and 71% have failed or closed by year 10. Given that most businesses are started with the best of intentions and usually with all the time and equity the business owners can provide these failure rates are indicative of the tremendous amount of risk.

One of the most effective ways to combat the risk and reduce the chance of your own business failing is to seek validation of your business idea early.  Very early.

Lets say you have a great innovative idea for a business. To start with you’d probably ask around to your friends to see if they think it’s a good idea or not. Chances are your friends, not wanting to hurt your feelings, will agree.  ”That’s an amazing idea” they’ll say.  With the positive feedback, you’ll probably feel pretty confident about starting to build your business right away.

Unfortunately that is a false sense of validation.  Your friends are probably not your target market, they are motivated to maintain friendship rather than stomp on your dreams, and they didn’t have to put money where their mouth was.

To really get a sense of whether or not your business has legs start with getting some commitments on sales from real customers, if possible negotiate full or partial upfront payment. This happens before you’ve built anything, before a line of code has been written, before prototypes have been developed. Validate that the idea has merit from actual customers and confirm that they’re willing to put real money on the table for your solution.

Only after having made your sales and having financed the bootstrapping of your business do you actually go ahead and create what you’ve promised. With customers in place you have eliminated one of the biggest and most stressful risks in business  - the struggle to find new customers.  The remaining risk is to actually deliver what you promised below cost.

Making that initial sale is almost never easy, and getting the marketing message correct from the start is nearly impossible.  Investing the minimum possible money and time into an idea so that you can market test it can be critical.

So here’s a new acronym for you: MVS (Minimum Viable Sale). MVS refers to the absolute minimum amount of effort and money required to craft a compelling enough marketing message to land your first sale.

The MVS probably includes a presentation (Keynote/PowerPoint), perhaps a website, it might require a business plan, some mockups or even a faked version of your product. For example: a mobile app could be convincingly created in something like Fluid UI without writing a line of code that could be used as a demo in a sales meeting.

Even for a free service, the MVS is worth creating.  In some cases the MVS for this could be simply posting on reddit if people would be interested in it, or linking to an opt-in form on a website to build an initial customer list.

In other cases the Minimum Viable Sale might be a production run of 100,000 widgets in which case something like a kickstarter campaign might be a good option to reach as many people as possible.

The concept for creating that MVS is to do the absolute minimum amount of work before getting paid to actually work  on your idea. By making that first sale you’ve validated your marketing message, you’ve identified your customer base, and confirmed that your idea meets a need that someone is willing to pay for.

I’ve worked in places where the business had a good idea, identified an underserved market and put heads down for 4-5 months working on building a product only to find out after the fact that the potential customers were happy with their existing system, or the cost to change their current system was more work than it was worth.  Month’s of wasted effort and tens of thousands of dollars in development costs down the drain. Alternatively they could have started by trying to sell the solution they had in mind with the intent of getting enough cash commitments to pay for the 4-5 months work upfront.  The added benefit of getting customers before development starts is that they can help refine the features required for it to meet the needs of the market. Win-Win.

Starting a business with an MVS before you develop your MVP (Minimum Viable Product) is a simple way to get off to a lower risk start and help ensure that there is a market for your MVP when it’s finished.

What Do You Know

iphone app

What Do You Know?

This is the product of my first experience with outsourced development. What Do You Know is a simple iOS game where the player guesses what word matches the pictures shown. We picked a simple game engine to start with our initial foray into outsourcing to keep costs down and to help us quickly get through an entire project and learn our lessons from it.

I’m very excited to see how this game does on the market. It is comparable or better than most similar games in the category which I hope gives it a good chance of becoming a hit.

Our biggest lessons on this first project have been:

  1. Maintain control over the source code yourself – get a code repository on bitbucket or github where your team can regularly push their code as it progresses.
  2. If you are hiring a outsourcing company request senior/experienced developers be put on the project.  Senior developers will produce a higher quality product, and give more realistic timelines.
  3. You’re the boss, coach the team to produce the best product they can by providing the best leadership you can to them.
  4. Have the final project reviewed in detail. Check the source code. Growing a good business on apps requires that you can leverage past development into the future through code reuse.

This game certainly won’t be the last time we hire programmers to develop games for us. Keep an eye out in the App Store for What Do You Know.  It should hit iTunes in the next week or two.

Competition is Fierce

EMBA_start_up_competition_996x446Our market economy is built around the premise that competition makes everything more efficient and better over time. For most products and services a careful analysis of the competitors is very important to your success.

This market analysis applies to all aspects that you can glean from your competitors. The product features and design, quality of service are obvious things for the engineer in you to look at for hints about what you can do better with your product. Business models, marketing and sales strategies are just as important to your success so look to those too for ideas that can be improved on.

Importantly, if you are planning a business idea and can’t be better than the competition in enough ways to matter DON’T WASTE YOUR TIME.

It’s an approach right out of Apple’s playbook.  Only enter a market where you know you can dominate with a superior product.

As an App developer it has become interesting to see the marketplace evolve into a much more competitive space over the course of a few years. With the vast amount of successful apps being free it’s impossible to compete on price, the race to the bottom has already finished. To develop a successful app now requires a great design, superb artwork, discoverability and viral tools for additional distribution, good marketing, and positive reviews.  There are only 100 apps in the top 100 highest grossing list, and those apps are (for the most part) doing all those things.

To have a great app idea and expect it to be a hit without addressing all these things that your competitors are doing is naive.

High Performance Static Websites on Amazon S3

I’ve been seeing more frameworks lately for generating static websites. The reason for these becoming more popular recently is the result of several developments.

  1. Cheap shared hosting is notoriously unreliable, slow servers overloaded with too many websites and hacked servers being able to infect and hack many other sites at once.
  2. The development of 3rd party services such as Disqus to power the dynamic parts of a website with embedded javascript. (removing the requirement of server side logic)
  3. The scalability, performance, uptime and low cost provided by Amazon S3 and their CloudFront CDN service.

The difference in cost between a scalable dynamic site and a scalable static website can be staggering.  So if there is a way you can convert a website over to be static (perhaps with a daily or hourly upload of new content) it may be worth your while.

A website with 1 million page views per month on Amazon S3 with CloudFront would cost roughly $6/month depending on the size of the assets.  Building up a simple server configuration with 1 database server and a webserver with small EC2 instances would bring the costs up around $150/month.

One of the nice things about developing a static website is that you can script things however you want to.  Concatenate strings in bash or PowerShell or go all the way to having a complex database backed CMS system and template engine.  It also means massively less complex server infrastructure.   No more nginx reverse-proxied gunicorn server paired with a database server and a host to tools to monitor uptime and send alerts should things break.

It’s for these reasons that I am working on my next project to have a static website backend instead of a dynamic django app.

Using a template engine like Jinja2 it is trivial to convert content over to static files ready to be uploaded.

Some tricks may be needed to handle things in a more complex static site.  Perhaps a small light server to refresh the static content every hour, or to run scheduled tasks, or to do other various asynchronous jobs.  Still the costs can be brought way down if your servers don’t have to handle the web requests.



Cockiness of Programmers

There’s no doubt that programmers are lazy people.  Anything that can be automated is, copy/paste code – you got it!

There is another trait of programmers that they assume because they can program in one language well, and have touched a few other languages over the years they can quickly learn a new language on the job.

Programmers are arrogant about their own skills.

The article What If Cars Were Rented Like We Hire Programmers? exemplifies the problem though their analogy is not accurate.  A programmers job is more like the mechanic or factory worker building the car.  If you had built or fixed only Subaru Imprezas for 10 years then you are not amazingly qualified to fix Fords.  If Ford is looking to hire, they know that there are 1000′s of mechanics more experienced on their cars in the pool.

I say this because after several years of writing Javascript, learning on the job, I finally decided to pick up a book.  The first thing I learned was just how much I didn’t know.

More programmers need to read books to master the skills they need on the job instead of relying on Stack Overflow and Google to solve all their problems when they arrise.

The thing to watch out for is the situation where you read someone else’s code and say to yourself “I have no idea how this works, or what it does”.  As a programmer that should be a red flag – you don’t completely grasp the language syntax.

If you don’t have a complete handle on the syntax of a language chances are you also don’t know how to write idiomatic code.  Without those two things mastered the code you do write will be poorly organized and buggy. The next programmer to come along to work on your code will hate you.  You will be that guy who everyone bitches about for writing bad code.

Bite the bullet, read a book from time to time.  Always be Learning.


ABT: Always Be Testing

Sales teams often have the letters ABC plastered somewhere next to their weekly leader boards and top salesman photo. It stands for Always Be Closing and it’s a motto that keeps sales people laser focused on their goals. Marketing teams should have a similar motto: ABT – Always be testing.

Lately I’ve had the opportunity to do a lot more testing on the performance of webpages and apps. One thing always holds true. Nobody knows what’s best – which is why it’s always important to test things.

This point cannot be more clear. If your head of marketing, lead designer, or CEO could peer into the minds of potential customers and knew the most effective way to sell to them, then they would probably be living on a beach somewhere. The fact that they keep coming into work by car instead of helicopter is enough evidence to show that they don’t have all the answers.

One of the things that gets under my skin about marketing is the focus on branding and brand related marketing. Reading a book about branding is like taking a walk back in time to the 1980s. It’s difficult to find good recent examples of successful brand marketing because more and more companies are discovering that it’s simply not effective. With more technology to play with it has become easier to track the performance of marketing efforts. TV ads can be tested in different regions. Web banners can be split tested daily to find the most effective ad copy.

You know what tends to happen when tested and accountable marketing comes into play? The clever catch phrases disappear, gimmicky websites get toned down and focused, and communication becomes more direct.

I recently heard a pitch from a brand marketing consultant who tried hard to impress upon us the importance of a good tagline as the basis for all marketing. It was not very good advise. One of the examples he used was Avis and their famous “We try harder” tagline. It was claimed to be a tagline that helped grow the business a lot. Question is if taglines are that important why aren’t they presented up front in current marketing.

“We Try Harder” shows up as a footnote on Avis’ current website – barely noticeable. It’s not important enough or effective enough to use on their adwords copy. If taglines were good marketing they would be more prominent in current advertising.

I have tested a lot of marketing ideas over the years, and there are constantly surprises and unexpected winners. I would however never claim to know the best approach – The best approach changes year to year. The experience you get from testing gives you a pretty good place to start from for future tests.

When your business income is at stake Always Be Testing. Never trust the status quo, and don’t trust your copywriter to give you optimal sales copy (why buy one sales page when you can buy two for twice the price). Test every assumption. ABT.

Doing Hard Work

There are several hard problems in computer science that seem to be getting solved in a real way. Google’s Driverless cars are perhaps the most recent example of computers taking on a challenge assumed by many to be impossible just a few years ago. And they’re doing a good job. In 2015 they will have a significant number of cars on the road. The economics and convenience of self-driving cars is so compelling that is shouldn’t take long for the technology to make it into consumer’s hands. By 2040 few people will have a drivers license.

Computers are increasingly taking on even more of the hard work done by humans. This effect has been blamed for the slower than expected recovery in jobs from the recession — companies are making money, they are buying equipment, but they are not hiring at the same rates seen in historical recoveries.

In the tech industry we have the job of developing these difficult solutions. Better robots, faster searching, more accurate voice recognition, more convenient payment methods etc. For the foreseeable future there is plenty of hard work to be done.

Something is happening right now in the PC industry which will be echoed in a few years in all of these technology areas. Giant powerful home PCs are becoming irrelevant. The fast computer you bought 4 years ago is still perfectly adequate today for getting what you need done. There’s little need then for more ram, more cores, or more drive space. The technology has become “good enough” and as a result innovation has stalled out as customers have dried up.

Expand that “good enough” concept to other technologies… phones, robots, cars etc. and things may become grim as demand for replacing usable products for something better diminishes.

It is the reason why I think it is more important now than ever to work even harder to get yourself ahead. Produce something new, create an impact, and try to create your legacy for this world. With each passing day technology gets better at what you do to make a living. I’m working hard to make sure I’m financially and personally secure by the time the computers catch up.

It’s going to be hard.

Using tmux and Vim

Working on the same projects from multiple computers can be difficult.  There are lots of solutions for this problem such as using Dropbox to sync files between computers. but that leaves your workspace to start from scratch ie when working from the office last I had these 10 files open, and a couple of things running, then when I get home if the files sync over I have to reopen those files locally and configure that computer for anything else that needs to run to continue debugging.

Enter Tmux and Vim.

Lately I’ve been working 3 days at home, 2 days at the office each week.  As a result I have re-evaluated my workflow to find something a bit more efficient.  Vim in the terminal is brilliant once you’ve got it set up and have mastered it.  It has been my main editor for about 3 years now.  There are a ton of great resources out there to learn Vim for those of you still trying to find the way.

Tmux is new to me though.  It’s basically a better version of screen.  If your not familar it basically provides a way to do 2 main things.   First it allows you to create a persistent session that you can connect to and leave running.  Secondly in this session you can open up and layout many different consoles into tabs or windows. It’s sort of a command line version of VNC.

I have tmux installed on my Linux servers on AWS so that I can work efficiently on those machines, and I have it installed on my workstation at the office.  I can log into the environment with SSH and continue right where I left off even if I’m switching between my laptop and a friends computer.

With Vim I have the ability to keep my settings and plugins saved and configured the way I like them with a configurations version controlled on github.  Getting a new Linux or Mac machine up and running takes very little time to do with this setup.

I’ll give my best tips and tricks for Vim in another post.

Start with Twitter Bootstrap

I was playing around with Twitter Bootstrap yesterday and managed to very easily migrate my App Control website over to use it as a way to clean up the UI and get it looking a little more consistent.

It provides some nice looking default looks and easy to use css classes to apply. It’s hard to imaging doing another site without using something like twitter bootstrap as a starting point.

Something I’ve found recently is just how difficult creating a great UI can be. The finishing touches on making things line up just right or animate fade ins and dropdowns is surprisingly difficult when taking into account all the various browsers out there.

Twitter bootstrap gives you something professional looking by default and is a fantastic starting point for future customization. If you have a web project I would encourage you to look at it.