Wednesday, April 20, 2016

The tenth reason

WOW! It's been about eight years since my last post, which was about the nine reasons people leave their jobs. I wrote that post while I was preparing to leave the company I was working for back then. It was a sort of thinking out loud post, where I was evaluating my decision to leave. Now, it's time again to move on, but it is for a reason not mentioned in my 2008 post.

Recently, I have been thinking about leaving the company I'm currently working for for some of the reasons mentioned previously (financial, different types of experience, etc.), but found myself adding another reason to the mix that I wasn't aware of back in 2008. It's independence!

I want to be on my own. I have some side projects that I wanted to work on since forever, but never had the time to attend to due to my full time job. Whether you want to have your own business, become an entrepreneur, be your own boss, whatever you call it, you just want independence.

One solution to become independent is to have your own project, whether it's a services providing company (e.g. social marketing, SEO enhancement, car cleaning, etc.), a product (e.g. mobile app/game, a book, hand made soap, etc.) or opening a shop/office (e.g. co-working space, coffee shop, etc.). Another solution is freelancing! Yes, when you're freelancing, you are actually an independent service provider.

The great thing about freelancing, if you're really good at what you do, is that you get to choose what to work on and when to work on it. Of course when you agree with a client on performing a task in a specified time frame, you have to do it the way (s)he wants in the time frame you agreed on, but you get to choose the project and agree on the time frame before you start, which is totally different from when your boss tells you that you have to do a boring task in an illogical time frame, causing you to work extra hours and weekends on something that you don't like. Maybe I'm exaggerating a little bit, but you get the point. I have met cases quiet similar to what I have described here, and believe me, they suck.

There are of course several problems with freelancing, one of which is marketing yourself. If you decide to be a freelancing developer, web designer, whatever, you have to search for prospective clients (checking ads in newspapers, craigslist, etc.), show them your portfolio and previous projects, and convince them that you're the one they need. The problem here is that doing this search is hard, and a lot of clients are non technical and would cause more hassle for you that your current boss.

The solution to this is to go for one of those freelancing websites, like upwork (formerly oDesk), elance (an upwork company), freelancer, guru, fiverr, etc. However, another problem shows up here. The problem with those sites is the barrier to entry. You might be the best one in your field, but you would still find it hard to land your first job. Bidders do not want to take the risk of hiring someone with no previous work reference on the platform they're using. This will cause you to lower your price to really (funny) low rates to convince people to hire you. This will also make you go to any brain dead job just to get a positive feedback. My first job on oDesk was to solve some high-schooler's programming assignments, but to keep the quality of the code low so that not to raise the teacher's suspicion (I'm not proud of that, but I needed to get in the system back in 2007)! Well, oDesk (now upwork) have a good system where you take a lot of tests to prove the skill you have, but the problems are still there. One more problem is that the clients of those platforms are mostly small companies (or individuals), which limits the cash you might get.

This is where Toptal comes in. What Toptal does is to screen all applying candidates (language, personality, skills, problem solving, etc.) to make sure they only get the top 3% of the freelance talent. By guaranteeing the talents that work with them, they have a great roaster of clients, and they set (really) good hourly rates for you. I believe that this is the best thing you can get (if you're one of the top 3% of course). I'm trying out in the next couple of weeks to join Toptal in the software development group, which is going to be great for me. I believe that I'm one of the tom 3% in my field, so I hope this is going to go fine. However, if you read this, I hope that you pray for me to do well, since I think that this might be the best option for me.

A company similar to Toptal is crossover, but the drawback they have is that they require that you work with them full time (but you get paid hourly based on the actual work). By them making you work exclusively for them, with no guarantee of the number of hours you will actually make, and now way to set your availability to be a part-timer, Toptal wins by far (IMHO).

So, this is the tenth reason why you might want to leave your job. You want independence, which is what Toptal provides.

Wednesday, August 27, 2008

The nine reasons why people quit their jobs

Did you ever quit your job for another one? Do you know someone who did that? Are you thinking of quitting your current job? I'm sure that "YES" is the answer of at least one of the previous three questions. The next question is "WHY". Why did you quit your job? Why did the person you know quit his/her job? Why are you considering quitting your job? Now the answer to those questions would differ from one person to the other, and I've heard a lot of different answers. One of the things I hate is when the person you ask begins his answer to why (s)he's quitting with "a lot of reasons". I believe that there can't be a lot of reasons, because IMHO, there can only be the maximum of nine reasons.

This article is not a top ten reasons (or a top nine reasons in our case) of why people quit their jobs. This article is about what I believe to be the nine, and the only nine, reasons of why people quit their jobs to go work in another company in the same field.

Before we start stating the nine reasons, let me state the intended audience of this article, and why those are the ones I'm targeting:
  1. HR people: I'm targeting those people since they can conduct a list of questions for exit and entry interviews, so that they can know exactly why people leave their jobs, categorize the answers into the nine reasons, calculate the percentages and weights of each reason and see where are the weaknesses and strengths of their company, so that they can try to do something to improve the company.
  2. People considering leaving their jobs: You have to categorize the reasons that make you leave your job, prioritize the nine reasons/aspects according to your needs, give them weights and do the math. Some people leave because they got sick of something, and go to place far worse than where they've been just because they got a little bit too emotional, or because they were more subjective than objective. Remember to do the math, and leave for the right reasons.
  3. Normal employees who are not considering to quit: Are you sure that you don't want to leave? Remember the grass is always greener on the other side of the fence (your neighbor's backyard :-P). Just kidding, but seriously, even if you are satisfied with where you're working, you have to do the math, at least to know what makes you so happy. Prioritize the nine reasons according to your current needs, give them weights, give scores to your company for each of the nine reasons, and see if the score is good or not. Some people are satisfied with jobs that really suck, just because they either don't know what's on the other side of the fence, or because they're afraid that their neighbor has a dog in his backyard (that's a metaphor for being afraid of taking the risk, if you haven't already got that).
I will not be talking about career change, since HR cannot convince an accountant who wants to leave to be a professional ballerina to stay. If I go into this, this will just be some useless blabbing. I'll just give it an honorable mention at the end of this post. Now let's start with the reasons:
  1. Financials: Let's face it, we all work for the money. Yeah most people try to work in a field they enjoy, but we work to pay the bills and feed ourselves and our children. When I say financials, I do not just mean the salary. Other things add up on the salary, like bonuses and the possibility of traveling a lot with a good travel allowance. A lot of people might leave a perfectly good job for another one that pays more. Those people might either have a lot of bills to pay, or maybe they're just leaving because they feel that they're being underpaid in relation to the market, even if they're not in need for the money. This situation might be really stressful to a lot of people, because they feel that they are not given what they deserve.
  2. Position: Titles are really important. First of all, your title decides your salary range. Secondly, it gives you prestige. Each of us wants to be something, and the title gives you a part of that. In the first company I worked in, there was no career path, and there were no defined titles, so both the youngest and the eldest people in the department (except for department managers and project managers) were both developers. Being a senior or a junior was highly subjective. Finally, after a lot of complaints, the company created a team (which I was proudly a part of), to create a defined career path. Well, let having a career path aside, even if there is a defined career path, some people leave their jobs to go to a job at a higher position, even if it's in a smaller company and, believe it or not, a smaller pay. They regard this as an opportunity to get the higher title, which will be their key pass to a yet better job with this higher title at a bigger company. One final point, some people might leave their job for the same position at another company where there is a higher potential for the promotion.
  3. Technical Experience: When Ed Burns asked Rod Johnson and Chris Wilson (in the interviews in Secrets of the Rockstar Programmers) about when its time to change jobs they both had similar answers. It's time to change jobs when you are not learning anything new. Similar answers were given by others in different ways. What I mean by technical experience is the experience with the tools, frameworks, syntax, etc.
  4. Professional Experience: What I mean by professional experience is soft skills, managerial skills and other professional skills like software engineering practices. Some people might leave their jobs for another one where they would increase their experience in those professional areas. Professional experience might be more important than technical experience for some people. Gaining managerial and leadership skills would surely help you get promoted and direct you into the managerial path (project manager, department manager, CEO), while technical experience will get you promoted and direct you into the technical path (architect, senior architect, CTO).
  5. Business Experience: This is an important one. Knowing the business of the telecommunication field, banking, brokerage, etc. is really helpful. You might turn into an independent consultant for such companies. Gaining experience in a certain field is the most important thing in a job at a certain time, which might get someone to leave his job to go to another one where he would gain that experience. For most people it is not that extreme, but a lot of people would like to get some business experience along with the other two types of experience.
  6. Workload: This differs a lot from one person to the other. some people hate the high workload, while other are real workaholics. Generally speaking, most people hate being overloaded, and in the same time, they hate being idle. I have seen five people from the same department quit their jobs at the same time when their project was over, and the planning for the next phase was taking a really long time. Those people felt that they were idle, and hated that. On the other hand, a lot of people quit when they find themselves working an average of fifteen hours a day for really long periods. People really need their work-life balance to be maintained.
  7. Stability: When a company is not stable, you tend to find a lot of people leaving it for their sense of insecurity, but this is not the only meaning of instability. I have seen a company that didn't have a real financial crisis, but the pay date was always a surprise. The problem was that the financial department was in KSA, while the development team was in Egypt, and salaries were sent on monthly basis. Since sometimes the financial team would like to depend on an amount of money that should be collected from a client, salaries would be delayed, sometimes for more than 15 day. Sometimes, people received their salaries before the pay day. This inconsistency/instability was really bad, and it was the main reason I left that company. The sense of insecurity that the company may fail, or that you might not be able to get your next paycheck to pay your bills might be the strongest reason why you might leave a specific company.
  8. Environment: A lot of things go under this category, from the quality of tea and coffee in the company kitchen/buffet, to the way your manager treats you. The team spirit, flexible hours, company facilities and management appreciation are all parts of the environment, and believe it or not, it's one of the biggest reasons people leave their jobs (especially regarding management appreciation and how the boss treats his employees).
  9. Benefits: The benefits system of the company is also one very important aspect that may change your mind about the place you want to go. Health insurance, discounts at selected shops/service providers, pension plans, numbers of vacation days per year, etc. are core parts of the package. I worked in a company that arranged one or two trips annually for employees at really great rates, and employees paid the expenses of the trip in six months, which is a great benefit for those who love to travel.
Those were the nine reasons that are, IMHO, the only ones that may make someone quit his job for another one. Any other reason would be either a special case of one of those nine reasons, or a combination of a subset of them. For example, you might see someone who wants to leave the company, because he needs to be in a place where he can innovate. I believe that innovation has environment, benefits and workload aspects. Some environments encourage innovation, while others don't. When a company allows you to spend some of your time that you get paid for in innovation, this guarantees that your workload will not be increased if you need to innovate, while in the same time, it is clearly a part of the benefits system in the company, since you can do something that you love in the company's time.

Another example is that when some people tell you that they're leaving their job because they live away from where they work, and they need to work somewhere which is near their homes. This has both workload and financial aspects. The time you spend going to work and coming back home is added to the number of hours that are not a part of your personal life, hence, in an indirect method affects your work load. As for the financial part, the money you spend on gas, or transportation is a part deducted from your paycheck. If a company provides buses, this would certainly affect the financial part. Additionally, if the company is flexible enough to allow you to do a part of your job while in the bus, this would surely reduce your workload.

The examples are endless, but I think that this was enough for now. The last two points I would like to tackle are career change, and a tenth very special reason for quitting a job. People change their careers for several reasons, where most of the nine reasons are included (moving to a field that pays more, or has a higher potential, etc). A reason for a career change that's not in the nine reasons is that the person might not feel comfortable in the field he/she is working in. This is something that cannot be discussed in a rational manner. You cannot convince someone to love accounting more than dentistry. This is just a matter of a personal taste, and the only way to deal with such cases is to stress on the strong aspects (from the nine reasons) of the field this person is working in compared to the weak ones to the field he/she wants to leave for, and to try to explain the risk of starting a new career from the very beginning of the career path of that field, compared to continuing in his/her current path.

Finally, the tenth very special reason that I didn't include is when a woman quits her job to give more time for her children. I believe that this is a special case of a career change, where the woman changes her career from being a professional engineer for example to being a professional mother. It also has the workload aspect, since she needs more time for her personal life, i.e. less workload. Some companies partially solved this problem by opening in-house nurseries for employees' children. This reason is similar to the cases where someone quits because he/she needs to relocate to be near his sick mother for example. Some companies can solve such cases partially by being flexible enough to accept a large portion of the work to be done from home.

I hope I covered the subject well enough. If you have any reason that you think that it isn't a special case of the nine reasons, and not a combination of a subset, please tell me so that I can enhance this article further. I know that it has bean a really long read, and I hope that it was worth your precious time.

Tuesday, August 26, 2008

Rights issue

Yesterday, I did a small search on Google to see how my blog is doing. I was searching for my ACEGI article, and I found that it made the second result on Google, and that was great. I looked at the first result, and to my surprise, it was my article, but on another blog. No, this was not a link to my article, it was THE ARTICLE. I did not put it there, and no one asked me if they would have used it. At least the article was signed by "By Nassef", but that's just my last name. If you google that, I will not show up in the top results at all. They didn't ask my permission to use the article, they didn't put a link to my blog and they didn't even put my full name. I wrote a comment stating that I was mad at the action, even though that I was flattered that the article was good enough to be referenced and used by other people. They did not have the decency of showing up my comment. All they did was to make my last name "Nassef" signing the article as hyperlink to my blog, which shows that they are not really bad people, but what about my comment? Why didn't it show up? Why didn't I receive an apology, by mail at least? Isn't this the decent thing to do? Anyway, I'm both glad that the article was good enough to be used as reference, but I'm really disappointed due to the fact that I had to discover that my article was on another blog for about a year now without a clear reference to me.

Saturday, August 23, 2008

A facelift for my blog

Yeah, it really needed the redesign. I really got sick by the dark theme, and I really wanted a three column design. Anyway, I'm happier with this new design, and I'm planning to be writing some really interesting articles in the really near future, so be prepared ;).

Wednesday, May 7, 2008

Problem with Apache's Axis2 1.4 Download

Version 1.4 of Axis2 was released five days ago. I was trying to download it, but I'm getting an internal server error when I try to get to the download page of version 1.4. I sent an email to the webmaster, but until they get that fixed, you can download it from any mirror. Well, I'm currently downloading it from http://apache.hoxt.com/ws/axis2/1_4/. Thought you'd like to know, in case you want to download it and face the same problem.

EDIT 8 May 2008:
Download link in apache website now working

Tuesday, May 6, 2008

Bubble Wrap, Hani Suleiman and Logging Abstraction

Let's imagine that you are in an antique shop and a beautiful vase or a statue caught your eye and you thought of buying it, either for yourself or as a gift for a friend. You look at the price tag, and you find that it has a reasonable price. You compare it with the other antiques in the shop, and you decide that this is the one that you want.

You then call for the sales person to take the antique (let's just say that it's a vase) that you chose to the cashier, where you go to pay for it, and to, more importantly, choose the box! Why a box? And why is it that important?

Well, imagine going home with this vase un-boxed. The risk of it shattering, or at least getting a part chipped off is quiet high, and you wouldn't like this to happen, would you? Boxing is very important for reducing the risk of your vase getting broken or chipped off. But there's one more thing. The vase you chose is an antique hand made vase. It did not come out of a production line that produces thousands of replicas. It is one of a kind, handcrafted by a craftsman somewhere in the world, so it does not have a box specifically made for it with an image of the vase printed on it. You'll have to choose a box that will suit your needs. You can choose a fancy looking box if this is going to be wrapped as a gift, or you can choose a cheap box if you just want to take the vase home, and don't care about the box. The box can be made out of paper, cardboard or wood. You have the freedom of choice, and you have a really large variety to choose from, because this antique shop has got everything.

So, you choose a box that suites your needs, and now everything is OK, right? No, it's not OK. If the vase does not fit the box exactly, then you'll be facing some trouble, because the vase might break inside the box after banging to the walls of it a several times. Even if it's a perfect fit, you still have a problem. What if you decide to buy a cheap ugly looking wooden box, that is a perfect fit, but after going home, you remember that your best friends birthday is next week, you didn't get him/her a gift, and this vase matches his/her taste exactly. You'll certainly need to get a new fancy box for the occasion instead of the cheap ugly one. What will you be doing then?

Cushioning is the answer. Foam peanuts, styrofoam and bubble wrap are all great ways to cushion your valuable vase in the box that suites your needs. If you'd ever need to change boxes, there will be no problem, since you can wrap your vase in bubble wrap, and you're done. After all, this is what bubble wrap is good for (even though some people think that it's good for annoying other people by popping them in public).

What does all of the above have to do with anything? Well, let the vase be a software product, the box be the logging framework and the bubble wrap be the logging abstraction framework. That simple! You buy the software solution because this is what you want, but you need logging to trace transactions and exceptions that occur in the system, so you can tell the vase manufactures, sorry, the software vendor to give you patches that fix those problems. Using a logging abstraction framework helps you changing the logging framework very easily, without the need to change anything your software. Imagine having to change the vase, simply because the fancy box you got to put it into for your friend doesn't fit. It would be insane, wouldn't it.

OK, so what about Hani Suleiman? He's the CTO of a consulting company, and the owner of the controversial BileBlog. He's also a member of the executive committee of the JCP, and on the expert group of several specification requests. In his last post before his disappearance from the blogsphere (which was 9 months ago), he was ranting about Tapestry's creator, Howard Lewis Ship, moving from ACL (that's Apache Commons Logging, not Anterior Cruciate Ligament :P), more commonly known as clogging or JCL, to SLF4J. He was referring to Howard's blog entry, which didn't give much technical details (actually no technical details) on SLF4J in my humble opinion.

Well, I have to disagree with Hani here. Even though Log4J is one of the most widely used logging framework, it's not the best. You've got Logback for example, which was created by the founder of Log4J, and has several performance enhancements. You also have a lot of other logging frameworks, and it's totally wrong to force your consumer to use one of your choice.

When you are developing a framework (like the case of tapestry), you should never tie the users with a specific logging framework. I, for instance, like to use logback instead of the de-facto log4j. Being tied to a single implementation is really frustrating. You should be able to change the box if you want. I know that what you actually want is the vase, but if you have no choice but taking it an ugly cheap looking box, and no bubble wrap, you might think of purchasing another vase from another shop, just because you can't possibly give your friend a gift in this ugly box.

He casualy flaps his michelin man arms about about how easy it’ll be for everyone to migrate, and how its no big deal to CHANGE EVERY SINGLE F****** SOURCE FILE YOU HAVE.
This is what Hani says in his blog, and again I wonder how would a man of his position imagine something like that? SLF4J is intended to be a drop-in replacement to clogging. You just have to read the manual (which is quiet small by the way). You can just drop in slf4j.jar and slf4j-jcl.jar in your class path in place commons-logging.jar, and you're done. Now you can use bubble wrap instead of foam peanuts!

Even if you're developing a product or a system, it's a bad practice to tie yourself with the concrete implementation of, well, anything. It's the ABC of design. You have to decouple yourself from everything. You have to "DESIGN TO INTERFACES", and this is why abstraction is so important.

Dear Hani, I have to totally disagree with you on that subject. Even if you are annoyed by people constantly popping up the bubbles in the bubble wrap, this doesn't mean that bubble wrap is a bad thing. Eliminating the use of the bubble wrap would make buying the vase a great risk, since it may break, or get chipped off. Not cushioning your antiques is a bad practice. Even if you get a box where the vase fits in perfectly, without the bubble wrap, you'll not be able to change the box (logging framework) without totally redesigning the vase :D.

The only exception to the above is with log4j and slf4j. Slf4j took the liberty of creating a drop-in jar that is intended to redirect the calls made to log4j to slf4j. This is done so that if you are using a library that calls log4j directly, and you want to use some other logging framework via slf4j. Anyway, I again repeat and insist that using a logging framework directly without an abstraction layer is totally wrong. It's like putting your valuable vase in a large wooden case in the back of your car while driving on a bumpy road, without any bubble wrap!

One last thing. Some people speculated that one of Hani's subjects waited for him in a dark alley and killed him, since it's been 8 months now since his last post. Actually, Hani is still alive, but he seems pretty busy to be blogging about anything these days. He is on the industry reviewers list of two tracks of this years JavaOne. He also had a couple of comments on a blog post, and was interviewed in February by InfoQ. Good to hear that he's still alive.

At the end, if you are a fan of popping up bubble wrap, you'll like this. Another thing, the bubble wrapped statue image was taken by Japh in the British Museum back in 2004. I contacted him to ask for his permission to use it. He gave me his permission to use it.

Monday, April 28, 2008

NetBeans 6.1

NetBeans 6.1 was released several minutes ago, and it does have some cool new features. Well, some aren't entirely new, like the JSF CRUD generation feature and java beans support that were missing from 6.0 have returned. It also has some major performance enhancements (up and above the really great performing 6.0) including an up to 40% faster startup time, lower memory consumption and increased responsiveness while working with large projects.

A lot of other features are present. Two of the best for me are the rich javascript editing features and spring framework support (including spring web framework). MySQL is supported in this release (no wonder, since it's now owned by Sun :D), and you can add a server to the DB explorer, view, create and delete databases easily with lots of other operations.

Code completion for JavaDoc is now present in this release, which is really convenient. For the Ruby/JRuby, the support has been enhanced a lot with editor quick fixes, a Ruby platform manager, fast debug for JRuby, and other enhancements.

Better shareablity of projects is also a great feature, where you can create projects that share definitions of libraries. Axis 2 support for web services have been added as well as SOAP UI integration for web service testing and monitoring. I also love the new semi-transparent windows, which may add (a little) to the productivity (you won't have to minimize and restore a lot to see what's going on in other windows), in addition of it being a real eye candy.

Another feature that I really like is that now the inspect members and hierarchy actions now work with classes that the source code is not present for (like 3rd party libraries that do not have an attached source). This is really great.

This was a summary of the new features of 6.1. For the full list of features, you can see this link. Bugs reported between December 2007 and March 2008 were fixed too. Of course I expect the release of 6.1.1 about a month or so later this year to fix any bugs that come up after this release. The next major release (6.5) is planned for October the 2nd. Keep the good work going.