Sunday, December 23, 2007

Reflection Part 1

Christmas is upon us and soon, the new year.

As I look back, this year has been significant in many ways. First of all my visitor traffic is now less than a third of what it used to be because of an algorithmic change in Google's search engine. As a result of this my business was running at a loss for half a year at a 25% revenue loss compared to the previous year.

How did I react? I think I panicked for a while, like anyone would. Thoughts of doom and gloom and whether or not this is sustainable ran through my mind. Eventually I came to my senses. What I did next was very significant, I did what anyone with common sense would do, develop a better product. The matter of fact is, I cannot control search engine changes but I can develop a better product to increase its conversion ratio. I spent about 2 to 3 months revamping my software, writing a lot of new code and thinking about what users want. Was it a gamble? I didn't feel it was. I am very glad I made the changes. My product is now significantly better than its predecessor and not only that, I learnt a lot during this process. Really to increase revenue, the best way is to develop a better product, not SEO, not marketing hype, but to deliver where it matters most, usage and sheer quality. There's a book called "Founders at work" where an ex Microsoft employee named Joel Spolsky was interviewed and he cited the same reason when asked about increasing revenues. Develop a better product and you can also justify an increase in price.

How to develop a better product
  • Surveys, ask your customers. You are not your customer, your friends are not your customers. Ask your customers what they want and listen to them.
  • Look at competing products and understand how you can be better than them, but don't match them feature for feature.
  • Features are important, but usability is even more important. Code is malleable, the user interface is not. Develop an interface that is hard to understand or use and your software will not sell even if it was free.
  • Implement lots and lots of tutorials to help users and make it easy for them to access help. More help to them means less support that you have to spend time on replying to their questions.
  • But if they do, always always help them!
  • Cut down complexity. Always always try to reduce the amount of clicks and data entry that users have to input. Make things flexible but rigid, sounds like a paradox I know!
So I was running at a revenue loss for half a year but still managed to grow by a small amount this year, about 4% in terms of revenue in US dollars, which I am pretty satisfied considering the circumstances. I am very very confident that my conversion ratio has at least doubled, if not, it has actually made people "desire" the product.

Now if only I had my former traffic back.

Secondly, I started my first full time "job" working for a company aka Boeing. Where "job" refers to working for another company other than mine, of course (Boeing actually use my software, and are one of the first to purchase my software when it was released many years ago, you could say it's come full circle). And I still have to say, nothing beats doing your own thing. I'm only doing this to make myself "employable", and also to increase my nett worth and salary. Many years ago when I was 14 I said to myself when I start my first real full time "job", it will be at least $X per month. And I'm happy to say I've achieved that. Combined with my business, I am very sure that I make at least the same level, if not higher, than the senior engineers at Boeing. But I'm younger and hungrier than they are. Needless to say among my peers.. I am very sure I make more than all of them, salary wise anyway. It will take years and years and years for them to achieve the same level as I am making now and by the time they do I'm pretty sure I'll be at a different level. I have to admit with my present salary level I am having trouble spending the money as I don't usually spend much. Now I'm not boasting, I'm just stating the facts. The fact is even with what I'm earning I have a very high level of self worth so I don't feel it's enough. Of course I won't say this to their face, which is why I say it here. I don't care for titles, or career progression, I just want to work with smart people and help other people with my software. To me my business is more important than my full time "job" with Boeing even though it's risky, because there's no salary cap with my business and I get far greater recognition. Every time I receive an email from a new customer, there is a level of excitement which I simply cannot describe and never diminishes. It's like having your own creation being appreciated and desired by many other people in the world.

Business goals for next year?

Hopefully two companies in the US will be selling my software, one's a distributorship and the other a partnership deal. So the opportunity for increased revenue will exist, and growth should result from that. But right now I'm very very concerned with the economic situation around the world particularly the US. If it goes into recession, where the chances are increasing day by day, then my business will no doubt suffer as the US constitutes a significant portion of earnings. If that is indeed the case then at least I have my "job" backup and money saved in case of an economic downturn. Most likely in this scenario, earnings will shrink no matter what I do. The plus points are I can take heart that I've done far better at writing and selling software than many others and the fact that my business has been running at a profit since it began and for several years now proves this. So in the event that the economy recovers after a recession, I can safely assume that my revenues will more or less maintain at the present level. Here are some important lessons that I've learned.

Lessons as a software entrepreneur
  • Some things are beyond your control, anticipate what you don't expect and then decide on an appropriate plan of action
  • Code is important, the user interface is 10x more important
  • Pay attention to customers, your actual users. Friends are not your customer, developers are not your customer
  • No one cares what technology you use as long as it works
  • Build for quality, but focus on the important things. If something that works but isn't used often, don't waste time perfecting it. Focus on your energies on the things that matter.
  • Rankings can get you noticed but only your software will make you money
  • Don't think about the money, think about how your software can better lives for others
Now I'm going to talk about some milestones that I've achieved in relation to the business, I think this is always significant as it shows how far your business has come from making no money to making at least some money. There's a long way to go, but it gives you an idea of how a business is. These are some personal milestones which I've reached since informally starting the business in 2002, with formal registration in 2004.

Milestones
  • Sell at least 1000 copies
  • Sell at least 100K nett worth of software
  • Sustain the business for at least 3 years
  • Make a sustainable living off the business
More later.

Tuesday, October 16, 2007

Microsoft SDE/SDET Interview in Sydney

I got back from an interview with Microsoft last Thursday. They were hiring for SDE/SDET positions. I won't know the outcome till this Saturday i.e. 21st Oct. How did I do? I'm not sure. I answered all the coding questions right, eventually, but I felt I could have done better. The development manager for one of the groups that interviewed me said I can definitely write code. So I'm assuming that's a compliment, but with interviews, you never know. I only made it to the 3 interview mark, which is typical, but from what I've read online it seems that only people who get 5 interviews get hired. I confirmed this with another recruiter and they said 3 is the typical number per candidate. Anyway, the interview process really is an experience on its own. There were 5 of us in the lobby where we started at 8am. The recruiter, Carrie, warmed us up by giving us some questions about Microsoft. Then she outlined the day, saying that typically the interviews are 3 hours long and if they need more information, they'll have additional interviews after that. Each interview is 45 minutes, with a 15 minute break. My first interviewer was with a development manager, and the second, was with a developer. I had the HR interview last. At the end of each interview, the interviewer will give you hints and tips on improving your coding process, e.g. to use the whiteboard more often for example to lay down your thought process. It was very relaxed, and casual. All the interviewers wore shirts and jeans. The coding questions? Well they weren't that hard, for me anyway. I didn't have to deal with pointers, which I could have, but instead dealt with char strings and arrays, performance optimisation, some data structures. I used pseudocode before I translated one of the functions that I had to write into C++ code, and it worked first time, but then I had to optimise it, which I did successfully. For me I wanted to get the functions right and actually complete them rather than leave them unsolved. I think I did that successfully. The HR interview was alright as well, asked why I wanted to work for Microsoft, stuff about my software company, there weren't any trick questions. After our 3 interviewers, 3 of us were allowed to leave and 2 other people had additional interviews. From what I found out, each of us had very different questions. One guy had to deal with pointers and data modelling, which were quite different from mine. With the 3 of us remaining it seemed like everyone else had bombed in some way. One of them bombed his first interview, the other one didn't finish answering his question, it seemed like I was the only one who didn't do as badly. Anyway we finished at 11am, took a couple of photos, and then spent the rest of the day in Sydney before catching the flight back to Brisbane in the late afternoon.

How to prepare?

Study, lots of study. I read "Code complete", "How to move mount fuji", brushed up on my C++ skills and data structures, and read some more. They can ask you anything, so you have to study as much as you can. Also there's a huge variety of questions. I could not sleep the night before as I was too excited, I'm sure some sleep would have helped me. Microsof really takes care of you by paying for your flights, accomodation, transport and food expenses. I got to stay in the Marriott, which was great!

How did I get the interview?

Prior to the week before the final interviews I had a phone screening with a recruiter. It lasted 15 minutes and she was happy to put me through to the final interviews by the end of the conversation. Your phone screen interview could vary as previously I've had a technical and problem solving interview that lasted more than an hour! Anyway, I was really excited but nervous too as I knew I had a lot to study for. I had only just a week over to study. The good thing was I didn't have to wait months for them to come over to Australia.

Now what?

Now I wait. The skeptic in me says I won't get an offer. I didn't do that bad, but it wasn't my finest hour. Microsoft is still a good place to work as their OS runs on more than 90% of the world's computers and so the impact that I can make is huge. I don't really care how much they pay either, I already have an offer from Boeing (who are waiting for me to decide) but with this opportunity I can't turn down. The good points? I had a great interview experience, and now I can code even better on the board. Have I become a better programmer through reading? Definitely.

Saturday, July 21, 2007

Is the world only driven by money?

Sometimes I think to myself what a crappy world we live in. Everything is motivated by money. The majority of people only work because of money. Whatever happened to being the best at what you can be and helping others? Don't people realise if you chase money you become enslaved by it? How many times have you heard "but the pay is good that's why I'm working at XYZ"?

Here's a quote from a book I read some time ago

"I am not impressed with what people own. But I'm impressed with what they achieve.
Always strive to be the best in your field... Don't chase money. If you are the best in your field, money will find you."

People don't realise the more you chase money the more it runs away from you. I secretly find it pathetic when people get happy over a few thousand dollar pay raise per year, big whoop. Don't go to work because you have to, go to work because you want to make the world a better place for people. Hey I like doing what I do, that's why to me there's no separation. My work is me, I like doing what I do. You have to be passionate about what you're doing otherwise it will only be a job to you, which makes it a chore and you will never be good at it. All big companies who started from scratch, I seriously doubt that money was their #1 priority.

If you're not passionate about what you're doing, quit, it's not worth it. If you do something you're passionate about, you will only get better at what you're doing, as compared to what your previous job was.

Since you're improving all the time, let's assume that to be velocity v. V only increases all the time, since you're doing what you're passionate about. And when you differentiate velocity you get acceleration, A. Acceleration is the rate of change of velocity. Basically this means that you will improve all the time and you will end up differentiating yourself a lot quicker and faster from your peers who are doing dull mundane jobs. You will be improving all the time. It's physics in the real world applied to yourself. Last year I made more than my friends who work full time in terms of finances. Is it because I'm better than them? No, it's because I am doing what I'm passionate about. Remember everyone has to start from somewhere. I started from zero (and in many ways, I'm still starting from zero!), I made my software free because I wanted to help others. If no one had suggested to me to sell my software, I probably never would have.

Don't work for the money, work to be the best in whatever you're passionate about and make that your life, not your job.

Friday, June 08, 2007

Dimensions of information

Something interesting I read today.

Information has 3 dimensions according to Boisot
  1. Codification. Codified information has concepts that are easily mapped to categories. For example, Clark Kent breaks down to First name and last name, rules of assignment are easily understood, there is no ambiguity.
  2. Abstraction. Highly abstract information has a smaller set of more difficult to initially understand set of concepts that are more general purpose. E.g. animal is abstract. Sand is concrete.
  3. Diffusion. Highly diffused information is shared widely. Information that is not diffused is held within a few people's minds or hands.

So a lot of the stuff in Web 2.0 (I still dislike that word, who comes up with them??) is data is mildly or poorly codified, almost never abstract, and very easily diffused. The author of the above, Boisot, says that extracting direct economic value from this kind of information is difficult because it is chaotic. The market for this information is also typically dynamic and fast changing. Intellectual ownership of this information will probably be suspect.

Information that is the exact opposite, i.e. codified, highly abstract and low diffusion is more ordered and stable. Things such as academic journals, reciepes. The information is more easily converted to some form of advantage.

So much information from Web 2.0 is often valueless and chaotic. Companies trying to live in this zone will probably disappear quickly and buyers should beware. There is a need for companies to understand how they make money off the information and how information flows between these two very different states. In other words, it's hard to make money from information that's not codified, not abstract and highly diffused. The companies that are considered the top examples of the web 2.0 economy are actually using the chaotic information as a ruse to make money the old fashioned way of bank accounts, trade secrets, proprietary technology and massive scale to win.

Tuesday, May 01, 2007

Re-factoring, abstract, re-factoring, abstract.. survival of the fittest

I have a headache. Too many late nights of programming. I'm re-factoring my code at the moment. As much as 80% of the code written is new. Basically I have re-implemented my software. But it's for the better. A lot of it is now abstract and can be re-used in many other ways. If you sit down and think about it. The most powerful things, are abstract. Layers upon layers of abstractness. We're using them, everyday. Shoes with soles and shoe laces. Shoelaces built from string and plastic. Children are powerful, babies are powerful, because their minds have not been moulded like an adult's. Therefore even though they have nothing to build on, they are very adaptable. Like plasticine. In software, things have to be abstract as much as possible if it was to be re-used.

I like to follow this motto. Less code, is better code. Therefore no code, is great code.

My software will be the best in its class when it's released, not only in terms of functionality, but looks as well. I think many of today's software look like utter ugly crap, designed by engineers with no concept of design, but with the "implementation model" in mind. Basically, the simpler it is, that's what an engineer will follow. But it is not necessary the ideal way of interacting with the software. There's a conflict of interest. The engineer wants to design it as simple as possible. The user on the other hand, wants the end product to be easy to use and interact with. Engineer designed == BAD for user!! Why should people use something just for its functionality? Isn't software art itself? It should be pretty AND functional. The world of Windows applications has gotten to such a point that people use their computers, because they have to. Even if it's ugly as anything, they'll still put up with it. That is why anything that looks good, and functions well, will have a signficant advantage over any other product. If it's in house development, no one cares, but if it's in public domain, it better look good or it's not going to last if (when!!) a superior one comes along. Look at Netware. They dominated the network market for a while because they were the only ones with networking capability. But it was too God damn hard to use. Along came Windows with its built in networking (and far far easier interaction) capabilities and it's goodbye Netware. When was the last time you heard of the Netware running.. anywhere?

Like all survival of the species rules, this applies to software. In the software world, if you're the only solution (for now), good for you, but I'm sorry to say that inevitably an easier to use solution will emerge and take a stranglehold on your business.

Thursday, January 25, 2007

Contemplating.. struggles

Well I haven't updated this blog for a while. Not even sure if I should. This year I foresee will be a year where I struggle to grow my company. Last year I grew approx 90% compared to previous years where I grew over 100%. I have surprised even myself with how much I've grown as essentially a one man software company. According to my growth stats I'm experiencing exponential growth but I'm not even sure I'll be able to meet growth at all this year with the ridiculous competition that's now prevalent all over the web. I guess only time can tell. I'll be focused on re-developing a lot of my code that's now 8 years old or more, (back when I was still a teenager!!) to a different language altogether or even cross platform even.

Also this month will be the month where the university faculty decides on the awards of uni medals. Somehow I don't think I'm going to win the award but I've tried and that's all I can ask for. Cross my fingers.