Archive for September, 2012

How to successfully work in a distributed team

September 23, 2012 by Hoàng Long. 5 comments

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

Working in a distributed team is becoming more and more popular. With the power of Internet, today we can easily work together without worrying about physically travelling to work. It saves time, fuel, and personal energy. Can anyone imagine anything better?

But, all the convenience comes with a price. Co-located workers have the advantage of direct communication, which is often underestimated. When you have all of your coworkers in a room, they will answer you immediately when you ask, “Is that document is ready?” or “Can our original design support these new requirement changes?”. When the team are distributed in many locations (and possibly many time zones), things are quite different. We must wait for our emails being answered, or the chat reply message, while the others are on their other tasks. We may get stuck and need help from another team member who are sleeping while we are at work. That’s not only irritating, but also become a real challenge for any distributed team want to push their productivity toward their maximum potential.

I have been in this position more than once. Some were school projects, some were start-ups with my friends, and some in my work elsewhere. Some of them failed desperately, the rest succeeded. What I learned from them is: the way we do things as a programmers have a big impact. And success is not only for the Project Manager – it’s something we programmers can be proud of – when we contributed in it.

Teamwork

 

There are three key principles to success: Communication, Trust, and Enthusiasm

 

Communicating

Communication

Communication, communication, communication. I can’t stress this enough. Making sure everyone is on the same page is critically important, especially when you’re building a product a continuously changing product. In a fast-paced environment, a developer may take harmful shortcuts or forget important details if the rest of the team is not aware of their actions. Many times, I had to remind a team  member about a requirement he forgot, or explain the reason for our design the third time to the same person. It’s annoying, but it’s far better than letting developers make assumptions and cause irrepairable damage to the project.

Given that the team is potentially distributed all over the world, communication is harder but not impossible. All the team should sit together (via Skype or similar) to agree on a “communication plan”. In our case, we had two teams: client and server which works on different places with different time zones. we decided that everyday the server team would build a new version at 12:30 pm, then the client team would check to see if there’s any problems. Then, at 4pm when everyone in the server team went home, the client team will begin their work and give feedback to server team by the next day. The check at noon guarantee s that the build is not broken so badly that the client team can’t fix it.

One of the other ways to enhance communication is building a “responsive” culture. “Respond early – respond often” – that’s our motto. When you get an email and don’t have the chance to read it thoroughly, just mark them as “to read” and send a message that you’re doing on another task and will look at their problem as soon as you’ve time. That will help the people on the other end switch to another task in the meantime. (*)

 

Teamwork Trust 

Believe me, trust is very important. If people think you are not doing your best, they won’t either. Trust others and they will trust you. Do your work so that your team can trust you, and they will be much more inclined do their work. Be as transparent as possible. Make it clear what you’re working on. All of those things are easy to say, but it requires attention and care to get them done.

Once, I joined in a start-up where everyone was eager about what we were going to build. But we were located in different countries, and also had day jobs. Several weeks passed and we got our infrastructure setup ready. But then we got stuck in a vicious cycle: late response time, endless discussion about what the project will do, and soon everyone was tired of meeting without seeing anything done. The project got cancelled.

The lesson to be learned here is: we wanted to build something, but we failed to show each other that we wanted to put forth our best effort. As a result, any trust could have been cultivated was destroyed.

 

Happy team Enthusiasm!

Share your vision. If you don’t love what you’re doing, you are killing the morale of others. We all love working in a enthusiastic environment, so just make it :-).

Being passionate about the project’s goal is a sure path to victory: I have noticed that when myself and other team members have a positive attitude, all team work better with less conflict and miscommunication. We even feel much better.

Enthusiasm is infectious. Coming up with new ideas (sometimes stupid) is a way to show passion. That means you don’t only do your work, but you do it with heart. If you think of any cool idea, tell others right away. Don’t be lazy and say: “I will catch up with him tomorrow” because that tomorrow will never come. Tomorrow, other tasks will pull you away along with your best ideas. If you think the idea is not mature enough to present, put it off somewhere you will absolutely look at when you have free time. I feel that a sticker right beside the monitor is not a bad idea.

Last but not least, keep a close eye on what’s going on. Revise early, revise often. No matter what you’re doing, which role you’re playing, you should be responsible about project’s success. Tell the people in charge about any risk early.

In closing, a programmer is not simply a technical worker. That’s not the spirit – any laborer can learn their work for once and apply it the same way for many years, but that’s not us. We live and breath in the ever-changing technology environment, and we come here because we love it. Working in a distributed team is not only a difficulty, but also a challenge that many of us seek to overcome.

(*) Manage your time wisely. Time management: Answer too many requests and you will not get anything done. Don’t answer then they will wonder why you don’t respond. They can’t see you are busy. Balancing the workload is an art. But for starters: Speak the truth and try to be as simple and as clear as possible.

(**) The images used in this post are credited for Stock Exchange

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

Managing your Career in IT

September 10, 2012 by Morons. 6 comments

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

One of the things I like most about working in software development is the fact the for the most part you get to work with fairly intelligent people. I’ve always wondered why so many smart people manage their career so poorly.  If I had to guess, I would estimate that close to 35% of people in this industry don’t manage their career at all. Now I have a theory about why this is1, but the fact of the matter is that explaining to that 35% the importance of managing one’s career is an utter waste of time. Today I want to focus on helping those who do manage their career, do so more effectively.

The key to understanding how to properly manage your career is to understand the importance of positioning, not where you are currently, but positioning yourself for growth (ie. You want to put yourself in a position of high growth potential).

The IT world changes so rapidly I nearly burst out in uncontrollable laughter the last time and interviewer asked me “What is your 5 year plan?”. Though its true things change so fast in IT that it’s difficult to plan long term, you should plan none the less. But your plan should be in terms of actions that will position you to take advantage of opportunities for growth; ideally those actions will also immediately contribute to your growth.

The two basic types of career growth are Professional Growth and Financial Growth.

Positioning yourself for Professional growth

Professional growth is generally thought of in terms of skill sets, you want to continue to improve on you current skills while acquiring new complimentary skills. Once you learn the basics of those skills you should put them to use on the job by asking for more responsibilities then a promotion.

Choose Skills that compliment your current skill set:

Because learning takes time and time is limited you need to ensure your time is well spent by learning skills that will best position you for growth. This is why it is so important to choose skills that compliment your current skill set. (If you already know C# WinForms learning ASP.Net will contribute more to you professional growth than learning Java.)

Having a large well complimented skill set does not make you a generalist; it makes you a well-rounded expert. Calling yourself a generalist implies that you can do many things at a mediocre level. Do not accept that label. Conventional HR wisdom is that you can only be an expert in one or two things. Don’t be afraid to challenge that, say directly and proudly, “I can do a lot of things, and I can do them well!”

Choose Skills that are transferable and Soft

Transferable soft skills should not be neglected; you should put as much effort into them as you do into learning hard skills. As you advance in your career you will find that Soft skills are of much higher value than Hard. Plus they don’t depreciate in value with time as tends to be the case with technical hard skills. Transferable skills are great because they complement so many other skills.

Skill Hard\Soft Very Transferable?
C# (Syntax) Hard No
Java Hard No
Sql Server Administration Hard No
DB Design Hard Yes
OOD Hard Yes
ANSII SQL Hard Yes
Business Knowledge Soft Yes
Industry Knowledge Soft Yes
Leadership Soft Yes
Time Management Soft Yes

 

Choose Skills that are Marketable

This is key, if you developed all the skills in the world but can’t put them to use, you accomplished nothing. As I stated above, once you learn the basics of those skills you should put them to use on the job by asking for more responsibilities then a promotion. If no such opportunity exists with your current firm you need to look for a new job that will put you in a position to take advantage of such opportunities.  This means you must choose skills that are marketable. By their very nature marketable skills have market value, which leads us to the second half of this article…

Positioning yourself for financial growth

Financial growth usually follows Professional Growth assuming you are in a position to take advantage of your Professional Growth to earn more money. If you have positioned yourself with a solid set of marketable hard and soft skills that complement each other well, you are off to great start. But you need one more thing: Negotiating Position.

To have a strong Negotiating Position you need to:

1)      Market yourself Internally (to your current Employer) and Externally to the Job Market

2)      Have Options and Know your next best Alternative should negotiations Fail and Know your Market Value

Marketing yourself internally

Even if you are happily employed you need to market yourself to your current employer. But because your job performance is under constant scrutiny at work, you need to be what you are selling. If you are marketing yourself as that employee who should be trusted with additional responsibility (as required for Professional growth) you need to be that someone who can be trusted with additional responsibility. You simply can’t fake this for long. You need to consistently do good work and act (and dress) professionally manner and ensure you are getting proper recognition for you work. I can’t stress this enough, you need to ask for additional responsibilities and then, when the time is right a promotion. If you get shot down, you should have a positive attitude and negotiate. “What do I need to do to ensure I get that promotion next January?” Then Follow up in December.. (But you better have lived up to your half of the bargain). If you are not happy with the results of these conversations or your employer is not living up to his end, you need to look for opportunities else ware.

You should act as if you care about the company and your job performance but like you don’t need the job. You want your employer thinking “If I don’t work with him/her, he/she may just up and quit on me.” You need to have a demeanor the projects a strong personality as someone who is not going to be taken advantage of (in a professional and respectful manner). Your demeanor should suggest loyalty but with limits.

One last point on this: You should market yourself internally even if you are sure you won’t be with the firm long term. When looking for a new job you really want to spend your time and find that job that will give you the growth you are looking for, and in today’s job market that could take well over a year. If you are that guy with a positive can do attitude, constantly improving yourself and taking on additional responsibility, no employer in his right mind would let you go. When layoffs are coming, these people are literally pulled aside and told “Don’t worry”.

Marketing yourself externally

Marketing yourself externally to the job market is a bit different than internal marketing. With external marketing you can literally outright lie about everything you ever did, and be met with some success. Doing so may get you a job, but once on the job you will never be given additional responsibly or a promotion, you will be first on the list come layoffs time, and quite frankly it’s dishonest.

Conducting a job search is simple (and outside the scope of this article): You need to have a plan, you need to put you plan into action and you need to reassess and refine you plan over time and iterations.

Options

If you are offered a new job or are negotiating a promotion with your current employer, you need to know your options if you are to effectively negotiate. That means you need to:

1)      Know your plan of action should negotiations fail.

      a) If you are currently employed you always have the option of staying where you are while you continue to look. Don’t make the mistake of saying “

well this is better than what I have now”

b) If your plan is “Negotiations can’t fail” your plan is sh*t.

2)      Know how long it will take you to find another Job and at what salary.

    a) If you are currently employed, the answer is “I have a job!”

3)      Know how long it will take you to find the job you want.

4)      Know what accepting this opportunity will mean in terms of long term growth.

5)      Know what accepting this opportunity will affect your external marketing strategy for your next job search. (In terms of skill set and position)

6)      Know your market value.

    a) Think in terms of your whole skill set, you should be compensated for as much of your skills as possible. This is why complimentary skills are so important.

7)      Know how long you can go without income & how much you have in your emergency Fund.

8)      Know the Value of you current and proposed benefits package.

9)      Know your ability to do good work and market yourself internally once you accept the opportunity.

Knowing all of the above will enable you to negotiate stronger and with more confidence.  Don’t be afraid to negotiate everything and anything. You will come off as more confident, more capable and a more appealing Candidate. Not only that but you will be more confidant you made the right choice.

In Summary: Continually improve your skill set (hard and soft), Market yourself internal & externally, Have a plan, Negotiate.

Recommended reading

The Hard Truth About Soft Skills: Workplace Lessons Smart People Wish They’d Learned Sooner
Corporate Confidential: 50 Secrets Your Company Doesn’t Want You to Know—and What to Do About Them


1So why do smart people do stupid things-A Moronic view of Free will
There’s an old saying: “God helps those who help themselves”.  But this is not quite true; it’s more of a half-truth. The full truth is “the ability to help ones self is the help God gives”. Unfortunately god doesn’t give everyone the ability to help themselves, for  those incapable, God has no choice but to help then directly as they are helpless. So I ask you, who is more likely to make a good decision? A) The smart helping themselves or B) The Stupid with God’s help?  Stupid people make quick decisions without thinking, smart people think things through, than choose wrong or choose inaction (analysis paralysis). Simply stated smart people have the free will to f*up, as God trusts them to act in a prudent manner.  … Key feature of stupidity is that its power lies in its abundance. One stupid person is helpless, a herd of stupid persons can be invincible….”

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati