Ben J. Christensen

Software Development and Other Random Stuff

Recruiting IT Talent

An interesting article by James McGovern on recruiting IT talent.

The gist of it is that it’s very difficult to rely upon resumes, and that we as an industry seem to put up with “falsification” of skills and keep people onboard who really don’t have the skills they need to do their job.

It closes with the following statement:

“World class organizations are built on foundations where people can trust each other and don’t have to second guess the ability of the team. If you find yourself in a shop that doesn’t get it and you stay, maybe you are getting exactly what you deserve… ” – James McGovern

Filed under: Management & Leadership

Summary of Bad Week for Datacenters

Filed under: Production Problems

Smitten

I know this isn’t my personal photo gallery — that lives elsewhere — but my wife sent the following picture to me yesterday while she was out with my baby girl and I admit, I’m smitten. She’s my little girl and I’m wrapped around her finger.

photo

Filed under: Personal

Ideal Equipment

The following is my opinion of ideal equipment for developing – and anything else I do.

Picture 6

MacBook Pro 15-inch: 2.8GHz

8GB Memory

7200 RPM 500GB Drive

Picture 7

LED Cinema Display (24″)

Because one display is never enough.

Filed under: Tools

Rackspace DFW Power Issues. Again.

Twice in the last two weeks the Rackspace DFW (Dallas/Fort-Worth) data center has lost power to sections of its facility.

Message from Rackspace CEO Lanham Napier

June 30, 2009

Rackspace community,

Yesterday afternoon at 3:15CDT our data center in Dallas experienced an interruption in power to portions of the facility.  The interruption caused customer servers to lose power and go down.

Notice * July 7, 2009, 11:44 am CDT: Today a portion of our Dallas data center experienced a brief power interruption. Rackspace is aware of this issue and is currently investigating it. We will be sending out periodic updates as more information becomes available.

Picture 4

Picture 5

I commend their transparency through the use of Twitter and their blog, but rather disconcerting since it’s the datacenter I use and pay a premium for the amount of “redundancy” they are supposed to have, and the fact they had issues in November 2007 as well. More information here about that outage.

Filed under: Production Problems

Google App Engine Down for 6 Hours

In my ongoing collection of “big guys having trouble”, Google’s “App Engine” services were down for 6 hours on July 2nd.

A scathing rant about Google’s lack of clarity on what went wrong and what’s being done about it – and therefore the lack of confidence in using the service.

Google’s posting about the issue are found here.

Picture 3

Filed under: Production Problems

Impact of Tools on Productivity

Yesterday I was analyzing java heap dumps at my office using a Mac Pro with 8 Xeon CPU cores and 16GB of memory.

It took 30-60 seconds to load a 3.5GB file and was very usable while browsing the heap and analyzing it.

When I got home I wanted to peruse it a little more. I just had my laptop, a MacBook Pro with a Core 2 Duo 2.5GHz and 4GB memory.

It took over 20 minutes just to load the file, and the machine was virtually unusable that entire time. Once loaded, every click of the mouse took time ranging from a noticeable lag to multiple seconds of being hung. The machine was swapping to death. Even though I have a very high end laptop, it just couldn’t handle what I was throwing at it as compared to the very powerful desktop machine.

I gave up rather quickly as the friction of using the system was too high. I didn’t have the patience to deal with it – I just waited until I returned to the office today and again used the Mac Pro.

It has made me think again about what kind of equipment is provided to development teams. I know for a fact that my extended team of 40+ overseas don’t have a single machine in their office as powerful as the Mac Pro I was using.

So, if one of them needed to analyze that heap dump, profile a large server application or do some other intensive task, what would they do? Deal with 20 minute waits as opposed to 30 seconds, and multi-second pauses between each mouse click – and waste a day in their effort instead of minutes or hours of effective work allowing their tools to work as fast as their thoughts?

One could argue that a remote server, such as one at EC2 could be used for a couple hours by using a web based solution like JHat to analyze the heap. Except that didn’t work so well.

How much productivity is lost because a developer is given equipment below actual requirements, or by making them use the same machine long past its usefulness (3 years is an eternity for a developer, yet is a standard ‘depreciation’ time for which a developer is often made to endure their machine).

For example, I have 4GB on my laptop and push on that limit constantly. Yet I know a lot of my team only has 2GB, and are working on CPU architectures several years old.

For a US developer this is just silly – as having new equipment every 18-24 months is a fraction of the cost of the persons salary, and in my opinion more than makes up for itself in improved productivity as well as morale.

For an offshore developer, with much lower salary costs it’s a higher fraction, but still I believe its dividends are worth it.

This applies to all types of tools and equipment for developers: faster machines, more memory, dual large monitors, commercial software as opposed to everything being opensource and other such things.

People are expensive. I think it’s more cost effective to spend a little on the right equipment and increase productivity and morale of development teams by giving them the right tools – as I had while analyzing heap dumps.

Filed under: Tools

Effective Distributed Development

In a previous post I spoke of “scaling distributed development” in reference to the challenges in increasing the size of a team and the complexity of projects while working under limitations of the experience level of developers available in the remote location.

Continuing on this theme I have continued pondering what it takes to effectively do development with a remote office.

I use the term “distributed development” as opposed to “outsourcing” since the word outsourcing generally implies one company sending the work to a second company – not multiple teams of the same company in different geographic regions, but my thoughts more or less apply to both scenarios.

My thoughts are shaped greatly by my experience with a remote development team in Pakistan and myself based in the US. Therefore they may or may not be applicable to other regions such as India and China.

What I Feel is Necessary for Effective Remote Development

In order for remote development to be successful, I believe the following things are necessary:

  • Senior leads “on the ground” with the team who have experience gained over years of development and most importantly in delivery of applications to customers and operating them in production.
  • Frequent communication between the US and remote office with as much of it being in “real-time” as possible, not just “touching base” morning and night. Development is not a shift-work job like a factory. Continuity and comprehensive knowledge is critical.
  • Human interaction through travel and face-to-face meetings. Nothing establishes team rapport like sharing a meal together. Rapport is what enables communication and difficult work to be done together in the long haul. Relations can be built remotely – but much more slowly, with much more effort and with far fewer people.
  • The ratio of senior to junior must be healthy. Too few senior resources means the junior developers are not getting the mentoring and guidance they need, they make mistakes, code quality goes down, production issues arise, morale decreases. It’s my belief that a senior developer can handle no more than 5 junior developers if one expects proper mentoring, training and good code quality. This ratio may be able to change if there are solid ‘intermediate’ developers who can then have junior developers managed by them, but I have not seen this work very well. Intermediate generally means you’re not fresh (completely junior) but you still need guidance, direction and mentoring, and are therefore not ready to lead, mentor or manage others and therefore should not be setup to fail as such.
  • The developers themselves must be consumers of technology products. If a developer writing an ecommerce application has never actually purchased a product online and had it shipped to their door, they have no common relationship to “how it should work” let alone “how it should feel”. Common sense is taken for granted – it is something learned through life experience.

Positives of Pakistan Remote Development

In 7 years of working with Pakistan developers, and likely seeing over 100 developers during that time, I have found the following to be true.

  • Very intelligent.
  • Very eager to work and grow.
  • Amazing work ethic.
  • English language skills (for being a non-english country) are quite good.

Of course, the extremely low cost is a final factor that can not be ignored and is the driving reason for having a team in Pakistan.

I have delivered some significant software and production systems with Pakistan development teams – myself being the only US based person. It can work and be very cost effective and rewarding.

Negatives of Pakistan Remote Development

There are definite drawbacks however to working remotely in Pakistan.

Time Zone

The time difference is 12 hours (from Mountain or Pacific US time depending on time of year) which makes real-time communication very difficult as it is limited to early morning or late night. It would be perfect for shift-work as you could do hand-offs every 12 hours – but development is not that type of work.

Cultural

Cultural difference means that “common sense” in each country is very different. Thought process is definitely different. Consumer experience with technology products is limited. This has an impact on understanding and requires much more detailed communication, requirements definitions and business reviews as nothing can be taken for granted. When it is, or something is “assumed”, the cost is wrong implementations and/or delayed timelines.

Perhaps another cultural difference and a side effect of the positive eagerness is not knowing what they don’t know. A desire to try something does not equate to knowing what or how to do it. Saying “yes” is great – except when that “yes” is not accompanied by a comprehension of what it entails. Commitments to deliverables can be rather misleading if in fact the person does not know what has been committed to or know how to deliver it, but wants to try it all the same – and therefore says yes.

Geopolitical

Let’s face it, Pakistan is not an ideal place in the world these days. It hasn’t been for years and likely won’t be for many more. My hopes and prayers are that the country will improve in its stability, infrastructure, economy, education and other matters, but today it is not a country many people desire to be in. This is a big part of why the cost is so low to hire people in the country. At the same time, it has a very significant impact on talent: people don’t stay.

Virtually anyone with a skill and the opportunity to leave will do so. It is evident to me in how many people I have seen emigrate away from Pakistan to Canada, US, Britain, Singapore and other countries over the years. It is more evident in the seemingly complete lack of “senior” talent in Pakistan.

It is virtually impossible to find and retain a “senior” level developer with 8+ years of experience, let alone 15+. Even 5+ is hard to find.

If the effort is made to train someone, after a few years as their skills and experience mature, the pull to leave the country increases and the company loses them.

I understand the pull. I work with 3 people in the US all who have immigrated from Pakistan. Incredibly smart, hard working people – very good at what they do. But they all left Pakistan instead of living their lives and careers there.

Impact on Cost and Productivity

Considering the extremely low cost of developers in Pakistan, doesn’t that outweigh the negatives?

Under certain conditions, it can work very well, but those conditions must be met or it falls apart, and in general I question the actual “low” costs.

Assuming communication and timezones are dealt with, and the cultural barriers addressed – one item can not be overcome through any amount of process, hard work or documentation. Geopolitical.

The geopolitical situation is beyond resolution for any one company or team, and it is a force that can not be ignored. To ignore it is to invite failure.

Long timelines, poor quality code, production issues and failed deliverables are all symptoms of one thing: a team that does not have the skills to deliver on what is being attempted.

What about mentoring, grooming and training? All of these are great – but if the people that are trained do not stick around longer than the training, then there is an incredible cost of training that is not recouped.

The senior developers spend their time training, not developing. Then the junior developers leave before they can become productive. The time of the senior developer is wasted as far as the company is concerned. The senior developer is seen to be “unproductive” because delivery is so slow – yet they have no control over the loss of the junior resources who were just getting good enough to work productively.

To make up for it, more junior developers are added – making the matter worse. A higher ratio of junior to senior means less mentoring and training for each developer. This means lower morale, lower skills, and poorer quality of delivery.

This catches up — bugs, production issues, delivery failures, long timelines. This then leads to morale problems and further turnover of resources, generally the ones with the most potential and skill.

Conclusion

Remote teams such as this can work very well if they are small and directly led by a senior developer lead.

Mentoring and grooming of developers in Pakistan (or other remote locations) can be done and can be successful. I’ve done it. It has worked well. It has only worked well though when the remote team has worked my hours and the team size was small — so that I had constant real-time communication. I did this for several years.

This however does not grow a business if those people don’t stick around. Nor does it scale.

Thus, I believe the actual cost of development for an outsourced development team with these traits is in fact much higher than the monthly salary of a developer in Karachi.

If a senior developer from the US is spending 75% of their time mentoring, training, grooming and managing junior developers – and those developers all leave within 2-3 years, what is the cost of that 75% of time compared to if it had been spent developing the products directly?

If a 4 month project takes 8 months because of junior talent, and 4 months of sales are lost because of this, are those 4 months of sales higher or lower than the cost of having a team of more senior talent?

To ignore these facts and not look at the actual costs is to set oneself up for failure.

No amount of documentation, process, hope or patriotism can overcome the geopolitical issues and lack of long-term talent.

So what is the solution?

The first thought is to have everything return to the US (or Europe, Canada etc, wherever the parent company resides) where developers expect to live their lives and have long careers, so talent can be groomed and retained.

Some business models just can’t afford this however. In that case, another location must be found where the following applies:

  • cost of developers at least half of the US
  • geopolitical situation where developers desire to stay, to live their full careers in their country
  • good english communication skills
  • intelligent and educated people
  • preferably a culture exposed to technology driven consumerism
  • preferably in a more similar timezone to the “parent company”, in this case, the US timezones
  • safe and easy for North Americans and Europeans to travel to and stay for extended periods of time

I believe distributed development is here to stay, and creates significant value when done correctly. It is not an easy thing to do well though. Nor does ignoring the challenges of culture, distance, time and politics benefit the business.

I want to see a distributed team setup according to the thoughts I’ve described above and see it achieve the level of productivity and efficiency that is its potential.

Filed under: Management & Leadership

Netbeans Heap Profiler Works. Well.

Netbeans (which I never use) has seemingly come a long way since I last looked at it. The UI is certainly a lot nicer.

Today however, it’s the Heap Profiler that I’m happy with – cause it actually works unlike anything else I’ve tried today.

It loaded a 3.5GB  heap in less than 30 seconds! (I had set my max heap for Netbeans to 12GB on my 16GB, 8-core machine).

Finally a tool for heap analysis that works and works well. And it’s elegant looking at the same time.

Netbeans Heap Profiler

Filed under: Production Problems, Tools

Memory Analyzer Can’t Handle Large Heaps

Despite the claims that Memory Analyzer works well with large heaps, the following screenshot is the evidence of my continued inability to have it parse a 3.5GB heap dump.

I have attempted JDK 5 and JDK 6, both 64-bit, with up to 14GB of memory allocated on an 8-core machine with 16GB of memory.

Note the memory bar at the bottom showing it’s using only 2121M out of 11879M – yet it still thinks it’s running out of memory.

The settings are:

-vmargs

-Xms12g

-Xmx14g

-XX:MaxPermSize=1G

-Dorg.eclipse.swt.internal.carbon.smallFonts

-XstartOnFirstThread

 

-vmargs
-Xms12g
-Xmx14g
-XX:MaxPermSize=1G
-Dorg.eclipse.swt.internal.carbon.smallFonts
-XstartOnFirstThread

 

Memory Analyzer OutOfMemory

Filed under: Production Problems, Tools

Twitter Updates

View Ben Christensen's profile on LinkedIn