October 24, 2006

A Developer-Analyst Hybrid

Yesterday I had a discussion with my co-workers about developers, analysts and overlapping of their tasks (inspired by an article from Mr. Angry). We were not able to decide if it is worse to have:
  • An analyst with no knowledge about programming or some other (corresponding) skill and knowledge or
  • A developer with no will or interest for client’s requests
It’s really hard to tell. For example, I know an “analyst” who simply forwards all emails and notes from clients to developers, thinking, I guess, that her job is done. Maybe I’m wrong here, but I think I know a better way to do this. It’s called: automatic email forwarding. I mean, it’s:
  • Free (doesn’t ask for salary and bonuses)
  • More reliable than manual forwarding
  • Fast
  • Never sick or absent
This is an extreme example but I had to tell the story because it’s the truth (!).

It would be nice to have analyst and developer in one person. Often, for various reasons, it doesn’t work that way.
Nevertheless, there should always be a tendency not to have “pure” analysts and “pure” developers in the team/company. Here are (some of the) reasons why.

Main problems with developers detached from reality:
  • Problem zero: communication overload. An analyst has to explain everything to the smallest detail about functionality that needs to be implemented. He has no confidence that any work will be done correctly without his supervision. I had a colleague that had to tell the developer that upper left corner is no place for a “Submit” button. I’m not kidding. Imagine the communication necessary to finish the job completely!
  • Not learning business processes as they go along with development. Analysts will have much more work to do if a developer doesn’t learn the business processes. Every time some bug appears in the code which was written a month ago, analyst will have to explain all over again about things that need to be done. The reason is simple: if you really understand something, you remember it more easily even if some time has passed.
Main problems with analysts detached from technology:

  • Promising wonders to end users. Analysts should know at least what information they should get from developers before they say it’s OK for something to be implemented.
  • Not being familiar with data structures. If analyst doesn’t know enough about these, his job will be very difficult. Chances are that he will have to take one developer with him to each meeting with customers (which a waste of developer’s time in most cases).
  • Leaving their problems to developers. If they do, it means a developer is doing a significant part analyst’s job. (Maybe developer should also get a part of analyst’s salary.)
Pushing developers to think like customers

Analysts should always encourage developers to learn the business processes and to learn why customer needs what he needs. If the developer refuses to listen and just wants detailed instructions, don’t give up and explain the processes to him/her when ever you get a chance.Team leaders should inform team members that a complete separation of development and analysis tasks is not acceptable because it adds effort to the project.

Pushing analysts to think like developers

This can be especially difficult because it might take months of even years for someone who is completely unfamiliar with the technology that is used. Of course, there are some people that work excellent with customers, and it would be a shame to lose their talent, but making analysts from them does not happen overnight. It takes companies time and analyst-to-be commitment. If either of those two things is missing, it will be very hard to get results.

October 20, 2006

Software Project Soft Skills Guide: How to Be Proactive?

Working in a team combines two opposite things:

  • The need for synergy with people and conforming to the needs of the project
  • The need for self-improvement, grabbing carrier opportunities and outshining others
In project-oriented companies, showing your capabilities is possible only when you work as a team with others. By showing “too much” or, better to say, attracting too much attention of your team mates and superiors can bring problems to your relations with colleagues and thus endanger the project. I saw some individuals who were not particularly interested in the project as long they are the kings/queens of the county. Such an individual annoys the team and destroys team atmosphere. Also, this behavior is hardly professional. As the matter of fact, it’s childish.

If, however, you don’t show what you’re capable of in some “graceful” way, you will:

  • Miss a lot of new challenges
  • Not get to choose what you actually want to work on
  • Work on boring projects
  • Not have arguments for career promotion or salary increase
Maybe accomplishing results listed above looks impossible to achieve by simply trying to be more proactive during your working hours but I’m certain that when being “gracefully proactive” – wonders can happen. Situation is rather complicated and requires some really soft skills. But if you just sit, wait and work on whatever you are assigned to, you will do what others decide, when others decide and at the end look like someone who doesn’t have a will to work on anything at all.

So here are some of the things that I did and that really helped me in many aspects:

When coming to new workplace, scan the environment and people to find out what is your realistic position in the team and the company in general.
It’s not particularly useful to believe that you are the best programmer, designer, manager or whatever if that’s not the truth. If you are not realistic, it’s very hard to improve.
If there are some people better than you, it means that you can learn from them, compete with them and eventually improve yourself. If there isn’t anybody who’s better than you in at least some aspects than such a company or a team is a waste of your time.

Cooperate with everyone but try to work in a team with the best.
After you have made assessment of all team members, try at all times to cooperate with the best. Don’t make clans with people you don’t respect. Be polite to everyone; be decent even to the people you don’t respect too much; do whatever is necessary to finish your tasks; but always try to come one bit closer to the people from whom you can actually learn something. This is also the place where interesting things happen. If things are not interesting, these are the people that will make them interesting.

Take crappy tasks! As Tom Peters suggests: if you are at the bottom, take the tasks that are of no interest to others and make something special out of it. This is especially true for software projects because there are lots of tasks that are of no interest to anyone and can be done much better than they were done in the past by someone else.
A good example is writing end user documentation. In companies where there is no special team responsible for documentation, usually someone is temporarily assigned to this task simply because the product cannot be delivered without documentation for the end users. Or someone is hired part time to do the job. A person who feels he or she is not appreciated enough can take this task and make best written, best looking documentation in the company for a shorter time than anybody expected. This way you show to others that when you take something as your responsibility, you deliver things better and faster than others.

Well, this is an example to someone who has just started to work in software industry but it can really be applied in at least one additional case. It is the following: when you start working for a new company, people you work with not necessarily:
  • Were present on your job interview,
  • Know what your skills are,
  • Know what you want to work on,
  • Know what you worked on before
… And, sometimes, they don’t even know why you were hired in the first place.

In this case, you might be in a position where your team leader makes all kinds of assumptions and assigns you to something completely different from what you expected. What to do?

  • Do the tasks you were assigned to
  • Find something no one wants to work on (like unit tests ;)) and make it perfect
Find ways to talk to your superiors and find out what projects are coming next.
There are always rumors about new projects and it’s definitely good to know what’s coming next (even if it is something to avoid!). The person one level above you in the company hierarchy or maybe your team leader, probably knows more than you do about new projects that are coming. Talk to anybody you can. You will be surprised how much information you can find if you simply – ask! I think no one will punish you because you are “too interested” in future projects. OK, this one might be pointless if your company works 5 years on the same project, but in most software companies, things are very dynamic and there are always new things coming. Find out what might be interesting.
If someone gives you such information, and it is really something that you like, show your interest openly. Discuss about it. If you don't know enough, read and learn more about it so that next time this subject comes along you would be able participate in a conversation more easily.

Don’t rely on others, let other rely on you.
Try not to expect for others to get you out of trouble, even if you are new in the company. Do whatever is necessary so that you can finish your tasks on your own. Also, if others need help, do whatever you can to help them. Everyone needs help sometimes. That's the essence of teamwork. But there is a big difference between people who take their tasks seriously and the people who expect other people to help them by default. Make sure you are in the first group.

Use your sense of humor (if you have one).
People with sense of humor are usually perceived by others as smarter and more dynamic. If you are new in the company, colleagues will accept you more easily and will be happy that you are a part of the team. (If they are not, leave the company. ;))
Every new employee that comes to the company shall more likely approach to the team member who has a sense of humor because he or she assumes that such a person is more open for questions and help (or breaking unpleasant atmosphere). This way you are always somehow at the “center of things” because “things” actually happen where people interact with each other.
If you don’t have a sense of humor, for heaven’s sakes don’t use it. I mean, don’t use that entity called humor only by you and by nobody else. I happen to know at least one person who has almost no sense of humor, but is much respected team member and successful project leader. He doesn’t pretend to be something that he is not and that’s enough. It’s not the end of the world if you are not funny; just get over it!

Be yourself. The best edition of yourself.
This one is maybe hard to explain. We are not the same person every day. Some days we are full of energy, happy, constructive and some other days we can be nervous, confused, and angry and whatnot. At work, always try to be “better side of yourself”. Always try to say and do the right thing because you most certainly have the capacity for that. Everyone has.
I believe this can only be done if a person is well organized. I’m referring mostly to time management. If you always under pressure and always running somewhere, you will not be able to control your reactions. You will not be able to think about what you do and sooner or later you will offend someone just because you were reckless at the time. There is no need for that to happen – you can stop it. Find some time management resources on the web and act on it. These skills are definitely not only for managers, everybody needs them.

If some project interests you, join the team by working on whatever is necessary.
If the team accepts you, you will most probably get new, more interesting tasks. Even if it is because someone got sick, you will be able to show your potential.

Make sure others see your progress.
I think advertising of your work is very important. I know people who really don't need this "advertising" at all (because they are doing excellent job) but they do it anyway. That’s because it really helps. What’s the use of working more and better than others if no one sees it?
The trick is: how to do this so that it doesn’t look like you are showing of? The answer is: drop small chunks of information to your superiors and colleagues who don’t know what you are working on. Never talk to long or too loud about your tasks and results, but mention it through some other stories. Mention also the results of others. Lots of things are happening in every team and company every day; you can’t expect someone will have the time to actually explore who did what and when he or she did it. People need information and you have to give it to them.

If you have a lot of Complexifiers in your team/company, be the person who simplifies things.
This way you will become a catalyst of change in your team. If you have ambition to become a team leader, this is especially useful because people will look at you next time something is not clear. In software development, thing often get too complicated. That’s why Simplifiers are very important persons in the team.

Get things done.
Try your best to reach the deadlines you said you would reach. That is what counts to your team mates and your superiors. Deadlines are very important. Don’t overanalyze and gold plat things. Just finish and inform everybody that it’s done as planned.

There are few more things to add. With practices stated above one has to start as soon as he or she comes to a new working place. This is not because of the new chair you are sitting on, of course, but because of the new people you are now meeting for the first time in your life. As soon as you come, people start to size you up and they have a natural need to form a clear picture about a newcomer as soon a possible. I don’t think that a lot of people do this on purpose. It’s just something that we all instinctively do. But the problem is, this “picture” can be created in the matter of weeks or even days but then last in peoples heads for years. It’s very difficult to change it, no matter how hard you try.
When I got my first job, after graduating from university, I made many mistakes with many people, including my superiors, of course. ;) After a year or two I have improved in many ways and tried to fix the errors that I did in the past. Nevertheless, my colleagues had that “old picture” of me and it was very difficult to change it. I wonder if I succeeded at all.

People do not change often and when someone sees that you have changed, even if the change is positive, it somehow looks staged and fake. It’s like coming to work every day in your jeans and T-shirt and one day decide to come in your best outfit and a huge lady hat. OK, maybe that’s not a good example of a positive change… But my point is: it looks as if you are suddenly trying to be something that you are not, and people don’t like that.

October 06, 2006

Difficult Personalities, Part 2: How To Deal with Them

I’m not saying that I’m an expert in overcoming situations that outcome from problems stated in the previous post. On the contrary, this is something that I have always had problem with. “Not to explode” and “Not to get upset” were always challenges for me. Exploding in such a situation, I think, is the worst thing one could do. That is why I always observe what other (smarter :) ) people are doing in those circumstances; how do they behave and how are they dealing with the situation.

Situations can be different, but some best practices I often use are the following:
  • Concentrate on constructive issues (resolution of the problem)
  • Be deaf to personal insults. Never respond in the same manner; no matter what.
  • Avoid emotional responses and stay professional (bite your tongue if necessary)
  • Wait for the other person to come down before you continue with that conversation. In the meanwhile stay calm and don’t respond to provocations.
  • If you can’t calm down, leave the room and return in 5-10 min when you do.
  • Refuse to discuss about things that are of no use to you and the project you are working on.
  • Stop any useless discussion as soon as possible.
  • Afterwards, act as if nothing happened and treat this person in the same way you did before the “incident”.
I don’t know about others, but for me, this last point is the most difficult one.

Difficult Personalities, Part 1: Can One Person Ruin The Whole Team?

Project manager certainly can. Project manager can ruin whatever he sets his mind to: project, project team, whatever...
Can a “regular” team member ruin the whole, otherwise healthy, team? That’s another question.

To explain this little bit better. It is a sad truth that there are actually persons who have so many professional flaws and flaws in their personality, that they are actually a real threats to teamwork and, for that reason, a threat to project success.

I’m not talking about incompetence. Incompetent team member is only a gap in the team. Problematic person I’m talking about is a person who makes other team members suffer because of his or hers unprofessional behavior.

Of course, if this person was incompetent and also completely useless to the team or the company, than he or she would be easily removed from the team. At lease that is what experts prescribe in such cases. The problem is that, often, persons in question are, for some other characteristics, extremely useful for the team and the company. In those cases it is very difficult to say weather the benefits are outweighing the drawbacks.

In bigger teams, people usually don’t suffer too much because of one person’s behavior.

If a team consists of few persons, than I would say that both damage and the benefit from such a person are significant and it’s very difficult to decide what to do. To overcome problems, two things have to be in place:
  • Other team members have to cooperate and get along well above average (even if we are talking about two or three persons only). I have actually seen that this alone can reduce the destructive influence of a problematic team member.
  • Manager has to at all times provide support to “endangered” team members by stressing that company doesn’t approve unprofessional behavior - no no matter how indispensable you are for the project.

October 01, 2006

Motivational Posters in Foreign Languages and Their Impact on My Productivity

A lot of things have need said about “Those Damn Posters and Plaques”.
For example here.

But in my company, we have motivational posters in foreign languages (namely German), which are not understood by at least half of the employees in the company, including me, because… we don’t speak German! At least not good enough to understand those posters.

And so we have nine pictures, each representing some noble practice, for example: “Initiative” (probably!) or “Pride” (maybe!). I am not sure if I understand any of the words on those nine pictures, even though someone “explained” them to me at some point.

In general, the practices on the pictures are really supported by both upper and middle management most of the times so it’s not nice to complain about that. But why are they standing there if half people don’t understand them?!

You can only imagine the impact on my productivity.

Customer-Oriented Deadlines

What I mean by the phrase “customer-oriented deadline” is the following…
It’s when customer says:
- We absolutely need this until 1st of November 2006.

And some upper management genius, after 3 seconds of thinking and detailed planning, answers:
- Ok!

On any project, I think almost everything has to be customer-oriented. But if something has to be non-customer-oriented it’s definitely a deadline: deadline for project ending, deadline for any task on the project.
If you make a good estimation based on facts, with help of people who actually do the tasks, even then you are going to make mistake weather you want it or not. If you don’t make estimation at all, and in fact don’t even know what the concrete tasks are, how smart do you have to be to realize that you are not going to make it anywhere near to the deadline you promised to the customer?

I am not talking here about that situation when project manager deliberately shortens the development cycle so that people would “work faster”. I will leave that phenomenon for some other time. I am talking about the case when one doesn’t have what it takes to say “No” to the customer.

I’m currently witnessing this: it was agreed to finish entire system for 3 months, with 5-6 men working on the project. The number of people is fine and system is not to be developed from scratch. A lot of functionality could be reused from other projects, but:

- The new system is for another country; meaning different laws, regulations etc. (“How different could it be - we are neighbors!”).
- Some modules will be completely different, and these are the most complex in the entire system.
- Requirements specification missing, except what modules are needed (“Let’s hope for the best!”).

Now they are working as if everything will be finished. It’s ridiculous. Some team members, who are either inexperienced or just blindly following orders, don’t even realize that it is impossible.

I said to one of them:
- You, of course, know that you, as a team, are not going to make it until that date?

My other (very funny) colleague said to me:
- You know, you were not supposed to say that aloud. :)