Software Development

Jan 31, 2011

A few years back, I visited Italy and noticed an interesting phenomena: most of the waiters that served us were middle aged man. Some even senior citizens. This is very different than the situation in most western countries I visited, where waiters are mostly young, usually around 25 years old. In most cases, being a waiter is a temp job, on your way to getting a better job. Many people do it while studying to get their degree or while seeking for a "real" job. But not in Italy. In Italy, a waiter is a proper job. It is a career. It is something you do because you choose to do it, not because you have no other alternatives.

A web rockstar is a master of web technologies. He breaths HTML and CSS. He whistles JavaScript while in the shower. He will be more than happy to engage in a deep discussion on why library X is better than JQuery. He will wear a T-Shirt saying "I trash IE6" (or something similar). He will be send you a bunch of links to his recent work instead of a resume. He can do PHP or Django or Ruby on Rails, but he really shines on the client side. He pities the condescending server side people because deep down he knows that his work is the true art. He is a web rockstar.

How many web rockstars do you know? I don't know that many. I sure know a lot of Java, .Net, PHP and Python rockstars, but not many web rockstars. One could argue that this is a relatively new art. But I don't think that's the problem. For some reason (more on that below), the web developers became the waiters of the software world. There are many young people doing that, students, novice developers all sharing one common aspiration: to get out of the "front-end ghetto" and become a "true developer" on the server side.

It is relatively easy to get started: HTML is simple. It is not programming, it is just markup. You don't need to understand any programming paradigms to do it. Moreover, most people don't care about the quality, as long as the page renders correctly. You move on to CSS, which is a bit more complex, but still not programming. Then, you find that you need to add a dynamic menu, so you read a short intro to JQuery, copy a few lines of code and you are now officially a JavaScript developer.

Those people are willing to work for less, which drives the prices down. This gives strong incentive for people to "move on". Many managers who need those skills think that they can just get the job done for very little. Naturally, the payment comes later. The website stops working in certain browsers, especially on the bosses' new iPad. It takes forever to load. Each modification breaks 10 other pages. The marketing people want to refresh the look and feel for the upcoming holiday season and the job ends somewhere in mid January.

This bad ecosystem changing, for a number of reasons. First, HTML5 and CSS3 gives you a lot more power with the cost of being far less trivial. Second, we see rising popularity of full fledged JavaScript MVC-style frameworks (e.g. JavaScript MVC, MooTools and Backbone.js) which are more than just showing some fancy widgets. Third, the level of interactivity expected from web applications is soaring. The bar has been raised. One needs deeper skills to develop truly remarkable web sites. Finally, JavaScript is becoming a first-class citizen with the introduction of innovative technologies like node.js (which, ironically, takes the JavaScript developers to the server side and give them an incredibly powerful tool).

JavaScript is one of the most important programming language today. On the server-side there are so many alternatives. However, on the browser, JavaScript is king. True, there are some attempts to shield you from the actual JavaScript work (GWT, Cappuccino), but, in many cases, you will end up coding and debugging JavaScript. Those who will choose to master the web technologies will not have any problem finding work in the upcoming years. We need more Italian waiters.

My message to server side developers: respect you colleagues. If you really want to test your skills, let's see you putting up an interactive web-app. I dare you. It is a challenge, perhaps even a bigger one than coding a couple more beans on the server. Be honest, it is possible that you don't like doing web development because it is just too hard (no cushy IDE, cross-browser quirks, etc.).

My message to managers: cheapskates always pay twice. Always. Get the right people for the job and be willing to pay for quality. Get these amazing web rockstars to be part of your team and not just freelancers, thus creating a differentiator for your company.

One final note: we're hiring! if you are a web rockstar, or even a young web developer who wants to become a web rockstar, you live in Israel, and you're looking for a new project, drop me a line. I'm looking for you and I have a project that could take your career to a whole new level.

Aug 23, 2010

Last week, I wrote a post about my experience with oDesk. The purpose of the post was to share my experience, so other entrepreneurs can learn from it, and provide feedback to oDesk and contractors in general. While some people found the value, I got some pretty angry comments on reddit. It is worth clearing up some of the issues discussed there.

First, it should be clear that I am not bragging about my actions or how I managed to exploit a person. As I wrote in my post, from my communications with Max (the service provider), I believe he was happy with the deal and will work with me again at similar conditions. The job itself didn't take 2 full days as my post implied. It took about 6-7 hours of work over the course of two days.

We can all agree that $37 for 7 hours of work is low salary. QA people at western countries are probably deeply shocked by these numbers. Well, it's not just their problem, it's everybody's problem and it is called Globalization. Look at the crumbling European economy. Jobs are migrating east as unemployment in the west grows. You can fight it, you can resist it, but you cannot deny it. If geographic location is not an issue, there are plenty of people willing to work for less. In some cases, it's not enough for them to get by, so they will remain poor working for low wages.

The question is: should you hire them at such low wages?

If you have a job and they are willing to do it for a low price, why not? It might seem obvious to some, but it is not a simple question. First, you need to stay on the moral high ground. I would not hire a 12 years old QA person, not matter how low the price will be. Sweatshops are another examples of how to exploit workers and nobody should support them (chances are, you paid for products made is such facilities, but let's not go there). A notable example is the recent wave of suicides at the Foxconn factory in China, the same factory which makes iPhones and iPods. It created a negative backlash, eventually reaching up to the CEO level and resulting in salary raises.

So, we can all agree: if you have some decency, you will not hire any person for any price, even though you can. But where do you draw the line?

Personally, I would like to have a good QA person which I can trust and I'm willing to pay him a reasonable hourly rate. Reasonable means reasonable according to his local standards. But it is not that simple because:

I really don't know if the person I'm hiring is any good at what he does. If he has some feedback, it helps mitigate this risk.

I don't trust the person I'm working with. If he says he was working for 5 hours, was he really working for 5 hours?

I need someone productive. Even if he was working for 5 hours, how is his productivity? If I estimated the job will take 5 hours and it took him 20, that's not very helpful for me.

From all those reasons, it is easier for me to start with smaller tasks that have a well defined budget. Low budget, because I might not get the results I was hoping for, so I want to minimize the risk. I hire people with no (or minimal) feedback and credentials. It is much like using an intern, a student or a new college graduate. Once we get comfortable and build trust, we can move forward and change the terms. Perhaps, once they get good feedback they will decide to move on to a more lucrative offer which they can now win.This already happened to me with a previous QA person and I'm really happy I could help him get a better job and move forward.

That's how the employment market works.Experience and credentials will get you a better salary. You start from the bottom and you work your way up. Note that I didn't get any offers from people with well established feedback. Perhaps because they can find better offers.

Final note to the potential employer: you can continue using the services of the cheaper guys, but you will still have all the risks. Or, you may establish good working relations with a few good providers, minimize the risks and get better results with less "hand holding" from your side.

Aug 17, 2010

About a month ago I decided to host Eclipse distribution downloads on the nWire web site. Alongside with the standard distributions, you will find distributions that already include nWire pre-installed. Packaging and repackaging was a very simple task and, on the face of it, everything was in order. Nevertheless, I decided to do the right thing and test that everything works.

The challenge is to test on as many platforms as possible: Windows XP, Vista, 7 and Linux, on 32-bit and 64-bit. It was narrowed down to 24 tests of unzipping and running Eclipse. Our resident QA engineer was preoccupied with other tasks and didn't have all the platforms installed, so I decided to outsource this task.

Choosing a Service and Signing-up

There are many sites that offer freelancers for hire. I heard of oDesk and Elance and they seem to be the biggest sites to date. Other sites worth mentioning are Guru.com and vWorker (aka rent-a-coder). Elance requires a $10 registration fee, so I decided to try oDesk. Plain and simple. On the other hand, unlike Elance oDesk does not work with PayPal. Since I use PayPal to sell my software, paying with PayPal is very cost effective to me: it saves the very expensive round trip of converting USDs to my local currency and vice versa. In the long run, I would prefer paying with PayPal.

The sign-up process is quick in oDesk, but, after you sign up, you need to verify your credit card. oDesk will charge you with a random fee (still hope to get it back as promised) and you need to enter this fee as a verification. You cannot hire before you verify, at least for payment up-front contracts. This turned out to be an annoyance, since I wanted to get this job out the door as quickly as possible. I had to wait for the charges to appear in my account and than phone the credit card company and ask for them. At hindsight, I'd rather pay $10 on PayPal...

oDesk has a desktop client. You don't need it if you're hiring. On the Mac, it looks really out of place, so I recommend not installing it if you don't have to. They also have an iPhone app which I haven't tried.

Posting the Job

Posting the job was easy. The interface is simple and intuitive, although somewhat outdated. I was very careful to specify the exact requirements and I think I did OK (you can read it yourself). I estimated how much time it will take, checked for common rates and decided to make it a fixed-price contract at $30. I like knowing in advance how much it's going to cost, especially when I don't have any experience (read: trust) with the person I'm working with.

Sorting Applications

I got about 20 job applications. The job was posted on July 13th. Here's the distribution of applicants per day: July 13 - 5, the next day 5 as well, then 3, 1, 3, 1 and on July 19 - 2. The last two were spam. Completely spam. They both offered to do it for about $250 which was absurd. Other than those two, all offers were bone-fide.

Sorting the applicants was frustrating. The list kept growing and it was hard to keep track of the conversation with each applicant. I was really missing a way to write notes for each applicant. The applicants list UI is poorly executed and very annoying, mostly because the sort order keeps changing and opening new windows is inconsistent.

Candidates came from India, Western-Europe and Russia, Philippines and South America. I received many applicants from India, over 50%. None of them read the requirements properly. It was required to have access to all the testing platforms. I had to ask each applicant individually whether they have it and all said no. It was really a waste of time.

Finally, I managed to find some applicants that had the platforms. I chose Max. He had relevant experience, but not on oDesk. He was new, like me, and didn't have any feedback. We scheduled to talk over Skype. He's from Ukraine, so we are at the same timezone. I sent him a full specification of the tests before the conversation. We talked, I was under the impression that he understands the job and we moved on.

His offer was $33. The majority of applicants added 10% to the price. Some did the opposite. You might want to subtract 10% from what you think is fair, knowing offers will add 10% anyway.

Execution

Since it was a fixed-budget job, I didn't care about getting a work log. I just wanted the job done as quickly as possible. Max was quick to execute and provided organized screenshots of all relevant scenarios as a proof that it works. We used Dropbox (here an affiliated link) to share the files.

One of the tests failed because the distribution was corrupted. Max also had some issues with the 64 bit platforms. I had to step in and help in solving it, but he was proficient: I just provided the links to the solutions and he did the rest. Overall, it took about 2 days because of the 64 bit issue. Once the tests were complete and the corrupted file replaced, I now can safely say that everything works.

Eventually, I was happy with the results. I added 10% to the agreed price, which totaled at $37. I think it was a fair deal.

Conclusion and Tips

I got what I came for, and I got it at a good price IMHO. I'm happy. I think the key was good definition of the task which led to choosing the right person.Choosing a person with no oDesk feedback was not a problem in this case.

I will use such a service again in the future. Will I use oDesk again? Maybe. Not having PayPal as an option could be a deal breaker when the stakes become higher. I didn't like the interface and it is infested by spam to some extent.

While looking into other sites, I found that some sites are better for specific needs. For example, some sites have more cheap QA people while other have more talented marketing people. If you have a specific need, I suggest running a search for your target employees on each site and comparing results.

If you are going to post a job, make sure to highlight the requirements. Prepare a canned list of questions verifying the applicant fits the requirements (even though you specified them in the description) and send them to each applicant without even reading the application or the applicant details. You see, many freelancers just send canned applications without even reading your requirements. When you send questions, they will need to answer them. If they don't answer, forget about them. If they answer that they don't fit the profile: thanks, but no thanks. Finally, you will get a short-list of people who actually read your questions and understand what you need.

Jun 14, 2010

The Eclipse Community Survey is held every year by the Eclipse foundation. You can find an accurate summery of the important trends in this post and the original report can be found here (pdf). After going over the report and the data, here are some notes I took.

PDT doubles CDT!

In the question "What is your primary IDE?", JDT takes the lead by far with 53.7%, then PDT with 14.3% followed by CDT with 7.4%. This is a huge win for the PDT team. I think this trend will become even stronger. The new PDT 2.2 (to be released in the upcoming Helios) is a big improvement, especially in performance, and we will see more and more PHP developers upgrading to PDT. This is also an indication for the maturity of PHP.

Interesting to see that only 9% answered that they use PHP as a primary language while 10.5% are using C/C++. Almost 25% of the people answered that they allocate some time (over 0%) to PHP coding, compared with 31% on C/C++. The PDT package does include the Java tools, so that might be a reason PDT is more popular.

Scala Anyone? Ruby?

I've said it in the past: there are some vocal minorities. Scala as a primary language got 0.4% and Ruby got 0.3%. However, 4.4% answered that they allocate some time to Scala, 4% to Ruby. Still, it is a minority.

The following graph shows the percentage of people who allocate any amount of time to a given language.

Nobody does Mobile?

There was a question regarding mobile application development. The results aside, 31 people answered it. That's about 1.8% of the people who took the survey. Is there a strong bias here? About 13 people said they were doing J2ME. They are probably the last :-)

Eclipse Version Being Used?

Over 75% are using Galileo. I wouldn't count on it, as it seems biased. People who answer the survey are people who read blogs, follow Eclipse rock stars on Twitter and frequent technology sites. These are innovators, hardly the mass market. It's suffice to see that over 7% are using Helios milestone build, and that's before the RC builds (release candidates).

About 12.3% of the people in the survey are committers or belong to an organization which is an Eclipse member. That's hardly balanced.

Windows in Decline?

From 2007 to 2010, Windows as primary operating system went down from 74% to 58%. Most users migrated to Linux, some to OS X. While I can see the trend myself, I think the 58% number is just too low. It is probably more subtle in reality. I know people from several companies that use Eclipse, none of them (apart from Google) use Linux as their primary OS. BTW, if you were wondering, Ubuntu is the leading the Linux pack.

Spring surpasses JEE?

In the question "what is the primary server framework you use", Spring got almost 20% and EJB behind with 19%. That is huge, BUT... There is no distinction between Spring MVC and other Spring components. So people who use EJBs with Spring MVC (I'm guessing quite a few) are in the Spring crowd. Struts is still being used more than Struts 2 and JSF: both never took off.

Amusing anecdote: there are too many developers who don't understand the difference between a server side and client side.

Redmine is Popular!

I use Redmine to track issues (I love it!) and it seems that I'm not alone. It wasn't even an option, yet, 47 people answered other and wrote "Redmine". That's only 2.8% of the total answers, but, it's the 5th most popular after the Jira, Bugzilla, TRAC and Mantis. It should be a first class citizen in the next survey and appear as an option on its' own.

People Are Happy, But...

There is an overall satisfaction. Over 300 people chose to leave written feedback. I believe that every committer and every employee within the Eclipse organization should take a minute and go through the feedback (The last question, 38, can be found in the raw data, links in Ian's post). There's plenty of criticism and a lot we can learn from.

Personally, I found quite a few complaints around the issue of plugins. The game of mixing and matching plugins with incompatible interface and inconsistent quality seems to bother a lot of people. It makes me wonder whether there shouldn't be an approval process to plugins. You can publish a plugin, but it will only get the Eclipse seal of approval once it goes through a certain process. I think that's something worth considering.

Not a single vote claiming that he/she will never install an unsigned plugin.

79 people voted, out of 727 reads for the article. That's almost 11%. For comparison, the poll on XML handling got about 13% participation. That's almost 20% more. As I see it: people that don't care are less inclined to vote. People who oppose will likely vote, to have their strong opinion heard.

My conclusion: don't bother because people don't care.

If you still going to sign your code, go with Peter's tip and buy the certificate from Tucows. At $75, they seem to be the cheapest around and you get exactly the same certificate (they buy them in bulk...).

I still think there's a point in keeping the unsigned warning when installing such a plugin. Some people will check the origin to make sure it is bona fide. But then, again, I've never heard of a malicious Eclipse plugin. I guess there's always a first time...