Stand still and watch the patterns, which by pure chance have been generated: Stains on the wall, or the ashes in a fireplace or the clouds in the sky, or the gravel on the beach, or other things. If you look at them carefully you might discover miraculous inventions. (Leonardo da Vinci)
 

Setting the team rules

March 27th, 2009 Communication| 1 Comment »

Teams are just small “societies” of different people coming together to work: And that is A) achieving personal goals and B) achieving the team goals. This is not an easy task. There is one basic project a team should set up: Development of a strong team statement. As I explained in my article “The Jerk is gone” we did this to have a powerful guideline to rely on when we face conflicts. I want to share those rules. They’ll work in IT teams as well as in any other workplace group of people.

1. Team Culture

  • We respect each other.
  • We try to build personal relationships to each other to foster faith and open communication.
  • We value constructive critics and avoid to verbally attack each other.
  • We treat other colleagues and the management, and also clients and partners, as if they were team members.
  • We strive for celebration of personal and team success.
  • As team members we offer help to find solutions even if the context is outside our responsibility.
  • A solution or idea which evolved from the discussion of several team members is better then the opinion of just one single person.

2. Meetings

  • We have a daily meeting between 10 and 10.15 where every team member has to answer 4 questions: What did I do yesterday? Did I accomplish every task? What will I do today? Do I have any problems?
  • Additional meetings can be called to discuss critical aspects and architectural approaches in the team.
  • All team members are on time otherwise the person who is late must rework the contents of the meeting and proactively gain and share information. Exceptions: Illness, holidays, meetings with clients or other departments.
  • If someone calls a meetings that person is responsible to write the agenda and send it to participants one day in advance.
  • No person will receive responsibilities without his / her agreement.
  • For extraordinary meetings the team will appoint somebody to take the minutes.
  • Solutions are more important then time. We finish any constructive discussion or solution finding process even if the scheduled time frame is exceeded already.

3. Communication and decision making

  • At every time there is just ONE person speaking. Interruptions and side discussions are not allowed.
  • We focus on facts; emotions and personal bias are ignored as far as possible.
  • We respect the time of other team members and the predefined schedules.
  • We first seek to understand what others really mean and try to avoid to judge them by subjective positions.
  • We aim at distribute speaking time equally among the discussion participants.
  • We respect and value the opinion and help of experts especially when they are team members.
  • We accept the company’s hierarchy of decision making, given roles and responsibilities.
  • We want to become better.
  • If a team member identifies a problem he tries to deeply understand the problem and develops a few alternatives to solve it before presenting it to the team.

Those rules sound somewhat strict and some of them seem to be to unspecific. It is hard work to establish those rules within a team, especially when there are team members who find themselves to be restricted by them. But it can be a vital foundation of togetherness to find the best ruleset for the team and having the end in mind.


The Jerk is gone

March 25th, 2009 Communication| 2 Comments »

As Seth Godin, author of several books I would suggest (Tribes, The Dip, The Idea Virus), lately had written in his blog, there is one big danger a company has: A jerk “who knows every technical detail” and who is the only one “who can fix that big machine”. I once made an experience with such an “I am the sytem!” - jerk who almost completely destroyed the positive, innovative culture of a whole company just because he felt insecure and threatened as the team grew and new products needed new technical approaches which blew the scope of the existing system. The fear of loosing some of his control was greater then the fun and motivation every other team member felt when we started to leave the past to build a new future. He is gone! A year ago! But there is still a lot of everyday trouble in handling the system he once “owned”. The lack of documentation and system architecture, the narrowly confined parts other team members worked on in the past and the complexity of the overall system needs a lot of effort for extending the system or reengineering single parts to allow more integration. This effort costs time and money and often leads to frustration within the team. But nevertheless the team tried to make a virtue out of necissity: Every team member became an expert of a part of a system and is responsible for the evolution and also serves as the contact person if anybody has trouble or feature wishes regarding that special part. Additionaly we developed a team statement which contains several rules for open communication, sharing of knowledge and the team based ownership of code. Priciples that never woulod work that great if the team did’t have the experience of working with the jerk.


Questions I ask during Job Interviews

March 3rd, 2009 Recruiting| 3 Comments »

In my current job I am responsible to interview new candidates for the developer team. Since this is the first time that I am sitting at this side of the table I had to develop my own system of questions that would lead to the informations I need to decide whether someone is suitable for the team or not.

I want to share those questions:

1. Methodology

  • What is agile software development? Do you know or have any experiences with the agile principles? What is your opinion about agile team and organizations.
  • What is code refactoring? What is it used for? Do you have some best practices how you refactor your code?
  • The topic is debugging: How do you handle bugs?
  • What is Test-Driven-Development? What is your opinion about TDD? What would you say if I tell you that I do not like TDD at all.
  • Do you know design patterns? Did you use them already? What is your favorite one? How do you learn design patterns?
  • What is AJAX? How does AJAX work? What is the difference between AJAX and Web2.0?
  • Can you handle the words cohesion and seperation of concern?

2. Thinking

  • I tell you to learn a new programming language, say Ruby. How do you organize the learning? What will you do first?
  • What would you do if I give you 5 million Euro to launch a start up?
  • What is the most important thing you want to do within the next two years?
  • What is my company, the company you want to work for, doing? How do you figure the underlying technology we’re uisng to do exactly this?
  • Which 5 books did you read last?

3. Common chat questions

  • Do you like google? What do you like about it?
  • What are current innovations in the java ecosystem?
  • It is your task to design a database which holds personal data about some million people. What is the significance of data privacy protection?
  • How did the internet change techologically during the last 5 years? How does the future look like?

4. Java Questions

  • What stands transient for?
  • What are annotations? What are they used for? What is your opinion about using annotations?
  • What are the principles of programming servlets?
  • What is the session scope? Are there other scopes? What are they used to?
  • Tell me about the life cycle of a standard java application and a servlet.
  • Is it possible to use Multithreading in Servlets? Should you?
  • What is the differnce between a stack and a queue?
  • What are the technical principles o a hash map?
  • What are Generics? How do you use them? What is your opionion about generics?
  • Describe the deployment of a Java Application.
  • What is JDBC? What is Hibernate? When do you use them?
  • Why is the main method static?
  • Which impacts does the final modifier have on object references?
  • How do you let the JVM execute some code right before the main method is invoked?
  • What is reflection, what is introspection?
  • What is the basic idea of a java bean?
  • How do you optimize the performance of a loop?
  • What is the difference of a servlet and an applett? What does they have in common?
  • How do you forward a http request from a servlet to a JSP? Which pattern can you realize by doing this?
  • What are the priciple of RMI?
  • How do you integrate some native C-code to a Java Class?
  • What is JUnit and how do you use it?
  • Is it possible to realize a Callback mechanism in JAVA?

5. PHP questions

  • Tell me about arrays in PHP? What are the principles? What do you not like about arrays in php?
  • Can you name some array sorting functions in PHP?
  • How do you write multiple variables using echo? What is the fastest way doing that?
  • What dou think, is PHP object oriented? Why?
  • What is the difference between “1″ and “True”?
  • How do you write to the end of a file?
  • How do you define constants in PHP classes?
  • Is it possible to overload methods in PHP?
  • How do you use callback functions in PHP?
  • What additional features do you think should a future version of PHP provide?
  • What is Zend?
  • What is Pear?
  • What about type safety in PHP? Any opinions?

6. Logic

  • Connect all dots using just 4 lines:
  • There is a town with two hospitals. One is very big, the other is quite small. On one day the newspaper says: 3 boys and 9 girls were born yesterday. What do you think: Which hospital is more likely to have such rates?

7. Opbject Oriented Principles

  • What is the difference between an abstract class and an interface? When do you use the one or the other? What impacts does each have?
  • What do you understand by encapsulation?
  • What is polymorphism? Can you give me an example?
  • What are alternatives to object oriented languages? When do you use them?
  • What happens when you instantiate an object?