Thursday, July 21, 2005

Lesson #2: Know your tools

Before you can drive a car, you have to go through a long and tedious process. This is understood, after all nobody expects you to use stick transmition at the first time. The funny thing, is that car manufactures do not try to make it easier for users. The last time I have checked, ads were talking about faster, beautifull and comfortable cars. I never even heard "our car is easy to use" ad line.
In computers the situation is different. You hear all the time "easy to use and powerful tool" or "just buy our program and all your problems will be solved". I think that we are making a mistake. By "we" I mean software developers. Complex things have inherited complexity in them. They have some complexity limit, if you try to simplify things more than that limit you will get burned.
Microsoft Word is perceived as an extremely easy to use program. Launch it and start typing like a crazy monkey. You want to make a table of contents? No problem it can do it. You want to make your section titles bold? Sure. You want to change a font of all your bold text, because they are your section titles? Oops. They need to be of the same style. Oh, you didn't use nor define one style for titles. You didn't know that you should do that. Well, tough luck. Come again next time.
My point is that even with MS Word there are a lot of things that you should know. They will make your life easier, they will save your time and make your computer time bareable. Sadly, most people are not aware of that, partially, because we, computer nerds, are trying very hard to appear them as very easy to use. Sadly we are doing very good job at it.

The interesting thing I have found out during my work in startup is that the same is true about many programmers. We use CVS as our version control tool. It took about half a year until people have become comfortable with branches. Even now, after about 3 years of intensive CVS work people are making beginners mistakes. No, I do not say that they are not smart enough to master CVS. Most of them are able to implement CVS, but they just cannot get used to it. They are too lazy to invest time into learning CVS, they prefer to save their time now by asking me what should be done. What these people do not understand, is that by not learning CVS they are wasting their time. By not knowing what you can do with the tools, you are stuck with a basic functionality. They are wasting their time on a dumb repetetive tasks. One day I saw a guy doing the same operation: he changed one particular bit of identation. Line after line, with great patience and concentration. Each operation required him to make 5 different operations. I have made him a very simple macro operation replacing 5 by 1. I have saved him few valuable minutes. By stupid macro. I saved days for people by just showing them a flag option in CVS commands. I have made impossible into possible by trivial usage of grep and regular expressions. All this does not make me smarter than the people I helped. But it does make me a more valuable developer, as I can perform more tasks in the same time.
If you value your job and career,learn your tools, they will make you into a better developer.

Wednesday, July 20, 2005

Lesson #1: core people

The best investement that one can ever make in startup is brining the best people on board from the very beginning. The beginning part is very important here. Times when the company is small and nothing is done yet are very critical and shaping. You can hire a bunch of fresh graduates that know nothing about software development later and you will be ok. It might even be necessary later on, as it is hard to get a superstar singer to sing on your bar mizvah. But, hire incompetent, or just not good enough people as the core of your startup and you are doomed.

The core people lay a foundation of the future products. Decisions they make are like a planted seeds. If they are good, you will get a healthy oak. If they are bad, all you will get is a small bush. The beginning phase is very decision intensive: what version control to use, development platform, coding conventions, how formal development process should be, what documents to write and how, product architecture definitions, specs, future growth and vision. While not curved in stone, these decisions are very hard to change later if not impossible.

In addition your core team will set high standards for the other company members. Once you get into company with good programmers, your natural tendency is to get to their level and stay there. Unexperienced programmers learn a lot from core guys. Core people feel themselves as mentors and do they feel good about it. The company starts with a high entry level and continues to climb even higher.
It is always easier to get downwards than upwards.

All in all, core team might continue with the company or not. Either way, their influence on the company spirit and way will last much much longer.
Invest in your core team. Make them the best of the best. You wont be sorry about it later.