2005-04-21

to have an email or to be a millionaire ;)

The HR manager interviewed him then watched him cleaning the floor as
a test."You are employed."He said."Give me your e-mail address and
I'll send you the application to fill in,as well as date when you may
start."The man replied "But I don't have a computer,neither an
email."I'm sorry",said the HR manager,"If you don't have an email,that
means you do not exist.And who doesn't exist,cannot have the job."The
man left with no hope at all.He didn't know what to do, with only $10
in his pocket.He then decided to go to the supermarket and buy a 10Kg
tomato crate. He then sold the tomatoes in a door to door round.In
less than two hours,he succeeded to double his capital. He repeated
the Operation three times, and returned home with $60. The man
realized that he can survive by this way, and started to go everyday
earlier, and return late Thus, his money doubled or tripled every day.
Shortly, he bought a cart, then a truck, then he had his own fleet of
delivery vehicles. 5 years later, the man is one of the biggest food
retailers in the US.He started to plan his family's future,and decided
to have a life insurance. He called an insurance broker, and chose a
protection plan. When the conversation was concluded, the broker asked
him his email.The man replied, "I don't have an email". The broker
answered curiously,"You don't have an email, and yet have succeeded to
build an empire. Can you imagine what you could have been if you had
an email?!!" The man thought for a while and replied," Yes,I'd be an
office boy at Microsoft!" Moral of the story: M1 - Internet is not the
solution to your life. M2 - If you don't have internet, and work hard,
you can be a millionaire.M3 - If you received this message by email,
you are closer to being an office boy, than a millionaire...Have a
great day !!! Pls Note: - Do not forward this email to me back , I'm
closing all my email addresses & going to sell tomatoes! Smiling after
reading is not mandatory!

2005-01-21

Responsibility, Power and Duty

Latest discussions in my current company drew some thoughts in mi mind about the responsibility and authority. I concluded that one of the most important reasons for the bad result in the company was not matching levels of responsibility power. To be clearer, I'll give some typical scenarios:

Scenario 1: manager "decides" that feature A is very important and must be implemented immediately. The developer estimates the time necessary (not precisely), but the management cuts half of it ("but our clients need it ASAP") and gives first class priority on this task. Because of the shorten time, the feature is developed using the approach "quick and dirty". Its working but some other places are possibly spoiled. After few months out in the market, the feature is not used by anybody (or less than 3% of the users) i.e. from the financial point of view it's total disaster. I leave you to guess who is blamed for this and who is not responsible at all. The same scenario happens if you substitute the feature with "awful and disastrous" bug.

Scenario 2: 3-4 cases like scenario 1 are happing simultaneously. The decisions, which tasks have, the highest priority is taken by the manager. Since of the frequent task switching and cut development time, no one of the features is delivered as 100% working properly, nor on time. Again I leave to you the exercise to guess who is accused for these failures.

Scenario 3: Since the process of collecting requirements is very poor (or doesn't exist at all), developers makes a lot of "assumptions" during implementation. Latter on, these assumptions are proven bad, but the cost to correct them is very high and they are left "as they are". This limits the product not to grow and to be not so successful as it was planned. As you see here the responsibilities and duties are much more blurred. The same could happen even with written but not precise requirements. (more about wrong assumtions and reading people's mind here )

Now few questions about responsibility, power and duty in the upper contexts:
1. Whose is the responsibly when a feature is a financial disastrous even if it's build on time and as requested?
2. Whose is the responsibility and power to cut development time?
3. Whose is the responsibility about low effectiveness since frequent tasks switching? (or may be it's not recognized that such tasks switching reduce it?)
4. Whose is the responsibility and duty about gaps in the requirements?
6. Whose is the power and responsibility to make assumptions and take decisions about unclear feature(s) instead of communication with the client? ....

Do you think that these scenarios are bad? I do, but worse is to repeat them all the time.

2004-06-30

The spirit of the tool and craftsmanship.

Part 1 - the tools and how they can give leverage our daily work.

Our tools that we use daily are programming languages, IDEs, scripts, bug tracking systems etc. How they boost our efficiency and productivity depends on 2 main factors: the worker and the tool itself. If the worker is apprentice, don't expect super productivity even if you give him the best tool available. And of course if the tool is crappy the craftsman will have much troubles performing just simple tasks.

As a convinced XP adherent, I all the time refactor the code and (try to) write as much unit tests as I can. In my office I use C++ and MSVC and at home (in my spare time) I use Java and few IDEs, so I can compare the results easily. So lets do some simple refactoring - lets take method rename. In C++ code this is a short (sometimes longer) walk in the hell. You can do this using 2 approaches: old, well known text search or using browse information. In the first case the search will give you probably hundreds occurrences in the files, but you have to open every listed file and to see the context (it could be in a commented code, if the method name is so common as GetName or GetID , only 20% or less of the references can be these that you are interested in) and then to do the renaming manually. This approach involves a lot of boring tasks - opening files, positioning in the right line, is this place really a call to my class or not, if yes - rename it, if not skip it, search next occurrence in the same file and do the steps again, and again and again ... until it's time for lunch. So half a day just for rename a method ( :-( tell this to your manager ). Ok, lets see other approach - it saves you a lot because it finds exactly the places of your class method, it's not so stupid as the text search. But anyway I have to do all manual work as well, just browse info is more precise tool and saves your time. But it's not for free - every time you compile the project, browse info is generated again ... and it's slow. I didn't counted this, but may be Compilations_count * browse_info_rebuild_time > time_spend_using_simple_text_search, so it's not clear which approach is faster. Note that I said faster, not better. There is no better, if huge amount of manual work is involved simply because it's error prone.
Now ... lets try the same in some Java IDE. It's just a developer dream. Right click in the method, choose from the menu Refactoring/Rename and put the new name. The IDE will find all references exactly to this method of this class and will ask you nicely - do you want to do the refactoring? And guess - if you say yes, it will do all manual work instead of you! Fast and not error prone! Big difference, you see. What more you can want? Hm, hay it was just a simple rename, what about more complicated refactorings like pull up method in base class, extract method, replace inheritance with delegation and so on. Guess again - there are some Java IDEs that can do all these refactorings for seconds and very, very safely. If you select a snipped and try to extract method for example, it will analyse the types of variables, the return value of the new method and will replace the snipped with a method call with appropriates parameters and so on. Don't believe it .... - so get JBuilder or JIdea (these are 2 that I'm familiar with) and try.
And this was just about refactoring. What about tests writing? There the situation is not better. In Java IDEs you can use almost the same approach as refactoring - right click over a class name, choose new TestCase and a dialog will appear to ask you which methods of this class you'd like to test. Again fast, intuitive and very, very friendly and helpful. Another page will not be sufficient to describe how painful is the same task in MSVC.
Now lets back on the topic. May be you think I sing spirituals for SUN/Java and curse MS/C++ and I'm trying to involve you in a technology/company war. Definitely NOT - don't get me wrong please. All I wanted to say is that some tools(languages and IDEs) can boost much more your performance and quality of work than others. Compared to old plain text editors that we used decade ago to write code and produce make files, MSVC much, much better, but compared to JIdea or JBuilder for example, it's .. you name it. I hear some angry voices: hay stupid guy, all these problems comes from the languages difference, C++ is much more complex and can not be refactored easy - use C# instead of C++. I'll tell you - I just don't care if C++ is more complex or not - my only concerns as a developer are to do my job properly(means high quality) and fast. If the tools help me in both directions, I will use them doesn't matter which company is behind. If they don't (help me), I don't (use them) too.

P.S. Try to guess which language and tools I'll use in my next project(s)?
insipred of these 2 publications:
The Spirit of the Tool
Aren't C++ Programmers People Too?

2004-06-18

Great! I have my own blog!

Blogs are really something very nice. The idea to have a centralized point where a person can sketch and publish some thoughts, so other people can read, comment and discuss them is very simple and.... just great. It's like forums, but there you just take part in a bazaar - laud and jerky voices, dirty thoughts spread over all topics, long and pointless discussions, the rule is "no rules", etc.
The best about the blog is that it's just mine! The simple feeling of ownership is so selfish, but so satisfying.
Anyway, I hope I will deliver some interesting ideas here, most of them about software development, but also about family and parenting, sport, lesure time, cooking ...