Author Archives: Matt Warren

Lately I’ve been thinking back on the past business opportunities that have been explored and which ones have been more effective than others.  This story about the confessions of a Google spammer reminded me of a project I attempted to build back in 2012 to build and control and automate lots of blogs. My project was much more whitehat than spamming google but it landed at the same time that Google cracked down on similar blog networks with their penguin update. It made me think about what ideas have worked best and worst of the things I’ve tried over the years.

By far, the easiest and most straight forward business ventures I’ve done have been consulting and freelance work.  People understand how this works so it’s easy to sell. “oh you need a website built? I know how to do that – will you pay me to do it for you?” That’s a great base for business and been the largest single source of income for Halotis. Companies are comfortable paying for your time and expertise to create new things and they’ll pay as long as you can convince them of your time availablility and expertise.

iPhone Apps were the next biggest success.  Getting in early and leveraging the distribution of the iTunes App Store was a big win.  Lack of time to maintain and improve the apps and the influx of AAA quality competition eventually killed things for me.  Now it’s too hard for a single developer to do without a lot of luck.

Creating real products and services were another profitable option for me. I used Product Launch Formula to help strategize a couple of sales which were a big success.  Big launches attracted a bunch of sales that ended up becoming a real product business.

Ad supported and affiliate sales based websites have been break even for me.  They cover the hosting costs – which is to say almost no money.

Those have been my biggest lessons.  Hopefully that is helpful to readers who are thinking about their own businesses.


The more that I learn about Deep Learning and other Machine Learning concepts the more intrigued by the idea that we could apply some of things we learn about how these ML models behave back onto human psychology.  This is not something I have heard discussed yet. They were, after all, roughly modelled on how our own neurons work and could be considered a crude model of how we work.

What are some of the behaviours and lessons we’ve learned from training AIs that could be applicable to how we learn for example.  AIs are obviously dramatic simplifications of our own minds but they learn in similar ways.

Machine learning algorithms can be divided into supervised and unsupervised learning models.  They are not equivalent and the things you can do with one are not possible with the other approach. Would it be helpful to identify topics in school that can be associated with each approach so that we can optimise our teaching approaches?

A concrete example of this is how we learn a new language.  A common suggestion for language learning is to immerse yourself in it.  To that end people will listen to radio and music in their target language. Is that an effective way to improve your understanding?  This would be considered mostly unsupervised since we have no answers for what a particular sound we hear might mean (unless we can guess from a context of other words we already know).  If we fed 10,000 hours of voice recordings into an unsupervised machine learning algorithm what kind of things would we be able to learn?  It might be able to pick up some common words or phrases that are used, it might be able to find words that are often used close together.  It would get a feel for the ‘sound’ of a language.  But that is likely as deep of an understanding as it could make.

Given this insight we could hypothesis that immersing yourself with just recorded audio is not particular effective at learning what words mean.

If we wanted to teach a computer to hear a word and turn it into text we need to have the sounds and the matching text.  This is a supervised approach and can be quite effective. However, we know that this is much more effective if we have lots and lots of training data.  For a particular word it helps to have the word spoken by many different people, spoken quickly and slowly, varying pitches and accents.  The more examples we have to train on the better the accuracy is going to be.  You’ve probably experienced listening to a song and hearing a word you can’t quite make out. You listen over and over but still can’t get it. Then someone else tells you what the lyric is or you hear a different recording of the song and suddenly it becomes crystal clear.  Now you can hear it.

Given this, perhaps we could ensure that training programs on a computer don’t just replay the same recorded words over and over again but instead give lots of variations.  It would be interesting experiment to have a 1 page story in your target language recorded by 10-20 different people. Would listening and reading along to all the recordings help with your listening comprehension?  How much better would you learn listening to 1 recording 20 times vs 20 different recordings?

Several studies have looked at the efficacy of same-language closed captioning to reading and listening comprehension and prove that it can help.  Similar application of supervised learning applied to people.

Another area that generates much concern in machine learning is how to identify and prevent over-training.  Over training happens when the algorithm essentially memorises the answers and has difficulty applying to new input it hasn’t seen yet.  There are techniques for testing that are used to help diagnose over training. One such approach is to separate the training data from the testing data.  Trying to determine if students have memorised the answers or really understand a concept is critical to their ability to move forward and build on those lessons. Could we apply our machine approaches to humans to help identify memorisation vs understanding?

I’m sure there are more fascinating ways we could take what we have learned from teaching machines and apply it to how we teach people.

Time is our one major limited resource and so it’s important how we decide to use it.  One of the biggest questions we ask ourselves as developers is often what kind of cool stuff could we do on evenings and weekends.

Here are my considerations for any side projects that I feel are worth saying ‘yes’ to.

  • It should align with your broader goals
  • It should ideally provide an incremental step towards those goals
  • It should be fun and interesting
  • It should have a number of quick wins
  • It should be something that you can’t or won’t get experience with during work hours

One thing to consider is conflicts with your job.  It would suck to be working on a passion project at night and find the need to hide it from co-workers and your boss or risk some sort of discipline. Co-workers can be great sounding boards and strong supporters of your success with these personal projects and it’s awesome to be able to take advantage of that.

The key to being one of those people who seems to get a lot of stuff done is to be continually walking in the same direction rather than running scattered from place to place.  It’s not as easy as it sounds.  There’s always a new hot idea to pursue or a reason to give up on the project you haven’t yet finished.  For that reason it is good to pick a project that hits as many checkboxes as possible for you and that you believe you can see through to the end.

One of the most understandable agreements is that we trade our time for money.  This is the standard that most employees agree to when they take a job.  They are selling their expertise and trading their limited resource of time to the company for a salary.

There are ways to get your time back by de-coupling income from time.  What kind of things allow you to get paid without requiring time?

Products are perhaps the most obvious option.  There are products that can be created or replicated (software) that do not require incremental time to deliver to a customer.  Automated services can help customers without a human’s time involved.  Brokering deals can generate large commissions with very little time effort.

Recently I did some financial analysis of business models to see how they might work out if I decided to pivot my business efforts.  I was trying to understand the costs and risks associated with a consulting business compared to a product business or a hybrid of the two.

The resulting insight made me rethink my priorities and preconceptions.

The value created by a moderately successful business can be astonishing. A business that generates a profit of $5k/month would make $60k/year and might be able to sell for $300-$600k to be acquired.  How long would it take for a lone developer to create such a business? Working 40-60 hours/week could you create something in 3 months? 6 months? 12 months? That has potential for this kind of revenue?  If you figure it would take a year to accomplish would you be willing to use $60K of your savings to bootstrap it?

With the right product idea once launched you’d be able to scale back development work and maintain the business and the steady trickle of income it generates.  Or sell the business for the capital gains.

The consulting business on the other hand may present less risk and a shorter path to profitability, but as a single developer consulting your ability to sell the company would require you to transition to a job to maintain the cash flows.  As a consultant you remain tied to the dollars for time equation and experience has showed me that doing both consulting and products is a difficult balance.

Finding time to live, to succeed, to love, to eat, to play, to work, to read, to escape is a perpetual set of trade offs we all have to make every day of our lives.  Finding a balance between all the things we need to do and the things we want to do is not simply about deciding yes or no to a list of things.

We all have to deal with human psycological falicies that affect our decision making.  Turning down a bowl of ice cream is much more difficult than a bowl of brocolli.  This subconsciously plays into all of our momentary decisions.

At every moment of the day we have the opportunity to make an infinite set of choices for how we spend the next moment. I could continue to write the next sentence in this blog post or stand up, go to the airport, buy a one-way ticket and move to Thailand.

The choices truly are endless and yet most of us find a pattern and stick to it.  Work 9-5, eat 3 meals a day, watch TV and go to bed.  How uninspiring.

Everything with time requires a trade-off.  Most of us trade the productive hours of the day for money instead of being with our families, we trade progress on our goals for watching re-runs on TV.

Breaking out of these habitual patterns is hard.  It requires mental effort to make decisions about how to direct your life.  The people who do it are often so far ahead with their accomplishments that they truly stand out.

Of course we will never get more time.  We must do what we can with the time that is given to us.

A goal without a process to back it up is just an idea.  It is the process which actually will help you reach that goal and it’s more important to focus on developing on an actionable process than to have the best idea or goal.

A business idea is worthless unless you do something with it.  The process you come up with could be to start a business around the idea, or to licence it to someone else.

If you had a goal of running a marathon but skipped the process of signing up for a race and training for it then it’s likely that your goal would sit on your bucket list until you abandon it.

Though it’s also the case that parts of the process also entail their own sub-goals. The process of training for a marathon involves sub-goals of going out several times a week for a run. It’s worth considering what the process would be to make sure the training happens which might require carving out some time from other priorities.  If these processes don’t happen it puts the goal at risk.

Consider your own goals, do you have processes to back them up?  Are those processes actionable given your time and money contstraints?

Personal passion is an undervalued driver of productivity. Experience has taught me that when you work on something that you are passionate about it becomes easier to focus, you care more about the quality and are less distracted.

If you can find your passion, it means you will never have a job – Richard Branson

When someone is extremely passionate it becomes possible to do 60-80-100 hours a week and not feel drained of energy. It is a powerful motivator and one which many businesses could stoke.  Although getting more overtime hours out of your employees isn’t a goal we should strive for.  Passion can overcome the draw of Facebook or milling about at the water cooler.  This can produce substantial gains.

The six-hour-work day increases productivity

Sweden is proof that there is still much productivity to be gained from the hours we do put into work.  Working fewer hours per day can help many people maintain the energy they need to stay focused and committed. The math of productivity is not simply about working harder and longer.  Finding other ways to drive energy such as cultivating passion in yourself and your employees can have a similar effect.  Getting stuck in a perpetual mid-afternoon slump is something that everyone should avoid.


Having the experience now of building dozens of different web sites over the years I have come to the conclusion that there are some major flaws in how web design is done and the underlying assumptions have proved inadequate to make web design better.

The first of these is the about CSS.  The goal of CSS was to create a language that designers could use to apply their vision to a website to separate the concerns of design from the logic and structure of a website.  It was meant to be simple enough that someone without a technical background in computer science would be able to write and maintain.  Of this goal, CSS has failed miserably.  Finding a web designer who has a design background but also knows CSS is nearly impossible.  Most designers skills are based in Photoshop and Illustrator, few have any interest in writing or maintaining CSS files.  The flip side of this is that most programmers are tasked with writing in a design language when they would be much more comfortable with JavaScript and few engineers have a good eye for design.

Another web design gotcha that is easily overlooked is that the web has different constraints from paper.  A static design spec put to a snapshot pdf or image of the final design is only 2 dimensional.  Web design reality is that there is at least 3 dimensions and sometimes 4 or more to implement.  This puts the onus of implementing missing design onto the developer.  How the page should behave at widths of 300px up to 2000px? What interactions should exist? What animations are there? Responsive design cannot be done with Photoshop and so these rendered design mockups represent perhaps only half of the design.

I would like to see one of two things happen:

  1. Make changes to the CSS tools so that it can be managed in much the same way that Photoshop does.  Fulfil the promise of putting design implementation into the hands of the designers by making the tools used to craft it similar to the tools they’re already familiar with.
  2. In cases where engineers have to do the design implementations provide a method that is more familiar to them.  It should allow for unit testing, it should be designed to reduce the likelyhood of regressions as the design changes. Debuggers and linters should identify unused code.

I think what we have with CSS is a bad compromise.  It is too technical, daunting and uninteresting for most designers to want to work with it, and it’s too unstructured, untestable and imprecise for engineers to have much love for it.  As a result CSS exists in a no mans land where few people have an aptitude.

The future looks interesting though.  Will there be a next generation language after SaSS that improves things for the lives of developers, and how will the React.js approach impact the future direction of web design.

Most programmers I know come at the discipline from an engineering background and this leads to all sorts of pre-conceptions about what we do and the guarantees we offer.

Clients often believe that paying for software development is like building a bridge.  You have some meetings to decide what kind of bridge you want to build, send it to get architected and the design approved by engineers and then hand the blueprints off to a construction company to build it.  Once built you expect the construction workers to go away and the new bridge will not need to be serviced for 50 years.  This is the mental model that many people have about how software development works too.

This is partially our fault and partially a quirk of history. Computers and programming languages came out of engineering and mathematics and the early developers brought with them their background of being engineers.  Now we are deeper than ever into this mode of thinking.  Software patents are treated like inventions.  Teams of programmers try to apply engineering styled development plans to writing software, sometimes with gant charts an other times with scrum.  None of these approaches have proved ideal and as a result expectations often do not match reality.

Instead I believe that software should be thought of as being closer to writing.  If you commissioned someone to write a book about the Golden Gate Bridge you might expect them to not be experts and require some time to gather research, distil that into notes and further organise their source material before they could really even suggest a structure for the book. If the book was going to be written by multiple authors then sections of the book would be assigned to each person in a way that required little sharing of the same content.  As each section of the book is drafted you might get an early read and have plenty of edit requests to make. Entire sections may need to be re-written if you don’t like the way something is presented.  At the end the full manuscript is again reviewed and edited. Reviewers and Editors expect to find typos and awkward sentences that should be fixed.

Publishers of the book also usually have a very different pay structure than software clients.  Publishers often provide the writer with an advance to cover expenses while the book is being written and then give a royalty on sales of the book.  This seems like a fair arrangement. Up front payment allows for full-time focus without having to take a part-time job or use credit to live and the promise of royalties provides extra incentive to write the best and most successful selling book you can muster.

Software development consultants rarely put any skin in the game. Time and materials based projects encourage a consultant to go over time for more money, and fixed budgets encourage them to cut corners to save time. The lure of ongoing maintenance contracts encourages developing something that requires updates and monitoring to keep running.  Notice that there is no direct incentive for the project to be a success, and the developer needs to cover their living expenses until a delivery date is hit. The developer who wrote the software rarely gets any public credit.

I think it would be refreshing if the publisher style model was applied to software developers. An upfront advance to cover expenses, and royalties from the profits of a successful product would help put the right economic incentives in place.  Books often have an about the author blurb tucked somewhere in the first few pages; websites and applications should do this as well since it’s another incentive to build something you are proud enough to put your name on.

The business model for book publishing seems like a good fit for software to me. What do you think?

Software startups often talk about iterative improvement.  It’s a development model where by you focus on an easy to reach but minimally sustainable business model and then iteratively improve things and add features over time.

The process of getting to that first product release is perhaps the hardest thing to do.  It requires having a vision, and following through on it day after day without much validation until it’s finished enough to show and talk about it with people.  To build a team you need to convince them of the validity of your vision and get their buy-in to help you build this product.

Even with great effort it can be tempting to bulldoze something 80% complete.  There comes a time in this long slog of work that we naturally second guess the idea.  “Is it worth pursuing”, “Someone else released something similar before us”, “I think I have a better idea”.  This is a pattern I have fallen into for many of the projects I have started.

Giving up on an idea before that first launch is like a construction company building a school, getting to the point of hanging the blackboards on the walls and then deciding “Nah! We should have built a stadium! Tear it down!”

Getting something finished enough to put it on the market is just the first half of the work of making a viable business of of it.  After crossing that hurdle of getting it out there enough to attract users and customers is when you have to tackle another slew of concerns: customer relationships, sales, marketing, accounting, ROI, growth hacking.  But if you don’t make it to that point of launching something, then the rest of it will never exist and all the energy and effort you expended will have been wasted.

Iterative progress is the idea that if every day you continue to put one foot in front of the other and keep going in the same direction eventually you will have accomplished a great journey.  Even if some days you don’t want to walk, it’s just something you need to keep doing anyway.

Writing a book requires sitting down and writing hundreds of words per day, day after day, for months.  It is exhausting. It is frustrating at times. But if you give up before publishing, it’ll all be for nothing, nobody will read it.

Most, if not all, the successful people I have met have this trait. A stubborn focus forward on their vision. They can push a single idea for decades without wavering.  By shear persistence they eventually get out in front of the pack.  It’s something I hope to cultivate in my self, and hope to see more people develop.  The world needs more leaders with the strength and will to see their visions become reality.