Read my book

I wrote books about Webpack and React. Check them out!

Saturday, December 29, 2012

Reflecting on '12 + Blog Highlights

So the year of the Mayan apocalypse is nearing its end and it's time to see what happened this year on this blog. I started this tradition last year and I think I'll stick to it. It's fun to see what has been said and done.

This was my first year out of university. I'm not sure if I'm going back anytime soon. The year taught me a lot. I also know I have plenty to learn. I've realized it's a good idea to know more about what you don't know so you when the time comes you know which resources to tap into.

Besides getting somewhat stronger technically I learned quite a bit on startups. I will start out by rambling a bit about those and get back to tech later on this post.

Startups - Lessons Learned

The year started very technically whereas the latter half was spent in the world of startups. I now have a better idea of what the whole buzz is about and what it takes to turn your startup into a success. I was particularly influenced by the whole Lean Startup movement, Steve Blank's concept of Customer Development and a Launch Pad course I had a chance to participate in.

All of these gave me thinking tools. Particularly Launch Pad made me appreciate the importance of a good business strategy. Unless you define what victory is there is no simple way to reach it. If you have some numbers on the paper and understand what it takes to get you to your goal, you'll have much better chances at succeeding in your mission.

Tools Are Best Used Together

Tools by Robert S. Donovan (CC BY)
It has been nice to see how it all comes together. It is possible to start with a holistic approach these days and fit these partially separate theories into it based on your business needs. Concepts such as Lean Startup, Lean UX and Kanban are compatible. I think one of the key points here is that gradually the boundaries between various groups of experts will start to melt. In a small organization that is a must.

Rather than separating development from user experience (UX) and customer development there are many common points. Customer development provides the ingredients you need to reach the right kind of UX and you will have a better idea of what is actually valuable to the customer and what is not. This way you will avoid waste in the development which in turn can organize its way of working using a simple Kanban table.

This is just a small part of the whole equation. Even though you might implement the right features for your target group, how do you know they are right? This is where testing comes in. You will want to design your product so that it is possible to get meaningful data out of it. In case of web based services this is actually quite easy to do and there are multiple techniques and tools available already. AB testing is a good starting point. You will also want to look into cohort analysis.

Market Trumps Idea

Fancy a Cuppa? by National Library of Ireland on The Commons
One of the very basic things it is important to understand about Lean Startup is the whole cycle from a simple idea to a working business model. Steve Blank defines a startup as an apparatus that searches for one. I think that's the whole essence of it. This search can be split into separate stages that search two particular fits: problem/solution and solution/market fit.

Once these stages have been completed it is time to scale your business. This is usually the stage in which it can be helpful to inject some funding into the business to make it grow faster. I picked this way of thinking about startup growth from Ash Maurya's excellent book "Running Lean". It complements Eric Ries' "Lean Startup" (the seminal work) very well.

I think the primary indicator that you've achieved the fits in your product is that you have traction and growing demand. You cannot move fast enough to serve the demand. The market literally pulls the product out of you.

This is the reason why I find it very antithetical to start out with an idea. I have seen too many people in love with their ideas. It's not about the ideas, it's about the market. I see business as a process of removing inefficiencies and waste from the system. You have a business in case you have managed to displace something or provide something entirely novel and different (new market).

Notable Blogposts

You can find my startup related posts under the tag. I actually wrote two longer posts on the whole market vs. idea thing: "Your Baby Is Ugly" and "Idea vs. Market-Driven Startups".

There is actually a third driver that is known as sales. If you are big and well-known enough you can actually generate demand for your product yourself. So rather than filling some existing needs you create new ones. Apple is an excellent example of a company that excels at this. Somehow they make people purchase the same devices over and over again.

I named one post of mine as "If CLV > CAC then business else hobby". You should understand at least these two numbers about your business. If it is too expensive for you to acquire new clients and the value they provide is not good enough, you are in trouble. You will likely want to make sure your CLV (Customer Lifetime Value) is at least three times larger than CAC (Customer Acquisition Cost) to stay in business.

You can decrease your CAC by being a good salesperson. There are some tips how to get better at it in my post titled as "Sales is All About Understanding". In that post I reiterate some points I learned from a truly great salesman. Thanks Teemu!

At one point I was feeling particularly angsty for some reason. That might have had something to do with the Winter and darkness. Anyhow I ended up writing "Eleven Easiest Ways to Screw Up Your Startup". Try to avoid those mistakes in your startup, m'kay?

I took part in various startup related events. I wrote more about two of those: "Presentation Notes - Case Samcom, Crowd-funding, Commercializing an Idea", "Visits at New Factory and Startup Sauna". Read those if you want to know how we roll here in Finland.

Oh, and if you are really serious about this startup thing, check out my Lean Canvas and Kanban templates. Those should at least help you get started. These kind of tools give you a nice way to discuss about your business with other people. And it is easier for you to keep track of what you know and what you think you know (assumptions).

Remember, startup business is all about reducing the risks involved and validating your business model!

Technology - Lessons Learned

I did quite a bit of development during this year. Besides various customer projects I participated in a certain volunteer project and developed a variety of my own. There are still a few I want to get into a decent shape and release to a wider public but overall I think this year was alright.

I developed various utilities during the year. As there were quite a few I've tried to split them up a bit.

JavaScript UI Widgets

  • caro.js - I developed yet another carousel as I could not find one that had a nice syntax and that supported responsive layouts. It might not be the prettiest but it gets the job done alright.
  • yabox.js - Yet another lightbox! I cannot recall why I wrote this. It must have been a boring day or something. Anyway, as usual, simple and works fine.
  • ellipsis.js - This one is actually semi-interesting and original. Nothing is more annoying than having too much content on your site. In this particular case I had long lists that needed some tidying up. I ended up implementing a simple plugin to do this for me. It simply hides the offending elements based on given rule and provides means to show them if needed.
  • Colorjoe - Colorjoe is yet another color picker. Why I felt I had to develop yet another one? Because the existing alternatives didn't feel like something I would feel comfortable using. Colorjoe doesn't depend on images like most and provides a nice pluggable API. This allows me to customize on demand without losing too many hairs in the process.
  • drag.js - This little widget grew out of Colorjoe. drag.js makes it easy to implement various sliders. In this way it's actually a meta one. It would be fun to extend this with drop semantics to make it even more useful.

JavaScript Utilities

  • ghw - ghw converts GitHub wiki to a form suitable for gh-pages. I implemented this tool by suggestion of Guillermo Rauch and used it subsequently to skin jswiki.
  • readme2gh - Maintaining gh-pages index and README.md for a project can get messy at times. This is the reason why readme2gh was born. I don't use it a lot these days but it was something fun to hack together.

Node Utilities

  • suite.js - For some reason I just couldn't find a testing tool for Node that fit my tastes. So as usual I wrote my own. The tool has evolved a little bit since writing that post but I think I'll expand on the new features on another post later. Now the generative test syntax is a lot neater!
  • annotate - This is the tool I just hinted about. annotate.js implements multiple dispatch semantics in JavaScript. It attaches certain metadata to annotated functions that makes several tasks such as test and example generation possible.
  • generators.js - As you need generators for generative testing (also known as fuzzing), I needed to develop those myself.
  • funkit - funkit it a collection of utilities I developed while implementing aforementioned libraries. I just decided to put it all into single place I can then reuse elsewhere. I'm close to finishing a rewrite on the library so the next version will have nice things like documentation and better tests.
  • mongoose-sugar - As I felt Mongoose was missing some sugar I decided to add some on top of that. This project works really well with rest-sugar.
  • rest-sugar - rest-sugar simply generates a nice and tidy REST API based on a model. This makes it super easy and fast to develop those in case this library fits your use case. I have written a specification for a library that implements revisioning semantics making it possible to build more versatile applications on top of that (think wikis, trackers and such).
  • rest-sugar-client - rest-sugar-client uses the metadata provided by rest-sugar and makes it dead easy to communicate with the API via command line. I recall writing this just for kicks. This might be handy for testing and building actual utilities, though. There is more information about these three tools in an associated blog post.
  • ioscript.js - The idea of ioscript.js is simple. It just executes the given logic on some input and then outputs that somewhere. In essence this makes it dead easy to write utilities such as readme2gh. I use this in various other libraries as well since it gives me a single extension point.

Node Scrapers

  • sonaatti-scraper - sonaatti-scraper scrapes certain food related data from the site of a local restaurant. More of a proof of concept really. Comes with a REST server.
  • jkl-event-scraper - jkl-event-scraper scrapes event information from a local site and makes the data machine readable. This is the more serious of the two and it does some pretty heavy crunching.

Python Applications

  • website-poller - It is really nasty that your site or service happens to be down just when your client wants to use it. website-poller is one of those little utilities that makes this less likely. It simply uses the notification services provided by OS and gives you a nasty little message to let you know something is wrong.
  • bongaus.fi - bongaus.fi is a little QR code based service I developed with a friend of mine. I wrote most of the Python code. The source isn't open but I gave a presentation about the subject at a local DjangoCon around May. The slides and conference report are available fortunately.

Embedded Development

  • Elovalo - Elovalo is a combination of a LED cube (512 voxels) and a pedestal (3x) built as a volunteer work for a local lighting event, "City of Light". With a miniscule budget we managed to achieve quite stunning results. I wrote a Blender based 3D simulator and helped with the effect API design and implementation. I also contributed to the design of the pedestal and did some miscellaneous tasks here and there. The simulator allowed us to previsualize effects and develop the API before actual hardware was ready for testing.

Other Development

One thing that motivated the implementation of various tools above (esp. REST related ones) had to do with JSter. It is a service developed by me and a couple of Ukrainian friends of mine. As far as I know jster.net is the largest JavaScript frontend library out there. It is based on jswiki data and has grown quite a bit since the launch at October just within two months. We will keep on improving the service.

I'm sure I left out some development work I've done. And as I said there's still some in the pipeline. Besides working with JavaScript, Python and C I had exposure to some other technologies as well. These include C# (MVC3...) and Ruby on Rails. I am not a particularly good at either yet but at least I understand how they work on a basic level and am able to contribute to projects implemented in those.

Development Insights

As usual you tend to optimize the way you work. I think the biggest gains for me can be summarized in four points: LiveReload, Vim, Dropbox and Autojump. Besides learning new tools I managed to get quite a bit better at using Vim. I am still very far from a guru level but hey there's time to learn.

I also picked up various tricks and figured out a few things. The posts below should give you a better idea:
I know I skipped a few posts there. If you are into traveling, you might want to check out my travel reports on Madeira and Lake Garda for instance. There are still various topics I would like to write about. If there is anything particular you have in mind, let me know and I will look into it.

If you made it this far and like my content, consider subscribing into my Twitter feed. I aggregate the information every once in a while but if you want it fresh you know where to go now.

Have a great 2013! See you next year.

Thursday, December 27, 2012

Linkdump 12 - Art, Startups, UX, Web Design and Development

It has been roughly half a year since my previous linkdump. It's time to come up with a new one then and go through some of the jewels I've discovered. Enjoy!

Art


Startups


UX

Web Design

Saturday, December 15, 2012

Sales is All About Understanding

sales

1. The exchange of a commodity for money; the action of selling something.
2. A quantity or amount sold.
I had a great privilege to take a part in a series of lectures by Teemu Nuutinen of Sales Profit. There were quite a few things I picked out. As a result I approach sales in a completely different mindset than before. It's not just about trying to sell your product to some poor soul. Instead sales should be treated more as a dialogue that aims to find something that fits for both parties.

Scratch My Back, I'll Scratch Yours

Performing an ear inspection by ecmorgan (CC BY-SA)
Sales is all about reaching a mutual understanding. You will want to understand the customer's business and problems better than he does. With your view on things you might actually be able to alleviate some of those issues he's facing. That's where the value and consequently your business lies.

Instead of selling a bulk product, you'll want to sell a continuum, a relationship. No matter how good you are at it, sales is still a rough job. Therefore it makes sense to develop longer lasting relationships with your clients. This provides stability and safety for both parties. In addition it will give you a chance to improve your offering as time goes by.

There Will Be Lemons

Lemon! by {platinum} (CC BY-NC-SA)

Finding good customers isn't exactly easy. Over time as you accumulate them you'll actually get into a nice position. You will get to pick your clients. This gives you interesting leverage during conversations. If you are not willing to sell by default and make this clear, the potential client actually has to sell himself to you provided he is interested enough. This is very opposite to the conventional way we think about selling.

Not all clients are equal. Some will take disproportionately your time with a poor pay off. This is something you should take care of. Make the situation clear. If it isn't possible to find an acceptable compromise, you'll know what to do.

Sometimes you may come upon potential clients for whom you have nothing concrete to offer. In this case it can be beneficial to give guidance and drop names of possible alternatives. You might thank yourself for this deed later on. Good deeds will be remembered.

Every "no" is an Opportunity

Try avoid getting trampled by elephants by Anna Briggs (CC BY-NC)
There is this famous Finnish skijumper that said something along "Every chance is an opportunity". Replace "chance" with "no" and you have got something sensible. Eventually you'll get a "no". That's just normal. Rather than accepting it, you should question the "no". It is a sign you have more to learn about your potential customer. Ask why. Perhaps there is a way to reach a compromise.

Know Who to Talk To

The Village People by fallentomato (CC NC-SA)
It will make a huge difference to know who you should talk to. Perhaps the person you are talking to isn't the one who makes the decision or simply doesn't care or know. Finding the right person to talk to can be somewhat important particularly if you are dealing with big organizations.

Sometimes you might want to be more indirect with your approach and perform some research via the clients of the clients. This will give you better understanding of the client needs when it comes to negotiating. Remember, it's all about the value you can provide.

The status of the potential client affects the discussion a lot. Different clients expect different things and have their own lingo and way of doing things. You will want to align yourself with these. It has a lot to do with trust. It is a lot easier to build relationships if you know you can count on the other party.

Luck is Made

Shamrock by JD Hancock (CC BY)
It isn't enough to be good at sales and finding the client needs. You will actually need to be able to deliver. The same goes the other way around of course. It doesn't help to be really good at something if you cannot sell it. I feel this applies quite well to many technical organizations.

In the between of these two you'll find the concept of marketing. You cannot just sell your offering to anyone. That's way too inefficient. Instead you'll want to understand who your market segments are and how they function. You can turn this knowledge into benefits on both sales and technical ends.

It gives the fodder you need to actually reach sales. And it helps you to build more satisfying products and services that serve actual client need. I see marketing as an essential bridge that allows you to achieve this.

By combining the concepts of doing (technical side) and telling (sales and marketing), you'll come up with something known as "surface area of luck". This is a concept concocted by Jason Roberts. In order to "get lucky", you'll need to expose yourself to it. Luck is made.

Conclusion

Teemu really changed the way I understand the function of sales. I see it as an integral part of a company, one it cannot just succeed without. The basic skills are important no matter who you are discussing with. It's not just about business to business relations. It's something that comes around when you are trying to secure some funding or find new employees even. The same techniques apply.

Find the common ground and value. Build long lasting and healthy relationships that benefit all parties involved. Even though it's business it doesn't mean it has to be all about the money. That's just more of a means, not an end.

Tuesday, December 11, 2012

Taking Your Website to the Next Level

Website development is kind of interesting. You have to balance between a lot of things. There is certain information you must convey but just doing that is not enough. The presentation matter a lot. And then there is the technical side. It doesn't help to have a great looking and informative site that loads slow as snails.

Just today I spent some effort taking the site of my co-operative to the next level. It didn't that much time-wise and I didn't touch the content. Sometimes really small changes make a world of difference and I think they did so in this case.

Criticue, a service designed facilitate feedback process is a part of the reason why I ended up developing the site further. One comment in particular highlighted some issues I had not thought about earlier. The service isn't without its flaws and will no doubt become a lot better should the developer keep at it. Even in its current form it's possible to attain some useful feedback via it.

Currently I'm testing another similar service, Feedback Roulette, to see how that works. This seems like a more established player. I can't wait to see what kind of feedback I will get through it.

I am sure there are a lot of other services like these out there. I think fivesecondtest and Optimizely are worth a mention at least. Especially latter seems like a revolutionary service.

Optimizely provides a simple user interface which you can use to construct tests. You will simply modify the structure of your page somehow for each test. Then once you are happy with your set of tests you will need to embed a certain JavaScript snippet to your actual site. This allows Optimizely to run these tests on actual users. As a result you will gain certain statistics that allow you to develop your actual site further. How cool is that?

There are more technical ways to improve your site. WebPageTest provides tracing information on your site and provides a set of recommendations on how to speed it up. Highly useful! HTML_CodeSniffer is a bookmarklet that allows you to check how well your site conforms to accessibility guidelines. If you want to experience your site through color blind eyes, give Vischeck a go.

I am absolutely sure these tools are just a tip of an iceberg. I also know I am missing out on some superb tools. If you happen to know some of those, let us know in the comments!

Tuesday, December 4, 2012

Idea vs. Market-Driven Startups

There is a certain pattern I tend to see in my conversations with startup people. Usually the conversation goes something like this:

Me: So, what is your product?
Startup Guy: Well, it's a X that does this and that (goes on for 5-10 minutes).
Me: How are you going to make money out of this?
Startup Guy: Once we have enough users, we'll be able to attract ad revenue. In addition we're going to use the freemium model.

If I was an investor, I would probably excuse myself at this point. But given I'm not, I try provide an alternative perspective for the Startup Guy. The approach might work with enough luck but you really don't want to rely on luck in business. There isn't enough of it for us all.

The problem with "enough users" is that attaining that magic amount is not entirely trivial. There is a lot of competition out there and building a "community" is not easy nor cheap in case you want to do that fast. This applies particularly to web apps as Paras Chopra points out.

I have my qualms with the freemium model as well. Even if you managed to attain enough users, how do make them convert? What value do you provide? As Ash Maurya points out in his book "Running Lean", it can be a difficult position, especially in the beginning. Rather provide concrete value and aim for real sales rather than something hypothetical. There are probably some exceptions to this but I'm pretty wary about the freemium model. It's simply used too much these days.

As Paras does in his article, I believe as well that it's better to start with the market part of the equation. It is entirely possible that you'll run by a great idea that already has an existing demand and market for it. I do think it's somewhat rare, especially these days. If it's truly a great idea, it's somewhat likely there are already a few teams working on it. If it's a feasible market, a couple of those or maybe just one will come out as the winner.

Market First. Why?

Why to start with the market? Value, and consequently, money is made out of inefficiencies. Let's say you ride by bike to your work place each day. You use the same route given that's what you've gotten used to. What if you discovered a shortcut one day? You could get to work perhaps ten minutes earlier and less sweaty. In addition there could be less traffic lights to bother you.

That's what business is all about. It's finding some inefficiency and providing an alternative. I divide these further into necessities and novelties. If you are in a necessity market, you'll likely have a bigger potential market. Novelties can be tougher to sell but in turn have less competition around. You do have to be able to communicate the value you provide particularly well in this case, though.

The given example is bit of a both. It's necessary to go to the work in order to get money to get bread to the table (unless you have a good social security in your country). A faster route is a novelty. You might actually prefer the longer route if you are into fitness or if it's more aesthetic. So the divide isn't always that black and white. It's possible that one's necessity is another person's novelty and vice versa.

In this case the idea of a shorter route is based upon your own observations. Essentially you are the market. I believe this is the reason why many successful startups scratch some itch of their own. They can skip on the market research a bit, even though it's a risky proposition, and then build something for themselves and offer it to similar people they happen to know. If the stars are aligned, the product goes viral and you are in business!

Unfortunately it's not that easy for the rest of us. If we are heading into some other market rather than ourselves, it is our duty to truly know it. This is where Steve Blank's concept of Customer Development kicks in. If you really want to think like your customer, set up an apprenticeship. Follow the potential customer around for a week or two, take notes. I can guarantee you will notice inefficiencies, or in Steve Blank's words, pains.

Your background allows you to interpret these pains and concoct possible solutions for them. It is entirely possible solving some, or perhaps one, of those is your business. You can validate this assumption very fast simply by asking! Would it be worth your money to get this problem solved?

Conclusion

I hope this post gave you some insight why I believe it's better to start with a market rather than an idea. Every idea belongs to a context. Market provides that. If you start market first, you'll generate some ideas. Then you will be able to prune out the bad ones early on and focus nurturing the good ones.