Team Member Software Engineer

Introduction

Hiring a new team member for a development team working with scrum is not an easy job, although hiring a new employee is a hard job but hiring one to work in scrum team is harder as the new employee should meet the requirements for a scrum development team.

The challenge in hiring new scrum team member comes from meeting 3 kinds of characteristics which are Technical Skills, Personal Skills and also to meet scrum team member characteristics.

This topic had filled my interest for sometime and i find that for the Technical skills part it is up to the project/product requirements, however for the personal and scrum characteristics i had to dig deeper to find what i think the right answer

I put together all the characteristics in a single mind Map as you can find in the image, however i would like to mention before listing them that for the personal characteristics i have tried to follow what mentioned by Jack Welch in his book Winning, and for the scrum i have tried to pick some of characteristics mention by Ken Rubin in his book Essential Scrum and for the technical skills i put an example from a case i have met. This doesn’t mean what listed down here is exactly what i have learned from their books but i have twisted some of what i learned to suite the case i worked with.

Technical Skill:

The technical skills comes first from my point of view as it shows how the candidate fits for the responsibilities waiting for him, if the candidate doesn’t fit for the technical responsibilities required, then he will be a load on on his team.

Personality:

People are not like machines specially for the software industry, we can’t ignore employee personality and how it reflect on all the sides of the work. Although there are a lot of characteristics to measure to evaluate the candidate’s personality, but i only see the following are the most important from the team perspective.

The 3 Acids

The 3 Acids, are the characteristics the candidates Must have, if you find one of them is missing don’t even try to hire him:

  1. Integrity : which means the employee will tell the truth, keep his words, take responsibility for his actions, admit his mistakes and fix them.
  2. Intelligence: Intelligence doesn’t mean education, but intelligence means knowing what he is doing and work smart to do it.
  3. Maturity: one big mistake when people try to measure maturity is to link it to age, maturity has nothing to do with age. however maturity will appear as how to handle stress, ups and downs, and how respect other’s emotions.

4Es and 1P

For the following personality characteristics it is hard to find one candidate that had a hundred percent of all them, however you have to try to balance between them to best match your work environment.

  1. Energy: Energy here means the positive energy and that the person is self-energized, self-energized employee usually will be self motivated and will stand against the setbacks and often will be able to handle stress. also self-energized employee with little support can convert challenges to opportunities. From my point of view this characteristic is a must.
  2. Energize Others: Which means the employee has this magic ability to transfer positive energy to his team and even to all the company, employee with this characteristics with little support from his leaders can act like a positive energy hot-spot in the team. Although this is a very nice to have characteristic in the candidate but unless you are hiring this candidate to be a leader you can hire the candidate without it.
  3. Execute: Sometimes you can find employees with the required technical skills, positive energy and every wonderful characteristics but after planning and starting the job the task never completes, simply some people can’t execute they don’t have this skill to get things done. In some cases you can depend on the leader to help that employee to get things done. however if you are hiring for senior position or a leader avoid this candidate.
  4. Edge: Simply Edge is the ability to take decisions, which means when the situation is hot and decision must be taken now, he can consider the circumstances and take the decision. as the previous point if you are hiring for senior position or a leader then this characteristic is a must.
  5. Passion: People with passion are people who care about their colleges, employees or friends, they are people who love to learn and grow and like to do so with their community. they affect positivity in the team.

Scrum Required Characteristics

The below characteristics is important when you are hiring for team working in scrum, as scrum by nature collaborative methodology in which the team members depends on each other to complete the team’s goal.

Self Organized

When it comes to scrum, the development team member is the one who will decide how the tasks/jobs will be handled to achieve the sprint goal, so it is mandatory for the scrum development team member to be self organized. In scrum the manager or leaders responsibility to only provide the environment for the team members to work in the way the team member see fits to achieve the sprint goal.

Committed

The scrum team and so the scrum team members are committed to the sprint and team’s goal. So a team member candidate should a person with high commitment to his tasks and goals. if the candidate is not committed then all the team will fail and his attitude will soon spread in all the team members because they can’t achieve the goals with one member not committed.

Focused

The scrum team member should be able to focus on the current goal the team trying to achieve, once the sprint starts the development team only target is to achieve the sprint goal in a reasonable pace, to do this the team member should be able to focus on the the tasks on hand and know how to avoid the distractions.

Musketeer Attitude

Musketeer Attitude or all for one and one for all reinforces the point that the team owns the responsibility to achieve and complete the sprint goal. And they achieve this goal as a team they win as a team or they fail as a team.

So the candidate should be a good team player, he can depend on his team and they can depend on him to achieve the team’s goal.

You may find a candidate with good technical skills and personal skills but he is a specialist who prefer to work alone, try to avoid this candidate if you are hiring for a scum development team.

Stable

Long lived scrum teams are usually better in performance than fresh teams, and team takes time to know each other and how they can depend on each other and build the mutual trust between the team members. So when hiring candidate for scrum development team try to hire a candidate that you see he will stay with the team for the longest time. if the candidate usually changes the company and jump from place to another so try to avoid hiring him for scrum development team.

Long lived scrum teams are usually better in performance than fresh teams, and team takes time to know each other and how they can depend on each other and build the mutual trust between the team members. So when hiring candidate for scrum development team try to hire a candidate that you see he will stay with the team for the longest time. if the candidate usually changes the company and jump from place to another so try to avoid hiring him for scrum development team.

you can access the HttpServletRequest object inside a CXF interceptor or from a CXF Message using the following:

HttpServletRequest request = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
String IP = request.getRemoteAddr();

Last 2 days i was facing a problem with CORBA environment, as the client was providing us incorrect corba names. Running the application and load everything to get a not found error was a big deal for me (lazy i am ).

so i have developed a very small program that checks the corba name in the corba Naming service.

the usage of the program is as the following:

Usage: java -jar corbaPing.jar host port namingService contextPath

Example: java -jar corbaPing.jar 192.168.122 20000 NameService all/product/bundle/manager

if the there is something registered in the provided context path, you will get the IOR for this reference. or you got an error for the problem you face.

you can download the jar from this URL: http://www.nile-sys.com/tools/corba/corbaPing.jar

i wish this small tool could make your life easier.

Sometimes you have to use the Simple Language to determine the endpoint URI in the Spring DSL.
For example suppose the input message contains the (to endpoint URI) in an attribute called “targetID”. if you used the normal definition like the following:

<route>
<camel:from uri="vm://add"/>
<camel:to uri="vm://${in.body[0].targetID}"/>
</route>

You will end up with Camel trying to create a queue called “${in.body[0].targetID}” not its value.

in order to avoid this you can use the EIP Reception List which allow you to define a set of recipients, and inside the recipient list you can use the Simple Language as the following:

<route>
<camel:from uri="vm://add"/>
<camel:recipientList>
<camel:simple>vm://${in.body[0].targetID}</camel:simple>
</camel:recipientList>
</route>

in this case the Camel creates a queue with the value of the Simple Expression.

In Java you have Many tools to schedule job to be executed in exact time in the future, here is a list of tools I have learned and used:

  • Open Symphony Quartz
  • EJB timer service
  • Java built-in Timer Task

If your are working in a web application that supports EJB 3.0 I strongly recommend using EJB timer service for the following:

  • Transaction support.
  • Persistency.
  • Repetitive executions.
  • No need for 3rd party implementations- the service provided by the EJB container
  • Ease of use.
  • Rich interfaces.

If your are working in standalone application with no container support I recommend Quartz for the following:

  • Using separate schema with support for many RBMS such mysql, oracle …etc.
  • Persistency.
  • Repetitive executions.
  • Rich interfaces.

Regarding using the Timer Task I’m not recommend using this utility at all in large scale web applications for the following:

  • Does not provide any persistency, so simply if your application terminated for any reason, all your task are gone.
  • It is not transactional.
  • This class does not offer real-time guarantees.
  • Internally, it uses a binary heap to represent its task queue, so the cost to schedule a task is O(log n), where n is the number of concurrently scheduled tasks.
  • Timer Task has a know low performance as it creates many threads to schedule your tasks.
  • If you schedule a task the current bean or caller class will still continue running in the memory because the created thread.

Some times you need to send an email from your java application through a SMTP server. here is how you can do it simply using JavaMail API:

1- Instantiate  properties object, that contains the host name and authentication.

2- Instantiate Java Mail Session.

3- Create and fill you message.

4- Get Java Mail Transporter.

5- Connect the Transporter.

6- Send the message by the Transporter.

and here is the code:

/* create properties object */

Properties properties = new Properties();
properties.setProperty(“mail.smtp.host”, “smtp.mailserver.com”);
properties.setProperty(“mail.smtp.auth”, “true”);

/* get session */

Session session = Session.getDefaultInstance(properties, null);

/* create and fill the message */

MimeMessage message = new MimeMessage(session);
try {
message.setFrom(new InternetAddress(“sender@company.com”));
message.addRecipient(RecipientType.TO, new InternetAddress(“user@company.com”));
message.addRecipient(RecipientType.CC, new InternetAddress(“user@mail.com”));
message.setSubject(“testing java mail again and again!!!”);
message.setText(“Salam there, \nThis is a test from java mail”);

/* get transport */

Transport transport = session.getTransport(“smtp”);

/* connect to smtp server */
transport.connect(“smtp.mailserver.com”, “username”, “password”);

/* send the message to the recipients */
transport.sendMessage(message, message.getAllRecipients());
System.out.println(“message sent successfuly”);
} catch (AddressException e) {

e.printStackTrace();
} catch (MessagingException e) {

e.printStackTrace();
}

and enjoy sending mails from you application

Salam all,

i have downloaded some videos in wmv format and i needed to convert them into mp3 to play on my mp3 player. after searching google for how to do this on ubuntu i found a solution:

– first install lame and mencoder:

$ sudo apt-get install lame mencoder

– Run mencoder command to convert wmv file to mp3 file:

$ mencoder audioFileName.wmv -oac mp3lame -ovc frameno -of rawaudio -o audioFileName.mp3

    it is too straight and too easy. enjoy your mp3s.