Tuesday, 4 February 2014

Image Compression for Web Developers

Introduction

As images continue to be the largest part of webpage content, it’s critically important for web developers to take aggressive control of their image sizes and quality in order to deliver a fastest loading, responsive site for their users. Hitting this sweet-spot is not free; you can automate a ‘good enough’ value most of the time, but for the best savings, you need to test quality levels using your human eye. This article will provide a bit of reason, history, and technique to understand and properly address image compression issues for your website.
I should take a vacation.

TL;DR : Image Compression Checklist

  1. Compress Images with the right format at the lowest acceptable quality level
    1. Hand-tune (where possible) your compression quality for all images
    2. Automate the rest to get the best performance
  2. Investigate using WebP for all your image needs
  3. Save your images with progressive options to improve user perception of your pages’ load times
  4. Investigate other interesting ways to get better compression, or transparency. Think outside the box!

Why Small is Big

Simplistically, larger pages inevitably take longer to load. There’s an unending body of research that shows that users of slow sites, spend less time on the site, click through less, click fewer ads, and spend less. Small sites, like AutoAnything, cut their load time in half, and saw revenue grow by 13 percent. And large sites, like Amazon have shown that for every 100 milliseconds of slowdown, they experienced a 1 percent drop in revenue. And let’s not forget that the 2012 presidential campaign based its entire fundraising success on making their website load instantly.
What’s worse is that users have to pay to download your website.
While bigger pages hurt performance for desktop users, too, the biggest victims of page bloat are mobile users. Not only does a 1MB page take forever to load, it can also deliver a nasty shock when you get your phone bill.
Even most ‘unlimited’ data plans for mobile, aren’t truly ‘unlimited free.’ Most of them will charge a flat rate for access up to 2GB or so, and passing that amount can cost more money. Not to mention that there’s many areas of the world without these types of ‘all you can eat’ billing plans, where cost-to-download information is a serious concern for users, as a research paper by AT-T highlighted:
mobile data traffic cost problems are severely hindering the use of mobile services on handheld devices today

It was interesting that users try to understand the billing rules even when the carrier does not provide this information. Based on connection indicators, information visible on the phone bill, and previous experience on data traffic billing, people create a perceived billing model that affects their mobile browsing usage patterns.
The folks over at mobiforge provided even more context, putting the entire argument in terms of costs:
AT-T charge as much as $19.97/MB for roaming data in certain countries. Taking some of the examples from Guy's spreadsheet, and using the AT-T roaming tariff, is a peak at 1pictureaday.com really worth $178? Do you really need to visit thenextweb.com for $44 or vogue.co.uk for $65? At $17 microsoft.com is a relative bargain.

For roaming users these page weights are prohibitive for all but the most essential tasks.
Big Images are a big problem.
We can see the the largest increase in sizes come from images which can spell bad news for mobile, where a picture literally costs a thousand words.
Inappropriate image formatting is a common performance culprit. Images being too large, not compressed enough, or having a quality setting way too high can all lead to these images being bloated and oversized which has a direct impact on the loading of your site. Picking the right compression method to yield the best results is easily achieved by getting to know what’s going on under the hood.

Types of compression algorithms

There are generally two stages in an image compressor, a lossy phase, and lossless phase. Lossy compression algorithms will modify the source stream such that you lose information that cannot be restored upon decompression.Most lossy algorithms in image compression take advantage of how the human visual system works, often removing information that we really can’t see, and in the process, saving bytes. For example, limiting the colors used in an image; fewer colors means there’s less data to run around. Generally, when you save an image in a format supporting Lossy compression, you’re asked what “quality level” you’d like for the image, effectively, what you’re choosing is a scalar value which trades file-size for image-quality. Savvy web developers realize that there is a sweet-spot for images, such that the quality level is high enough, and the file size is low as possible.
Before
After
0.123, 1.2345, 21.2165, 21.999, 12.123
0,0,20,20,10
Figure 1 - An example of lossy compression. Values are quantized to the smallest multiple of 10 they occupy. This transform cannot be reversed.
After a lossy compressor, a lossless variant is then applied, that is, the data, once uncompressed, is restored to it’s exact state, before compression. These are typical compression algorithms that allow the source stream to be recovered directly without any loss of precision or information. In Images, popular Lossless codecs include LZ77RLE, and Arithmetic encoding. Lossless compression algorithms are the backbone of compression, often squeezing out the last percentages of data from your content, constantly struggling with information theory to reduce your data sizes.
Before
After
aaaaabbbbbcccddddeeeeffffaaaaabb
a5b4c2d4e4f4a5bb0
Figure 2 - An example of lossless compression. Runs of values are encoded as the symbol followed by the length of the run. We can properly restore the origional stream. Note that if the length of the run is <= 2 characters, it makes sense to just leave the symbols alone. You see this at the end of the stream with ‘bb’.

Image Formats

An image format typically chains together various lossy + lossless algorithms to grant compression savings. There’s multiple formats adopted by web browsers, each with different features and performance tradeoffs. To be clear, there’s not a “one size fits all” format for the web (currently). Different types of images should be encoded into different formats depending on what type of image it is, what the browser supports, and what needs the page has.
There’s typically three decisions that go into the choice of an image format for a web developer.
  • Does it need transparency?
  • Does it need animation?
  • Does it need high quality data?
'Lena' is a common image used in the evaluation and comparision of image compression algorithms.
PNG is a simple format that supports transparency and lossless compression. It allows you to define an alpha channel for your image, to mask out transparent areas, as well as an option to enable a lossless Deflate compressor on the data. (Deflate is a combination of two lossless compressors, LZ77, and Huffman). Because compression is lossless, image quality remains identical to the source image, this causes issues however, in that the file sizes tend to be quite bloated, and not as small as they could be.
GIF is another format which supports transparency, alongside animation (which is the direct reason for the whole ‘cats on the internet’ thing..). The GIF format contains two stages of compression, a lossy palletization step (restricting the entire image to only 256 colors) followed by a lossless LZW compressor. The process of quantizing the colors of the image down to only 256 provides an aggressive quality reduction at the benefit of better compression sizes, which tends to produce better compression from the LZW end of things.
Colt McAnlis says:
Most modern, cutting edge compressors make the largest wins by chaining together multiple coding steps. A single stage can modify the data stream such that subsequent stages can compress it better than the raw data stream alone. Popular encoders, like 7zip chain together LZ dictionary encoding, that produces a reduced set of symbols that can be consumed more efficiently by a Markov Chain algorithm.

Or, for example, you can apply a lossless compression algorithm on top of an existing, GPU formatted lossy format to encode the data even further. The biggest wins come from combining algorithms in the right ways.
If you don’t need transparency, or animation, then JPG is the best format for you. It was generally designed to handle the compression of high-quality photo data, but provides a configurable set of Lossy compression options, allowing you to trade off compression quality vs. image size as your application needs it.
If you’re looking for more of a ‘one stop shop’ for your image format, then WebPshould be on your radar. The format boasts not only superior compression quality/size, but also transparency and animations as well. It uses both a lossy and lossless compressor combination, and much like JPG, will allow you to define your quality level vs. file size. Of course, this new image format hasn't been adopted across all browsers just yet, so web developers who’ve adopted it are currently in the early phases of working through usability issues. Although a 30% savings over JPG, alongside increased server-side adoption prove that WebP is a dominant format for any sites dealing with image bloat problems.
CompressionLosslessLossyTransparencyAnimation
PNGGoodYesNoFullNo
GIFOKYesYesBinaryYes
JPGGoodYesYesNoNo
WebPGreatYesYesFullYes
Figure 3 - Feature set for specific browser supported formats

Trading Quality for Size

For those image types which have a quality setting that you can adjust, it’s worth noting that the biggest wins you can get is by hand-optimizing the quality setting to get the smallest file. Google Webmaster Help has a great video that walks you through some ways to test quality against your image, and how to test perception properly.
And as imgmin project points out, there’s generally a small change in user perceived quality for JPG compression between levels 75 and 100:
For an average JPEG there is a very minor, mostly insignificant change in *apparent* quality from 100-75, but a significant filesize difference for each step down. This means that many images look good to the casual viewer at quality 75, but are half as large than they would be at quality 95. As quality drops below 75 there are larger apparent visual changes and reduced savings in filesize.
And further goes to show that most large websites tend to oscillate their images around this quality=75 mark for almost all of their JPG images:
SiteJPG Quality
Google Images Thumbnails74-76
Facebook full-size images85
Yahoo frontpage JPEGs69-91
Youtube frontpage JPEGs70-82
Wikipedia images80
Windows live background82
Twitter user JPEG images30-100
Figure 4 - Average JPG quality level used for top websites
Customizing the settings for each image on your page to balance the tradeoff between quality and size will yield the best savings at the best quality levels. These larger sites tend to have a plethora of images, and generally have no way of hand-optimizing each one, so custom, per-image quality-level adjustment is almost impossible. Some developers have taken a more automated approach to this type of encoding; often taking the output from artists, and running their own heuristics and encodings processes on the images during a build. This type of setup fits a nice middle ground between customization and automation that will help the majority of web developers out there. You can also adopt apps like MiniJPG which will auto-tune your JPG compression level to give the best possible quality.
A quite drastic approach that developers are using to attack image size footprint is to reduce any simplistic icons and images to SVG files, and allow them to be rasterized by the client before being displayed. This type of process trades file-size for client-speed, saving bits on the wire, but incurring more client-side overhead to reconstruct the image when it’s being rendered. As such SVG image format is quite different than the other types of files, in that it is a vector format; meaning that the final image is procedurally generated using shape information defined in the file to a specific resolution of output image. When an SVG image is loaded, it’s converted to a raster format (a 2D array of pixels, like a bitmap) before being displayed.
Vector image comparision.
Figure 5 - An example raster image (on the left) compared to a vector image (on the right) Notice that the vector image is much simpler, and contains less per-pixel detail. This is because the format type does not yield itself to produce high quality data.
Think of SVG as a file format that allows you to store an image ‘description’ at a very low memory footprint, and generate a high-quality, resolution independent image on the client, regardless of the size of the source data. One of the limitations of the SVG format is that it can only represent a certain type of image quality, that is to say that vector images tend to be simplistic, only using a set of primitive types to define how to generate colors on the screen . A field of grass in a prairie for instance, would require too many complex shapes to yield compression savings.Raster images are best used for photos, and other information-dense images, where Vector images are great for things like logos or simple image patterns.

Images quality, sizes and multiple resolution screens.

One of the large issues that developers are facing is the size of monitor pixels against the size of images created. That is, if an author creates image content for a desktop website, there’s a good chance that the image dimensions and quality levels have been tailored to viewing on large, desktop resolution monitors. Mobile devices throw a problem in, however, as their screen sizes are much smaller, and their connections are more expensive. As such, users can be recieving a larger image than they can display, or need.
There’s a few ways to address this issue.

One solution involves precomputing images, offline, for each resolution you need. Most static websites can generate this easily as an offline build step, perhaps resizing the images with toolchains like Grunt. This technique benefits from the fact that images are properly cached on their native device resolutions, and you’re not losing loading time, or transfer cost to get the information to the client. On the negative side, however, is the madness involved with managing this exponential increase in your data set, and the additional logic to send the information to the intended users.
Addy Osmani says:
If you're interested in using Grunt to generate this content, I would recommend trying our grunt-responsive-images for automating the generation of your precomputed images with ImageMagick as part of build.

For those that are tied to Node/Express, express-processimage can be used as an alternative or you could put together a script that calls ImageMagick to generate the images for you.

One of the yet-to-be-solved issues with this approach however, is finding a good solution to manage the increase in your data set. With respect to logic, srcset will hopefully solve this (WebKit as you know have it, Blink intends to implement, FF will once its in iOS).

In the meantime, one could use a polyfill for srcset as a stop-gap.

Another approach, intended for the boom of high-DPI mobile devices, involves playing games with image quality, image dimensions, and client-side cost for image resizing. Effectively, you can store your image at 2x resolution (upscale process), however when you export it to a lossy format, choose a very low quality (resulting in high compression) option. The intention here is to choose a quality level such that the compressed larger image, is smaller than the compressed smaller image.
On the client, you can specify the intended dimensions of the image (which should be less than the current size of the image, since it’s been upscaled). The web-browser will downscale the image to the intended resolution, a process which can blur noise artifacts introduced from the low quality compression value; in some cases, all together.. The end result is a smaller file, that scales to multiple screen resolutions easily, and does not introduce significant quality degradation.

Image sizes, User perception and load times

Looking at the bottom line, the only thing that matters is that a site appears to load fast to users. Appearing faster is being faster, and perceived performance is more important that actual speed.
There’s a two dominant ways to display images over the web.
  1. Wait for the whole image to be downloaded, and display it once its’ done
  2. Display part of the image that you have downloaded so far.
No browser uses the first option, simply because it makes the page appears as slow as possible.
The second option is what most of the web is built on now. I’m sure we’re all quite familiar with the style of ‘revealing’ the image from the top-down over time. This is because the images are typically stored in raster order, or rather the first bytes of the image that the browser receives starts at the top-left of the image and moves horizontally across the row. It’s worth noting that if we store our image in a different method, we could change what bits come down the wire first, which changes how the image is seen.
This “progressive” method of encoding can have a beneficial impact to user perception that a page is loading ‘fast’ (note, this is debated, depending on user). This works by encoding a few extra versions of the image, at smaller resolutions which can be transferred faster to the user. This allows the user to see a display of the image that progressively gets sharper as the image downloads more.
Coddinghorror.com has a great example that shows off the visual difference between these two technologies. You can see that the standard method creates a top-down reveal of the image, while the progressive one ‘refines’ the visual as more data is received.
Linear
Progressive
Figure 6 - An example of linear vs. progressive loading for images.
If unicorns aren’t your thing, you can also check out a more in-depth example atPatrick Meenan’s blog, or even try this out on your own images using Patrick’s interactive tool.
Using this property in your image is extremely easy to do : Simply save your GIF or PNG images with the "interlaced" option, or your JPEG images with the "progressive" option. and start making your users love the load times of your website. Although it’s worth noting that progressive images are not supported in all browsers just yet, and loading a progressive image on those platforms can actually cause worse performance.

Images outside the box

The internet is full of brilliant web developers, and no article on image compression would be complete without pointing out some of the great hacks, workarounds, and generally impressive things that these developers have created to allow them to create smaller, higher quality, and impressive images.

Splitting your transparent layer for improved compression.

HTML5 game developers typically send around more image data than your standard website, most of it being transparent frames for a flipbook animation. Sadly that forces these files to use the PNG option in order to get transparency. However a few developers have devised a few work-arounds for images to get better compression and transparency. For example, you can split your color data, and transparency data into two separate image files (two JPGs, for example), and restoring them on the client using a CANVAS element. Although this does increase the number of requests that occur on the network, the savings in image size can be significant for developers who have tons of transparent images on their site (like).
Jake Achibald says:
It’s worth noting that it may be quicker to just use -webkit-mask where you have support for it, rather than doing all this canvas crazyness. Luckily for you, I’ve provided a library to help with this type of thing.

Improve PNG compression through better processing.

PNG’s Deflate option is a lossless encoder, but that shouldn’t stop you from embracing a lossy preprocessor if you want one. Image processing tools likeImageAlpha and ImageOptim, can compress your PNG image in a lossy method as a pre-process before passing it off to the final PNG format. This creates a two-step process where your lossy, and lossless compression are done by two separate applications. The results are impressive, the reduced color space allows the lossless compressor to find, and make, more frequent matches in the file, yielding to better compression.

Once you've exported your PNG, it's time to re-pack your PNG data using advanced compressors to generate a smaller PNG file. Tools like advPNG will take your already exported PNG, and run it through a better Deflate compressor to get a smaller file. Or you could combine PNGOUT with tools like OptiPNG or Zopfli to get the same effect. Of course, each of these systems creates slightly different results, given the input systems, so it may be wise to adopt a system which will compress against multiple compressors and pick the smallest file; If you're feeling lazy, ScriptPNG will do the heavy lifting for you.

Not all animations are created equal.

The SublimeText team launched a website in which they wanted to have a rich animation showing off features of the editor. Rather than using a video, or a standard GIF, they generated a custom animation and packing system to provide great image animation at a much, much smaller size. The technique allows them to display a high-quality animation across multiple platforms without the need for advanced video, or a flash plugin.

More than one way to responsive image.

Since user perception is the most important thing in a website, it’s worth noting that there’s other ways to create ‘perceived’ faster loading websites. Recently, the BBCchanged how their site handles responsive images. Their technique allows a smaller image to be downloaded to the client first (so there’s some visibility) and allow the higher-resolution image to be lazy-loaded as needed. You can find a more detailed description of their technique, alongside an open-source version to play with on your own site.

Conclusion

Images are a tricky content type that can increase the quality and user perception of your site, but also can undermine your efforts for fast loading, responsive quality. Before you ship your site live, make sure you follow the Image Compression Checklist:
  1. Compress Images with the right format at the lowest acceptable quality level
    1. Hand-tune (where possible) your compression quality for all images
    2. Automate the rest to get the best performance
  2. Investigate using WebP for all your image needs
  3. Save your images with progressive options to improve user perception of your pages’ load times
  4. Investigate other interesting ways to get better compression, or transparency. Think outside the box!

Useful Tools

source: http://www.html5rocks.com/en/tutorials/speed/img-compression/#toc-tldr

Monday, 27 January 2014

Kick-start your creativity with self-imposed constraints

Kick-start your creativity with self-imposed constraints
Constraints of time and budget can limit our creativity. However, Steve Milne suggests, self-imposed constraints can help spark new ideas and originality.
We all consider ourselves to be creative, yet we're all likely to struggle to define what we mean by 'creative'. For me, being creative is having the ability to seek out and consider the widest set of options for solving your current problem.
Many of us, if we're honest, don't do this. We have a set of go-to solutions that we always start with. We adapt them to the current problem, sure, but the core approach is the same. It's Bootstrap syndrome. Breaking away from these start points is hard. They are the on-ramps to the motorways through our mind. They are the path of least resistance, and we're always in a hurry.
Many of us focus on adding new skills to our armoury in order to extend our options. This gives us more on-ramps. This is clearly necessary, but I don't think it's sufficient.

Roadblocks drive creativity

Obeying your work constraints forces you to think creatively by closing those mental motorways. Some constraints are easy to identify. Time, budget and scheduling constraints are all well understood and feature in your projects already (I hope!). A great idea that takes a month to implement will be dismissed if the time isn't available. You loved that first idea but you will find another, more appropriate one.
There will be other constraints that are just as real that you perhaps don't commonly identify. Some will be technological, but most will relate to the user of the project. Perhaps the majority of site users have English as a second language. A third type is the self-imposed constraint. These are my favourites, because we are in control of them. Things like 'no hover states', 'one button', 'better labels' or 'one typeface' are great examples of these. Adding these to your hack sessions will block those motorways, forcing you into mental side streets you normally avoid.

There's no 'correct' option

We all like to be right. Sometimes in the web community we are too keen to be right. We avoid trying different things for fear of the dreaded "LOL, you didn't use X" tweet from a peer. Don't let that stop you. Pick up your last project, set aside an hour and take away that 'correct' option. See what you come up with. You never know, it may just be better. If not, blame the constraint and try to identify something you learned.
Then, pick it up again and remove all hover states. Now identify the issues this causes. If no issues arise, you didn't need those hover states. If the design collapses altogether, maybe you were over-reliant on them.
Pick it up again and remove something without 'breaking' the core purpose. If you can't remove anything you either have a perfect design, or you are being too conservative.
The constraints of Twitter's 140-character limit delivered a better experience than many of its competing social media offerings. Image-sharing social network Instagram only allows square photos. That constraint was more important than all the other technology. The constraint directly impacts on the user.

RWD constraints

Responsive web design has a fundamental constraint at its core: that one code base should deliver the site to all devices. It is this constraint rather than media queries that defines RWD. I would argue that it has improved the web as much as the web standards movement did (web standards being, of course, a set of constraints). It did this by blocking the old motorway and creating a new one.
Working with self-imposed constraints builds your ability to identify project constraints that you may be missing today. It's this ability to understand and respond to project constraints that has creative benefits in any role.
When working on ideas for your next project, work through a series of self-imposed constraints to investigate more original solutions.
Could this site work and be better with just one button? Could it be the next Instagram with just one button? Try it and see.
Words: Steve Milne
Steve Milne is a digital solution architect for Fifth Ring, a specialist B2B communications agency.

How to launch a startup company: 8 must-read tips

The barriers to creating your own startup company have never been lower. Eight leading startup founders explain how to go about it.

Why work for someone else when you can create your own startup company and keep all the money? Here, eight prominent entrepreneurs offer their advice on how to create a startup company and make the move that can change your life and potentially make your fortune.

01. Actually start!

Startup company - actually start
BeSquare enables you to see talks at conferences you couldn't attend
Craig Lockwood's startup company portfolio includesbesquare.mehandheldconf.comfounderscast.com,pixelpicnics.com and a careers platform for teens, which is currently in production (tentatively titled 'Wanna Be A Spaceman?'). "Finding something that doesn't exist which would make my life better has always been the main driver for my projects," he says. "I figure that if I would use something, surely somebody else would."
Lockwood's advice for somebody starting their own web business? "Actually start," he responds. "Open a text editor and write your first line of code. Putting things off is a sure sign that you are not passionate or that you don't 100 per cent believe in the idea.
"Don't necessarily worry about where an income will come from - a good product/service will always find a way to make money."

02. Build something you believe in

 build something you believe in
Typecast is a browser-based tool that helps designers experiment with type
Paul McKeever co-founded design startup company Front in 2000, then changed direction to work on type app Typecast in 2011 and joined Monotype in October 2012. He describes his current venture as "the story of a switch from being part of a service company, through building a new product then being acquired and becoming part of a larger company.
"In 2011, we at Front decided that we wanted to try building some of our own ideas to switch from being a service company. We were already working side projects to make our own design process easier and were getting equally excited and frustrated with web typography. So one of those projects became Typecast, a browser-based tool that helps designers experiment with type."

Build momentum

"I think that if you're starting something it should be because it's something that you truly believe in and care deeply about," he says. "Most of the time when you're getting started, it'll feel like your Sisyphus, the mythical Greek figure who spends his day pushing a boulder up hill, never succeeding and starting each day facing the same impossible task.
"That's what it felt like to me when we were building Typecast. Creating a new product takes an unimaginable amount of determination. Hopefully, along the way you build momentum and the boulder gets easier to push.
"But on the days where you're getting flattened as it rolls back down hill, the best form of motivation is that you want to succeed not for fame and fortune but because you think what you're doing will make the world a better place."

03. Embrace the competition

 embrace the competition
The Industry is an independent tech media blog
Co-founder of startup company The Industry and Evomail, Baltimore-based Jared Erondu created The Industry with the intent of "covering design-focused startups and people. 14 months later, we’ve grown into a well-respected blog and podcast".
He'd give this advice to people thinking of starting something: "If you're thinking about it everyday, you're probably passionate about it. So just put your mind to it and do it. As for competition, embrace them, learn from them. If you have many, it probably means you're in the right place. As for age, it's just a number, I'm 18."

04. Find the right people

 find the right people
Wunderlist is the most downloaded task manager in the world
Berlin-based Christian Reber founded startup company6Wunderkinder in August 2010 together with five friends "with the goal to create a productivity tool for the mass market".
After only two months of development they released Wunderlist, which reached its first million users within under 280 days. That was faster than Evernote, Twitter or Foursquare reached their first million users. Today, it's the most downloaded task manager in the world and available in over 25 languages on seven platforms.

Your project doesn't suck

His advice to would-be web entrepreneurs? "I think that, in the beginning, courage is most important thing you need to start your own company. People will tell you why you will fail or why your product sucks. It’s important that you find the right balance of listening to valuable feedback (and searching for it) and at the same time ignoring the naysayers.
"The second piece of advice would be about finding the right people. It’s important that you understand what you are good at and what not. Then, find the right team that shares your vision."

05. Don't spend ages on planning

 don't plan for ages
Code club is a successful startup company
London-based Clare Sutcliffe is CEO at startup company Code Club, while came out of a plan to create a 'useful hackday' at the New Adventures conference in January 2012. Here's her advice to anyone wanting to follow in her footsteps: "When we started Code Club we didn't spend ages on planning. We just made a plan and got on with it. We continue to do that to this day. It's one of the reasons we've grown so quickly.
"We have two sayings that push us forward and let us make decisions quickly. The first is 'Good artists ship' and the second is 'Don't ask for permission, ask for forgiveness later'. So my advice would be 'do your research, then just get on with it'."

06. You don't need capital or partners

 you don't need capital
AKTA is one of Chicago's top design studios
John Roa started user experience-focused design agency ÄKTAwhen he sold a video-game marketing company he founded in LA in 2007 and came to Chicago looking for a new startup company. "I saw a massive need for a boutique-sized studio that focuses on user experience for a diverse array of digital platforms - so I started ÄKTA," he explains. "Three years later we have 21 employees, a 5000 sq/ft loft studio and are growing like crazy nationally and internationally."
What advice would he give to people thinking of starting something similar? "Stop thinking about it and start. You don't need a business plan, investment capital or partners.
"Because of the perceived risk and how complicated it seems, not enough people who say they are entrepreneurs actually start businesses. Embrace the failure that will surely come, and do it again. If you can't stomach failing again, you probably aren't cut out to be an entrepreneur."

07. Disruption happens at a systemic level

 systematic disruption
Believe.in is an online fundraising service for charities
Matthias Metternich and Will Cookson are co-founders of startup company Believe.in, an online fundraising service for charities that was founded in London in May 2011. The two met at the creative agency Poke where they worked on product and service design for a number of major brands.
"A place like Poke brings people of a certain culture and ethos into the same space," says Metternich, "and Will and I found that we both shared a deep passion for how to blend commercial thinking, design and technology together to create companies that evolve industries of significant societal relevance.
"From sketches on napkins, we graduated to nights and weekends and then to trading consultancy for free office space. Juggling two full-time jobs presents its challenges and it was not until we attracted some of the brightest investors in the world, quit our jobs and hired brilliant people - that the venture was truly on its way."

Interfaces aren't everything

What advice would he offer to others? "Too many startups focus on surface level issues. For example, on how to render existing content differently, or present aggregated data through a variety of complex graphs. Interfaces are important, but not everything.
"Good advice is generally relative, but our tip is to look beneath the surface and beyond the interface through to the problems that pervade the systems we lean on day in and day out. True disruption happens on a systemic level - after which ingenuous interfaces and design make simple, elegant and beautiful what were complex problems that few ventured to solve."

08. Little goes as you expect

 expect the unexpected
Buffer is a great example of a successful startup company
Now based in San Francisco, Joel Gascoigne started social appBuffer from his bedroom in Birmingham, UK, as a way to help individuals and small businesses with posting more consistently to Twitter.
"After couple of months I had my first paying customer and my co-founder Leo joined me. Together we grew the company to 25,000 users and around $2000 in monthly revenue.
"We then jumped on a plane to San Francisco and got into a startup accelerator called AngelPad. After AngelPad we raised $450,000 from great investors and I've been learning a huge amount along the whole journey. Today, we're a team of 11, have 600,000 users and we generate $100,000 per month."

Stick at it

Here's his advice to people thinking of starting a web business: "I blog regularly to try and help founders and I often have Skype calls and coffee meetings with early stage entrepreneurs. I think the single best piece of advice I could give to anyone thinking of starting something is: to start something.
"My previous venture was a failure, but I started and stuck at it for one and a half years, and without those 18 months of failure and learning I would not have been able to start and succeed with Buffer.
"Once you start and are on that path, everything changes. Little goes as you expect, and you learn more with every new day."