Monday, 9 March 2009

Internet dog

    I remember good old times when in the late 90s this image appears on my very first mailbox.

    It wasn't as cute as any other jokes, but I remember that my conscience was totally agree on that: yes, said I, no one knows and nobody really cares who I am.

    Later on this message from the past is turning to be very dubious. Nowadays I'm convinced on Internet anyone knows that you're dog. Moreover be sure, they know everything about you: how often you bark, how often are you beaten by your host, how many puppies you have. The reason?

  1. Internet still makes you feel safe and carefree (It's better to say careless) about your privacy

  2. ... but becomes extremely effective in searching


    What if someone cares to be aware who you are? I was amazed how much information people can learn about me just googling my name: my profiles in social networks, my articles, publications, connections, out-dated CVs ... I'm not sure that I can memorize all those things better ;)
    How about specialized services to get information about people? Recently I have discovered PIPL.
    Oh cool, here I can type e.g. name of my classmate and find extensive information that he was graduated his college, then was hired by Morgan Stanley, then in one year got fired with some peculiar circumstances ...
Let me try to type my ex-girlfriend name: she's got married in USA and in two years got divorced (I can see it in her CVs). How about my former chief? My German language teacher? My friends? My enemies?
Do I need to know all these things?

    In most cases information is scarce: most of people (fortunately to them) do not have adequate representation in Web. Wait a minute! What if I type my name?
    Woosh! Those people who created PIPL know their job well. And if you get embarrassed with result to the right side you can see proposal to defend your reputation.
    Cool, isn't it? Have you ever though you have public reputation?

    Reputation defender will be happy to track news, messages, comments, suggestions and rumors about you from your lyceum's alumni journal to Forbes and Wall Street Journal in order to defend your reputation.

    Embracing Agile ideas I never think that openness and transparency is bad thing. And now I didn't change my mind. All you need to know is that you're responsible for your representation from the very beginning of your career and you only who cares about your privacy. In XXI century no one can expect that information told to someone or written somewhere will be not exposed to publicity. Whatever it was living journal, facebook or your profile at gay-portal.
    That's shocking, but not as bad as it seems to be at first site. Although many people will suffer from this, in most cases they are just people who are succeed in trying to be better than they are. No mercy to them. In most cases no one need to slander your name and you will have more or less adequate self-portrait in public sources

Have a nice day!

Saturday, 7 March 2009

C# vs. Java. Slight differences

So, there is a one month passed since I became Java developer ...

Long before I've started to develop something essential on Java, this language invoked very contradicting thoughts in my mind.

In early 2005 when I have started my career in IT, I've started mainly with VB and C#, but there were dozen of languages I used as supplementary: Python, Perl, PHP, VBScript, JavaScript, batch, NAnt scripts and so on. Among them Java turned to be something prominent. Since it was and is lingua franca of IT industry I extensively used literature and articles written by Java developers and architects. Even if they were created to be used by exclusively Java teams. Thus besides Anders Hejlsberg and Andrew Troelsen not only people like Martin Fowler and Mike Cohn, but also Craig Larman and Bruce Eckel became my masterminds in IT branch. Later on when I grown up enough to make presentations how to do software and how not to do I was leaning to make code snippets either Java, still being quite distant from development in Java itself. But to be honest I was never felt uncomfortable talking to my colleagues in Java. Java and C# is in fact very close to each other, but there is one more peculiarity that makes couple Java-C# very similar to language couples: C# developers normally better understood Java then vice versa.

Now when I delved deeper into Java, I realize how many peculiarities in Java are actually different: Java has larger heritage from C++ then C#.

In practice you can try to evaluate this code in both languages:


String a = "Falafel";
String c = "fel";
String b = "Fala" + c;
System.out.println(a == b);


In C# you'll have to use System.Console.WriteLine instead of System.out.println
In Java you'll get false, while in C# you'll get true. Why? Simply because Java compares addresses of a and b, while .Net compares content. You should use equals (before 1.6) and StringUtils (since 1.6) in Java to compare strings correctly.

How about casting? Have you ever tried evaluate this expression

(int)(char)(byte)-1

Experienced Java developers will answer: (byte)-1 will cause overflow, so you might expect something like 65535 on the very end. C# gets obviously the same answer, but by default C# compiler refrains to compile such a mess. You'll be kindly asked to use unchecked option on your own risk:

unchecked
{
    int i = (int)(char)(byte)-1
}


Working with numbers is very messy in Java (I will keep using references whenever I worked with arithmetic operations
Hex number 0xfa1afe11 will output positive result in C#, but negative in Java. The reason is that hex number with leading 1 treat as negative.
Floats can also challenge you: Java expression

System.out.println(2 - 1.1);

outputs 0.8999999999999999
while in C#

Console.WriteLine(2 - 1.1);

gets 0.9

NB: I must admit, that in .Net trouble with floating point operations are not finally resolved (MathLab and Maple in any case do them better)

Java has special class BigDecimal to perform operations with additional precision or value, but you might be careful using them either. Don't you know what is the difference between two following expressions in Java

BigDecimal dec1 = new BigDecimal(.1);
BigDecimal dec2 = new BigDecimal(".1");

Can't you guess?
Oh, you might be surprised that first one will output huge ugly number

0.1000000000000000055511151231257827021181583404541015625

Gurus highly recommend to use constructor BigDecimal(String) and not convert primitives to BigDecimal directly

Expressions like i = i + k; and i += k; are not equivalent in Java, although many Java developers think they are.

In any case my way in Java has just begun and it will take couples month until I will be able to cause another overproduction crisis in IT ...

Friday, 20 February 2009

Motivated by challenge

    Today I was meeting a customer as the representative developer. Fact that I was invited against all odds flatters me much: it looks like representatives were carefully selected by our management. I would be probably not frank, if I say that there was either pure truth or barefaced lie. And for sure exposing here what exactly was wrong would be incorrect. But to my surprise all lies became innocent comparatively to one tremendous truth that I heard today.
    Customer representative asked our manager Ron how we keep our people motivated. And the Ron’s reply was like this: our people are usually inclined for challenges. It is like part of our national identity. Our people always want more and more “interesting” tasks.
    Was he wrong? I wish he was. I would like to see my colleagues more pragmatic. This contradicts some values, I used to follow. But I have never heard about IT business dismantled because of some evil will: it is always good intentions which put business on the way to destruction.
    But he was more right then wrong! In reality every single day I confirm common truth: there are lots of people who are motivated by challenge. You can easily recognize them by their ambitions and deeds: They always commit before estimations, they overtime, they suffer, they estimate, they do, but then ... they commit again.
    Dear Ron, I must admit, I’m not a person of that kind, although I still like challenges. Sometimes I can afford to resolve easy task by a difficult approach, just because I like it, but a difficult task will be never resolved by even more difficult approach: I’d better apply easy one for a difficult task. And I argue that challenge motivates people. IMHO, it’s responsibility that motivates them.
Q: But what if people have spoiled sense of responsibility? And what if they not motivated at all?
    I guess this book can be guideline for people who would like to learn more about motivation. Who wants to know will know.
Q: What about people who are not motivated to learn something about motivation? ;)

Monday, 26 January 2009

Advanced search for advanced users

    German language is very famous for giving one-word description for very peculiar things. Advanced search functionality which forces user to fill several controls with different ranges is not exclusion. It can be described by word benutzerunfreundlich (User unfriendly). This is very good word because its pronunciation is as unfriendly for English-speakers as substance it describes.
    About five month ago I’d met introducing this functionality with a great skepticism and finally yesterday advanced search functionality has been finally removed from one of our products called Lupris.
    Lupris is system to perform research in goods data base to mine data for another system called XUT. Main feature of Lupris is browsing large amount of data. It also allows inputting market notes to the goods. Data records about goods are quite inhomogeneous and can belong to one of 16 different types. Some of those attributes like “Price”, “Short Name” and eventually “Type” are ultimate for all. Others like quantity for one type and weight in kilos for another can be treat as the same fields and merged in reports.
    Advanced search pretended to be good addition to existing full text search: product owners decided to create powerful search for advanced users. And eventually this functionality appeared to be poorly tested, badly developed and unused.
    This is very usual how so called functionality for advanced users terminates. But why advanced search is so unpopular? I'd better explain more generally: why functionality for advanced users is so unpopular? During my last visit to customer, I discovered that actually advanced functionality in our system already unknown to end-users! I have several reasons for that:

  1. In complex systems even advanced users are often advanced in one direction, but very naïve in another. That’s why advanced users rarely have common definition how things like advanced search should look like.

  2. Advanced users are rare. Unless we are are talking about usual enterprise systems, not something very specific or software development tools. Otherwise they are simply outnumbered by common users, which will find advanced search functionality at least useless.

  3. Among 10 advanced users there should be one even more advanced who will blame functionality in any case.


    In fact we should not prove why functionality for advanced users won't be used, but vice versa:
Before introducing functionality we should prove that it will be used

    Statement that advanced functionality would be popular one day is implied from very dubious assumption that every common user wishes to be advanced. That's not true at all: even for people who uses computer on daily basis.
    From technical point of view there are even more reasons: E.g. advanced search is very difficult to test and for bug fixing. Practically if your advanced search form has 10 input fields there should be like 100 possible cases just to conduct surface test of happy path.
    I have good example how quite large and successful company had burned its fingers on that. Microsoft has hundred of millions users and millions of advanced users and probably could count on strong community of advanced users, but their bid was IMHO wrong when they created search companion in MS Windows XP
    They were even forced to introduce Windows Desktop Search as something more usable. And since then many people still believe that advanced search can be usable an masse. XUT and Lupris product owners still appreciate advanced search and promotes it in XUT and other products within our organization. Ironically, they all use Apple, Sun and prefer open source products having apparently strong anti-Microsoft sentiments, but still repeat the same way of thinking. It reminds one of the suggestion about Microsoft
Can’t Live With ’Em and Can’t Live Without ’Em

Thursday, 27 November 2008

Project evaluation a la carte

    I work as support administrator in huge outsourcing company. Team is big and dynamically growing and pretended to be big and happy family.
    I'm not very ambitions in career, indeed some of my mates are already occupy very prestigious management positions. Normally, I'm trying to avoid responsibility I can't control. I believe that most of people in top management NEVER control things, they are responsible for. But believe that I can do better then they is really phenomenal.
    Story begins in that nasty autumn day when manager said that we supposed to keep all tasks estimated planned for release in order to improve our proximity.
    Looks pretty simple for project you might have been working on, but I would like to bring your attention to terms marked in italics.
    Keep estimated doesn't mean to estimate just once: it means everyday estimations should be file.
    Release means not just single iteration, but all bunch of tasks from all iterations we planned or even didn't yet planned.
    Proximity? I actually didn't catch what the hell is that ...

    My answer was very rational, but disappointed manager quite hard: he told that I should elaborate way to define alternative approaches and insisted to have meeting dedicated to my response where I should have explained situation to the team leads. Actually my first response provided certain kind of workarounds for this: we can make releases shorter or we can make full estimation just once and then concentrate on support tasks. Otherwise we spend more than 20 hours a day just for estimations.
    I have conducted the meeting, but and made the same conclusions about situation, all other team didn't have so many issues, they were incoherent and releases where much oftener, but they supported my points and we closed the meeting.

    I was very surprised when suddenly I saw meeting invitation regarding proximity in my calender scheduled to 6 PM. Oh, God, did you forget how much time I spent on this?

    The meeting was eye-opener for me about how projects within our corporations are evaluated by customer. You know once per quarter we have so called evaluation questionnaires, where customer put marks from 1 to 5 to 8 different nominations. Proximity is one of those nominations and we get awful mark (2) for it. 2 means less then expected, so our proximity was expected to be better then it is.

    Team was very curious about this issue (in fact we had no other choice) and kindly asked departments head who also attended this meeting what is going on and how do we measure proximity?

    Well, we were explained that main goal of our meeting is to collect ideas how to improve it and our manager has already requested from customer explanation why proximity is was estimated so poor. Here is the letter:
Dear Donnie,
    Thank you a lot for filling evaluation form of our NTSR project!
    Could you please give us explanation what is proximity and what team is responsible for reducing proximity ...

    If you give us more extensive information we will put our efforts to find out why proximity is so poor and elaborate plans how to improve it.

Respectfully Yours,
    Julius Eiche,
    PM of NTSR project



    Ok, people, so what we can do with it? Donnie's reply was quite obscure, so it doesn't help us very much. Let us thing about this.
    Well proximity in Wikipedia gives us certain answer: proximity is ...
    Wait, wait, wait, wait! Do we really have no perception what the proximity is? Evaluation form is standard for all project in our organization! And it's not a first time it was introduced to the customer! Actually our customer put marks for proximity already several times ...

    Our manager was on top: he used so peculiar phrases to explain how important and difficult his job is. But, how about the result? We have no information about thing that has major influence on our project! We have nothing else that has such significant effect on the project destiny.

    Suddenly I realize that anyone can be not worse manager for our project than Julius: he has the same idea about evaluation as we all. Only difference is that he new about them and finding out how those measurements have been performed is primary task for any manager.
    Now I don't believe in managers and believe that if we got mark for any other nomination (tolerance, productivity, proactivity and so on) the reply would be the same: Dear Donnie, we are to stupid to understand what a hell that is. Teach us and hope that we will do better next 3 month.

    Meeting show me how deep problem was. In fact I'm quite anxious about 2 things:
- getting me to find out what are all those values in evaluation table
- requesting what else our managers have concealed that can be strike us so badly.

Tuesday, 18 November 2008

Corporate ethics. The guideline or the attribute?

Since I have moved from European company to American one, I never experience any cultural shift between two organization. In fact I didn't believe in so called "corporate culture". I'd rather believe in "corporate superstition" meaning by that usual way how people there used to get things done. Only thing that was changed for me was using rather American English than British. So now I write "color" instead of "colour" and try too update my written text and speech accordingly to American traditions.
In the aspect of team behavior nothing was going to be changed: Our team was planned as very agile and egalitarian: no managers, no subordination, no strict policies. We were pretending to the team of well-motivated professionals. And what I had seen there had indeed impressed me: team leaned to be unique within large organization. So I made my final choice voting rather to the team and people there than to organization as a whole.
Soon after my start I was told that our company is well-organized, modern and has some set of things that recognizes it as something special. I didn't pay much attention to this again: all things pretended to be informal, of course any company wants to recognize itself. "We are unique, we are the best". But they look like too isolated from each other.

And indeed it lasted like this about 3 month. Then things started to get changed gradually but steady: now we have at least 2 "pure managers" (who refuse to do any technical tasks) and 2 semi-managers (who supposed to do lesser technical tasks, but essential part of efforts are going to be spent on some sort of management).
I used to overtake some management tasks even at my first job, considering those tasks as inevitable expenses in order too keep whole team free from such routines. And eventually I can see that I'm pretty much successful in that: here I became one of those two semi-manager and unstoppable power pushes me to be even more distant from technical tasks.
Concentrating on management tasks, which include large amount of inbox and outbox items I began to suffer from lack of understanding the corporate principles.
Today the manner how I hold negotiations had been condemned by my boss. , but for me they were to trivial comparatively to things that was done in team by local managers. I was warned to not use informal lexis to not see and was informed about how it is had to be done within organization (oh, God, they spend so much time and efforts to create presentation for newcommers how to do such trivial things like sending mail). I agree with all pointhere, but anyway there are few points that make me furious about what's happening in our team
* They are breaking moral rules that seems reasonable for me: for instance, it's considered to be correct if higher manager sets responsibility upon lower even if it's not agreed with the latter.
* Those people are to idle to get things done. They will rather delegate to you creating reports even if they can do it more efficiently and faster
* They consider watching somebody meeting rules and sending important mail as attribute of their power.
In my professional life it was more critical to be honest with people and be direct rather to be polite. It doesn't mean to be not polite at all, but there was necessary to be so anxious about that.
Unfortunately my resources are exhausted to change the hierarchy of management that was raised here, I have missed already chance to keep team agile, and only thing to do is too keep Otto von Bismark principle:
Be polite. Even when you are declaring war.
That makes sense. So I believe in my talent of automation and self-learning: in a week or two I'll be polite, tactful, friendly and gentle ... at least in outbox :)

Tuesday, 4 November 2008

Thoughts about fixed-priced projects

Negotiating is domain area, which for most people is much more complicated to deal with, then even the most challenging technical task.
Once during one of our Agile club we have discussed fixed-priced contracts and applying agile methodologies to them.

This was quite hot topic: audience consisted of mainly agile adepts, but the projects they were involved indeed where fixed-prices.

In generally that discussion is not worth to retell it entirely, but there were some thoughts that may be very much valuable for me.

1. Above all, fixed-priced projects are normally more expensive and that means they are potentially more lucrative for executor (for IT company or team that works on them). It's a high price for professionalism. If I were millionaire I would rather have 100% service for 100% price:
I don't need analysts, testers, QA, IT department from my side to support YOUR development. I don't care if it's 400% more expensive: just give me entire calculation and risks and I will put your proposal under consideration.

So team has a good opportunity to provide product owner from their side and to make fair product for good price.

2. Commit or not commit that the question.
And all risks should be calculated before project is started

Here I have exposed one more thought: can we reuse that approaches that is used by venture capitalist when they do their business in IT
Unfortunately not: normally venture capitalists' approach is to be aware and to be acquainted with people: but they have money to take over risk, we don't :(

3. Fixed price project can be conducted as agile projects, but all necessary infrastructure should be provided by executor.

One of my colleagues proposed idea to specify if customer is opened or not. So if he ready for communication that better if he is not.

I also had thought about that: but I'd rather just exclude projects that depend on single non-responsive person as not good for me.
Just make me happy and don't ask any questions.

If your customer is large organization it's not a big problem if they are remote and not responsive. I've seen so many times when customer's representative not provided enough analyst or information about their product or requirements. But I have never seen customer that forbade their coworkers to speak with our coworkers.
Even in the worst case you anyway can talk with them, have discussions, drink bear or date their office managers.
You do have chance take information about how to make them happy (unless your customer is not Jesuits Order).
The costs of all this is a different thing. But since account management has word "presentation costs" normal business used to work with them, so IT business also have to.
So, viva forever! :)