<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Sankofa &#187; Software Development</title>
	<atom:link href="http://blog.ianuy.com/tag/software-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.ianuy.com</link>
	<description>From Script Kiddie to Professional Software Developer</description>
	<lastBuildDate>Fri, 31 Dec 2010 17:42:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>On the High Turnover Rate of Software Developers or How to Retain your Best Software Developers and Programmers</title>
		<link>http://blog.ianuy.com/2010/09/26/on-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers/</link>
		<comments>http://blog.ianuy.com/2010/09/26/on-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers/#comments</comments>
		<pubDate>Sun, 26 Sep 2010 11:10:40 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Programmers]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=943</guid>
		<description><![CDATA[
 It is not exactly news that programmers love to quit their job. It is an industry-wide obsession. The annual turnover rate for the High-Tech industry in 2008 is a little bit above 20% (2 out of 10 employees quit every year). A typical programmer on a typical software company stays for about 23 months [...]]]></description>
			<content:encoded><![CDATA[<p><iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;layout=standard&amp;show_faces=true&amp;width=450&amp;action=like&amp;colorscheme=light&amp;height=80" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:70px;" allowTransparency="true"></iframe><br />
<a href="http://blog.ianuy.com/wp-content/uploads/2010/09/resign.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_resign" src="http://blog.ianuy.com/wp-content/uploads/2010/09/resign_thumb.jpg" border="0" alt="_resign" width="278" height="278" /></a> It is not exactly news that programmers love to quit their job. It is an industry-wide obsession. The annual turnover rate for the High-Tech industry in <a title="Turnover data collected by CompData" href="http://compforce.typepad.com/compensation_force/2009/03/2008-turnover-rates-by-industry.html" target="_blank">2008</a> is a little bit above 20% (2 out of 10 employees quit every year). A typical programmer on a typical software company stays for about 23 months on average. For an employer, these figures are scary – especially if you employ skilled workers such as programmers and software developers. High turnover rates of skilled professionals can pose as a risk to the business or organization, due to the human capital (such as skills, training, and knowledge) lost.</p>
<p>Having been a newbie software developer (and I’m still fairly “new”), I did not understood why software developers in our company are quitting. Having been a fresh graduate, I was, then, still amazed by the fact that there are people out there in the real world that will pay me real world money just to write code – a hobby that I will do for free. I was puzzled. We are working in an environment that fosters creativity and innovation, a company that strictly subscribes to the “<a title="Thou shall have two monitors!" href="http://www.codinghorror.com/blog/2006/08/the-programmers-bill-of-rights.html" target="_blank">programmers’ bill of rights</a>”, and a company that scores high in the <a title="Hell yeah, we use souce control. Who doesn't?" href="http://www.joelonsoftware.com/articles/fog0000000043.html" target="_blank">Joel Test</a> (11/12).  Those, plus the fact that we can surf Facebook anytime and drink all the brewed coffee in the pantry, made me believe that this is the best company to work for locally; it made me believe that anyone leaving our company is insane.</p>
<p><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/1783Hackers_and_Painters_Big_Ideas_from_the_Computer_Age.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_1783-Hackers_and_Painters_Big_Ideas_from_the_Computer_Age" src="http://blog.ianuy.com/wp-content/uploads/2010/09/1783Hackers_and_Painters_Big_Ideas_from_the_Computer_Age_thumb.jpg" border="0" alt="_1783-Hackers_and_Painters_Big_Ideas_from_the_Computer_Age" width="159" height="242" /></a> Just a few months after starting my job (I had my internship there for 6 months), one of the <strong>bestest</strong> programmer I know (he’s actually a “software architect”, but hates being called one), my mentor when I was still an intern, filed his letter of resignation. This guy is one of the most passionate programmer I know. He gets it. <a title="Hackers and Painters" href="http://blog.ianuy.com/2009/09/17/ordinary-programmers-vs-great-hackers/" target="_blank">Paul Graham</a> classifies him as a hacker and he actually worked for Microsoft (in Redmond, not the local whatever-they-are-doing-there branch).</p>
<p>For some, asking people why they quit their job is taboo; I actually enjoy having those type of conversation. Gives me insight. So I asked the fallen hacker, “<strong>Why did you quit?</strong>”. He pointed to the picture of his new born baby (his desktop wallpaper) and said with an enthusiastic smile “<strong>He is my new priority</strong>”. He then explained to me, in a fashion that I would understand, why working overseas means “better opportunity” for his family. Being a bit unconvinced with his explanation, I asked him “<strong>Is that all? Better opportunity</strong>?” and he replied back with a playful smile, “<strong>In my new job, I will be able to code again. I will no longer be a ‘Word Programmer’”</strong>. He has always joked about being a Word Programmer – programming in Microsoft Word using narrative texts (use cases, scenarios, etc) and <a title="Those documents with boxes and lines and tiny little captions" href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" target="_blank">UML diagrams</a>; programming by story telling. He was indeed a hacker.</p>
<p>Having spent a year and a half on this job, I can say that I now have a vague idea on why programmers (or I.T people, in general) quit. Even though I’m only a year-and-half year old in corporate servitude, I had been handled by four managers and had been transferred to four teams and that gave me great insights on the crucial dynamics that affects employee turnovers. In my year-and-half stay, I have seen three managers, a project manager, two architects, four senior developers and a handful of intermediate developers go. Just a few months ago, four of my teammates left. The statistics above is a little off; <strong>it is more than 20%</strong>.</p>
<p><span id="more-943"></span></p>
<h1>So why do programmers quit?</h1>
<p><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/twofactormodel.png"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_two-factor-model" src="http://blog.ianuy.com/wp-content/uploads/2010/09/twofactormodel_thumb.png" border="0" alt="_two-factor-model" width="459" height="341" /></a> There are a lot of <a title="Models of Turnover" href="http://en.wikipedia.org/wiki/Turnover_%28employment%29#Models_of_turnover" target="_blank">models</a> that scientifically explains turnover, but most of them does not really cover the programmers psyche because most of them are written three decades ago. These <a title="Two factor theory" href="http://en.wikipedia.org/wiki/Two_factor_theory" target="_blank">models</a> are not exactly wrong; they just don’t capture how programmers think and react.</p>
<p>So let me present to you my model. Let’s call it the Programmer Turnover Model. There are only two controlling variables on this model: <strong>Opportunities</strong> and <strong>Grievances</strong>. When these two factors achieve “equilibrium” (fancy word eh?), the employee will finally pull the trigger and call it quits. Seldom do I see or hear that a programmer quits just by one of these controlling variables; <strong>it is usually a combination of both</strong>. But it is not unheard of that an employee quits just because of opportunities or grievances: If you’re boss is verbally abusing (Grievances) you everyday, that is enough reason to quit.</p>
<h2>Opportunities</h2>
<p><strong><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/grassgreener.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_grass-greener" src="http://blog.ianuy.com/wp-content/uploads/2010/09/grassgreener_thumb.jpg" border="0" alt="_grass-greener" width="349" height="286" /></a> </strong><strong>Opportunities</strong> are the voice inside us that always yells “The grass is greener on the other side”. It is the greedy side of the human emotion. It is the human emotion that seeks larger paychecks and better benefits.</p>
<p><strong>Programmers have all the incentives in the world to quit</strong>. In fact, if you want to suddenly increase your salary, all you have to do is quit your job and find another one. A 25% increase in salary between job hops is typical. In fact, most local programmers do it. You don’t even need to be highly competent to do this; you just need to impress the interviewers and pass the interview. In an industry that caters to outsourced work (typically boring business systems) and software maintenance jobs, the bar that is being set is not that high (not “Google high”). Fact of the matter is, most grown-ups (including my mom) advice I.T. workers to just “get a few years of experience and switch jobs”.</p>
<p>Local industry culture believes that the sooner you get overseas, the better it is for you. Those programmers that work or have worked overseas are perceived to be “successful”. And what better way to increase your chance working abroad than to beef-up your resume with “experiences”? Not only that you get larger paychecks and better benefits when hopping jobs, you also <strong>get a set of fresh credentials to put into your resume</strong>. When you work for a single company, you’re stuck with their technology. And in an industry where your skills are obsolete within five years (max), being stuck in a technology is a really really bad thing for you.</p>
<p>It seems that the game is rigged for the employers. Employers are nearly powerless in stopping the greedy side of human emotion. Aside for paying large sums of cash to these spoiled programmers, they incur the risk of losing expensive human capital. All hope is not lost, the human emotion provides some form of protection against job hoppers. The loving side of the human emotion.</p>
<p>A few moments ago, I made it sound that it is so easy to job hop. Well, it is for soulless programmers (and about half of programmers are). But programmers are human too and they possess some of that soft, caring, vulnerable human emotion. People just don’t quit their job out of greediness. They are attached to their officemates, they been used to the smell of that particular brand of brewed coffee in the morning, they love how their $5 dollar computer chair squeaks when they lean back while waiting for their programs to compile, they love those once-a-month company parties, they know their way into their programs and they’re quite competent in it, they love to see their crush on the opposite cubicle, they are considered the domain expert inside the department. <strong>Humans resist change because attachments are hard to break.</strong></p>
<p>It is painful to leave a company and that is what stops most people to quit their job even if they know that there are better opportunities out there.</p>
<h2>Grievances</h2>
<p><strong><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/ihatemybossbutton.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_i-hate-my-boss-button" src="http://blog.ianuy.com/wp-content/uploads/2010/09/ihatemybossbutton_thumb.jpg" border="0" alt="_i-hate-my-boss-button" width="235" height="247" /></a> </strong><strong>Grievances </strong>are the devil’s advocate that whispers “Stop taking this sh*t and quit”. <strong>Opportunities </strong>provide all the incentives in the world to switch jobs and although the touchy human emotion tells us to stay because it is painful to leave, grievances makes it justifiable and easy to quit.</p>
<p>Grievances builds up over time that’s why it’s hard to avoid it. It stacks up high. Each person have a certain threshold on how high they can keep their grievances stack before it falls down and crumble (translation: Each person can only take so much bullshit).</p>
<p>There are many forms of grievances, but all of them contributes to the metaphorical grievances stack:</p>
<ul>
<li>My company is still coding in Cobol when there are better technologies available.</li>
<li>We don’t have source control.</li>
<li>My boss is a back-seat driver. His hobbies are micromanagement and micromanagement.</li>
<li>The elevator takes forever.</li>
<li>The air conditioner is too cold.</li>
<li>The code base is so poorly written that it breaks in 27 different places when you add a single line of code. The previous developer maintaining the code base is a literal arts major.</li>
<li>We are responsible for testing our own code.</li>
<li>My teammates are bozos.</li>
<li>I hate my project. It’s not fun and exciting. It’s grunt work.</li>
<li>I have written just 150 lines of code in the last 2 years.</li>
</ul>
<p>Grievances have many forms but grievances are simply things that gets listed down in the “I do not want” column of your employees checklist.</p>
<p>The good thing about grievances is that managers and employers can manage and control them. Unlike <strong>Opportunities</strong> where employers are powerless, Grievances can be managed and controlled. It’s not easy but it’s doable. And the first thing that needs to happen is <strong>communication</strong>.</p>
<p><strong>If you’re an employer/manager working with programmers, understand that your programmers have all the incentives in the world to leave you for better opportunities. Do not make it easy for them by giving them reasons to quit.</strong></p>
<h1>The Price of Turnover in Software Development</h1>
<p><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/mythicalmanmonth.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_mythical-man-month" src="http://blog.ianuy.com/wp-content/uploads/2010/09/mythicalmanmonth_thumb.jpg" border="0" alt="_mythical-man-month" width="206" height="293" /></a> In his influential book, “<a title="READ THIS NOW" href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959" target="_blank">The Mythical Man-Month</a>”, Fred Brooks emphasized the importance of <strong>Conceptual Integrity</strong> in software design and architecture:</p>
<blockquote><p>Most European cathedrals show differences in plan or architectural style between parts built in different generations by different builders. The later builders were tempted to &#8220;improve&#8221; upon the designs of the earlier ones, to reflect both changes in fashion and differences in individual taste. So the peaceful Norman transept abuts and contradicts the soaring Gothic nave, and the result proclaims the pridefulness of the builders as much as the glory of God.</p>
<p>Against these, the architectural unity of Reims stands in glorious contrast. The joy that stirs the beholder comes as much from the integrity of the design as from any particular excellences. As the guidebook tells, this integrity was achieved by the self-abnegation of eight generations of builders, each of whom sacrificed some of his ideas so that the whole might be of pure design. The result proclaims not only the glory of God, but also His power to salvage fallen men from their pride.</p>
<p>Even though they have not taken centuries to build, most programming systems reflect conceptual disunity far worse than that of cathedrals. <strong>Usually this arises not from a serial succession of master designers</strong>, <strong>but from the separation of design into many tasks done by many men</strong>.</p>
<p><strong>I will contend that conceptual integrity is the most important consideration in system design</strong>. It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas, than to have one that contains many good but independent and uncoordinated ideas.</p></blockquote>
<p>The conceptual integrity of software is a measure of how well software conforms to a single, simple set of design principles. When done properly, it provides the most <a href="http://en.wikipedia.org/wiki/Function_%28engineering%29">functionality</a> using the simplest <a href="http://en.wikipedia.org/wiki/Programming_idiom">idioms</a>. It makes software easier to use <strong>by making it simple to create and learn</strong>.</p>
<p>Conceptual integrity is achieved when the software’s design proceeds from a small number of agreeing individuals. For software to maintain conceptual integrity, the design must be controlled by a single, small group.</p>
<p>When turnover is high, the conceptual integrity of your product is being sacrificed. And because conceptual integrity is the most important consideration in system design, having bad conceptual integrity will make your product hard to use. This in turn will affect your sales and eventually your bottom line.</p>
<p>Not only will the loss of conceptual integrity of your product negatively affects your sale, it will also affect the morale of your best programmers. High turnover rates induces the <strong><a title="The codebase stinks" href="http://en.wikipedia.org/wiki/Software_Peter_principle" target="_blank">Software Peter Principle</a></strong>:</p>
<blockquote><p>The <strong>software Peter principle</strong> is used in <a href="http://en.wikipedia.org/wiki/Software_engineering">software engineering</a> to describe a dying project which has little by little become too complex to be understood even by its own developers.</p>
<p>It is well known in the industry as a silent killer of projects, and by the time the <a href="http://en.wikipedia.org/wiki/Symptom">symptoms</a> arise it is often too late to do anything about it. Good managers can avoid this disaster by establishing clear coding practices where unnecessarily complicated code and design is avoided.</p></blockquote>
<p>When your project becomes too complex to be understood by your best programmers, they will be naturally be forced to rewrite it. They will go into their manager’s office and ask for a re-write, the manager’s will then disagree because there are no “business reasons” to do so (and maybe they are right because “<a title="Things you should never do" href="http://www.joelonsoftware.com/articles/fog0000000069.html" target="_blank">rewriting is probably the ‘single worst strategic mistake that any software company can make</a>’”), so you’re best programmers go back to their cubicle grumpy and dives into the unmaintainable piece-of-crap that is your codebase. Soon, they quit (because there are better opportunities and you gave them enough reason to leave you).</p>
<p>The managers then instruct their H.R. people to hire a new software developer to maintain the unmaintainable codebase. But since the programmer is new, and inexperienced,  he makes implementation choices that work but have unintended negative consequences. Further degrading the conceptual integrity of your product; making it increasingly difficult to understand. It’s a death spiral.</p>
<p>If there is one thing that the best programmers hate other than maintaining crappy software, it is working with incompetent programmers. And because you have a crappy codebase and you need software “maintainers” to maintain your codebase, you hire cheap, incompetent programmers and that will send you down further in the death spiral. <a title="What Happened to Yahoo?" href="http://www.paulgraham.com/yahoo.html" target="_blank">Paul Graham</a> puts it nicely in his essay “What Happened to Yahoo!”:</p>
<blockquote><p>Microsoft (back in the day), Google, and Facebook have all been obsessed with hiring the best programmers. Yahoo wasn&#8217;t. They preferred good programmers to bad ones, but they didn&#8217;t have the kind of single-minded, almost obnoxiously elitist focus on hiring the smartest people that the big winners have had.</p>
<p>Why would great programmers want to work for a company that didn&#8217;t have a hacker-centric culture, as long as there were others that did? I can imagine two reasons: if they were paid a huge amount, or if the domain was interesting and none of the companies in it were hacker-centric. Otherwise you can&#8217;t attract good programmers to work in a suit-centric culture. And without good programmers you won&#8217;t get good software, no matter how many people you put on a task, or how many procedures you establish to ensure &#8220;quality.&#8221;</p>
<p><strong>In technology, once you have bad programmers, you&#8217;re doomed.</strong> I can&#8217;t think of an instance where a company has sunk into technical mediocrity and recovered. Good programmers want to work with other good programmers. So once the quality of programmers at your company starts to drop, you enter a death spiral from which there is no recovery.</p></blockquote>
<p>Turnover reduces the conceptual integrity of your product. When there is no conceptual integrity, your product becomes hard to use and hard to maintain for programmers. The programmers maintaining the products hate the code so much that they quit. You hire new inexperienced programmers that further reduces the conceptual integrity of your product. You enter into a death spiral and you can no longer attract the best programmers because your <a title="In computer programming, code smell is any symptom in the source code of a program that possibly indicates a deeper problem." href="http://en.wikipedia.org/wiki/Code_smell" target="_blank">code stinks</a>. You enter another death spiral from which there is no recovery. <strong>That is the price of high turnover in software development: You lose your best talents then you lose your product and eventually your company.</strong></p>
<h1>How <span style="text-decoration: underline;">NOT</span> to Retain your Best Software Developers and Programmers</h1>
<p><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/slavery.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_slavery" src="http://blog.ianuy.com/wp-content/uploads/2010/09/slavery_thumb.jpg" border="0" alt="_slavery" width="280" height="216" /></a> One of the most popular form of “employee retention” is Training Bonds. Although it is not legally enforceable (or if it is but the company won’t really run after you because it is expensive to sue), most bright programmers will never sign a training bond. For most hackers, a training bond is a sign that a company is being ran by “suits”. <a title="NDAs and Contracts That You Should Never Sign" href="http://www.joelonsoftware.com/articles/fog0000000071.html" target="_blank">Joel Spolsky</a> attributes training bonds to “<strong>blind loyalty</strong>”:</p>
<blockquote><p>I think that companies need to keep their employees loyal by <strong>treating them well</strong>, not by enforcing blind loyalty though a contract. I am not going to make the mistake of signing this clause again. Fortunately, with today&#8217;s shortage of qualified programmers, the balance of power today is sharply in your favor when you start a new job, and I think you have a very high chance of getting a job without signing restrictive employment clauses.</p></blockquote>
<p><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/counteroffer.jpg"><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_counteroffer" src="http://blog.ianuy.com/wp-content/uploads/2010/09/counteroffer_thumb.jpg" border="0" alt="_counteroffer" width="235" height="244" /></a> Another popular form of employee retention mechanism is <strong>counter-offer</strong>. Counter-offer is when your current employer gives you an offer (counter-offer) that is larger than the offer you received from the company you intend to jump to. Counter-offer is a big no-no because it sends the following message to your employee:</p>
<blockquote><p>We have not really paid you the amount you deserve. But since we really need you to stay, we are willing to pay you more. We don’t think that you deserve this, but our hands are tied.</p></blockquote>
<p>It is much worse when the news of a counter-offer leaks to your other employees. They will also feel that they are not being paid the amount they deserve, they will feel cheated and eventually quit. More turnovers, yay! <strong>Always remember the bribery never promotes loyalty</strong>.</p>
<p><a href="http://blog.ianuy.com/wp-content/uploads/2010/09/incentive_pay.jpg"><span style="color: #000000;"> </span><img style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top: 0px; margin-right: auto; border-right: 0px" title="_incentive_pay" src="http://blog.ianuy.com/wp-content/uploads/2010/09/incentive_pay_thumb.jpg" border="0" alt="_incentive_pay" width="164" height="241" /></a> If you think bribing your programmers when they accomplish something extraordinary will increase their loyalty: <strong>you are wrong</strong>. A lot of <a title="Peopleware: Productive Projects and Teams" href="http://www.amazon.com/Peopleware-Productive-Projects-Teams-Second/dp/0932633439" target="_blank">books</a> have been written on the subject of <strong><a title="Incentive Pay Considered Harmful" href="http://www.joelonsoftware.com/articles/fog0000000070.html" target="_blank">incentive pay and why it is considered harmful</a></strong>:</p>
<blockquote><p>… <strong>&#8220;incentives (or bribes) simply can&#8217;t work in the workplace&#8221;</strong>. DeMarco and Lister go further, stating unequivocally that any kind of workplace competition, any scheme of rewards and punishments, and even the old fashion trick of &#8220;catching people doing something right and rewarding them,&#8221; all do more harm than good. Giving somebody <em>positive</em> reinforcement (such as stupid company ceremonies where people get plaques) implies that they only did it for the lucite plaque; it implies that they are not independent enough to work unless they are going to get a cookie; and it&#8217;s insulting and demeaning.</p></blockquote>
<p>I know that the title says “How to Retain your Best Software Developers and Programmers”, but I was only able to give the “How NOT to do it” guide. It took me a year-and-a-half to understand what motivates programmers to quit their job. It may take me another year-and-a-half to understand how to motivate them to <strong>NOT</strong> quit their jobs. You may wait for it, or you can just read <a title="Software Development Bible" href="http://www.joelonsoftware.com/" target="_blank">Spolsky’s blog</a> for a complete guide on how to manage and retain the best programmers that you will ever find.</p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;title=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers&amp;bodytext=%0D%0A%20It%20is%20not%20exactly%20news%20that%20programmers%20love%20to%20quit%20their%20job.%20It%20is%20an%20industry-wide%20obsession.%20The%20annual%20turnover%20rate%20for%20the%20High-Tech%20industry%20in%202008%20is%20a%20little%20bit%20above%2020%25%20%282%20out%20of%2010%20employees%20quit%20every%20year%29.%20A%20typical%20programmer%20o" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;title=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;title=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers&amp;notes=%0D%0A%20It%20is%20not%20exactly%20news%20that%20programmers%20love%20to%20quit%20their%20job.%20It%20is%20an%20industry-wide%20obsession.%20The%20annual%20turnover%20rate%20for%20the%20High-Tech%20industry%20in%202008%20is%20a%20little%20bit%20above%2020%25%20%282%20out%20of%2010%20employees%20quit%20every%20year%29.%20A%20typical%20programmer%20o" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers%20-%20http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;t=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;t=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;title=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers&amp;annotation=%0D%0A%20It%20is%20not%20exactly%20news%20that%20programmers%20love%20to%20quit%20their%20job.%20It%20is%20an%20industry-wide%20obsession.%20The%20annual%20turnover%20rate%20for%20the%20High-Tech%20industry%20in%202008%20is%20a%20little%20bit%20above%2020%25%20%282%20out%20of%2010%20employees%20quit%20every%20year%29.%20A%20typical%20programmer%20o" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2010%2F09%2F26%2Fon-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers%2F&amp;title=On%20the%20High%20Turnover%20Rate%20of%20Software%20Developers%20or%20How%20to%20Retain%20your%20Best%20Software%20Developers%20and%20Programmers" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2010/09/26/on-the-high-turnover-rate-of-software-developers-or-how-to-retain-your-best-software-developers-and-programmers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Importance of a Dedicated Build Machine</title>
		<link>http://blog.ianuy.com/2009/06/07/the-importance-of-a-dedicated-build-machine/</link>
		<comments>http://blog.ianuy.com/2009/06/07/the-importance-of-a-dedicated-build-machine/#comments</comments>
		<pubDate>Sun, 07 Jun 2009 14:36:59 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding Horror]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=374</guid>
		<description><![CDATA[
When I was an Intern at a large Global 500 company, my major responsibility is to deliver a Software Delivery process that uses the software engineering practice called Continuous Integration. In simple terms, I am responsible for a project to create and setup a Continuous Integration Build Server that will be used to &#8220;build&#8221; the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.ianuy.com/wp-content/uploads/2009/06/serverroom_3.jpg"><img class="aligncenter size-medium wp-image-375" title="Build Server" src="http://blog.ianuy.com/wp-content/uploads/2009/06/serverroom_3-200x300.jpg" alt="Build Server" width="200" height="300" /></a></p>
<p>When I was an Intern at a large Global 500 company, my major responsibility is to deliver a <a title="Software Delivery" href="http://en.wikipedia.org/wiki/Software_delivery" target="_blank">Software Delivery</a> process that uses the software engineering practice called <a title="Continuous Integration" href="http://en.wikipedia.org/wiki/Continuous_integration" target="_blank">Continuous Integration</a>. In simple terms, I am responsible for a project to create and setup a Continuous Integration Build Server that will be used to &#8220;build&#8221; the company&#8217;s products.</p>
<p>During those days, when I hear the word &#8220;build&#8221; or &#8220;compile&#8221;, the first thing that comes into mind is to press the F5 button. Ever since I started programming, when someone asks me for a copy of my program or if I need to distribute the &#8220;binaries&#8221; of my program, all I do is press the F5 button to create an EXE (sometimes with a DLL), then browse to the output folder(Bin) and copy the binaries. Suffice to say, that is my &#8220;Software Delivery&#8221; process however crude it is.</p>
<p>In College, I got a little bit more sophisticated. My major projects are all carefully packaged in a very neat MSI installer &#8212; but that is just for the major projects. Most of my standalone tools are still made using the &#8220;Press F5 button to build&#8221; method. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </p>
<p><span id="more-374"></span></p>
<p>So you can just imagine my horror when the Software Architect presented me my task on my first day at work. I don&#8217;t know anything about Software Delivery, more so Continuous Integration. What is more scary is that I am expected to deliver my output in just 240 hours (my Internship duration). But thru the continuous support of the said Software Architect, I somehow managed to cram the concept of Software Delivery and Continuous Integration in just 2 weeks. Also, <a title="Expert .NET Delivery Using NAnt and CruiseControl.NET" href="http://www.apress.com/book/view/1590594851" target="_blank">this book</a> helped a lot, too!</p>
<p style="text-align: left;">
<div id="attachment_379" class="wp-caption aligncenter" style="width: 238px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/06/1590594851500fm6.gif"><img class="size-full wp-image-379" title="Expert .NET Delivery Using NAnt and CruiseControl.NET" src="http://blog.ianuy.com/wp-content/uploads/2009/06/1590594851500fm6.gif" alt="Expert .NET Delivery Using NAnt and CruiseControl.NET" width="228" height="301" /></a><p class="wp-caption-text">Expert .NET Delivery Using NAnt and CruiseControl.NET</p></div>
<p style="text-align: left;">The build process that I created is quite simple and somewhat standard. However, there was a special requirement that the test harness be run on a different machine and that made the build process a little bit more complicated. This are the different stages of my build process:</p>
<ol>
<li><strong>Clean-up: </strong>Before starting a new build, delete all the previous directories (Source codes, Artifacts, etc.)</li>
<li><strong>Fetch: </strong>Get the latest copy from the source code repository</li>
<li><strong>Build:</strong> Compile the different projects</li>
<li><strong>Archive: </strong>Tag the build then archive it</li>
<li><strong>Test: </strong>Run the unit tests, measure code coverage and perform static code analysis</li>
<li><strong>Feedback: </strong>Provide feedback by generating reports (with beautiful graphs!) <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </li>
</ol>
<div id="attachment_380" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/06/graph.png"><img class="size-medium wp-image-380" title="CruiseControl.NET Build History" src="http://blog.ianuy.com/wp-content/uploads/2009/06/graph-300x239.png" alt="CruiseControl.NET Build History" width="300" height="239" /></a><p class="wp-caption-text">CruiseControl.NET Build History</p></div>
<p>The build process will automatically check for any changes in the Source Code Repository every 15 minutes, if it detects any change in the code, it will automatically start the build process. That is one of the advantage of using Continuous Integration &#8212; there is no need for a costly &#8220;Integration&#8221; phase.</p>
<p>In my <a href="http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/" target="_blank">previous blog posts</a>, I&#8217;ve mentioned that I am working on a certain product that will be shipped later this month. Well, that project is nearing its completion. We now have a &#8220;Beta&#8221; build for our product and it won&#8217;t be long before an official Release Candidate is available.</p>
<p>During our weekly status meeting, I brought up a concern regarding how we are building our Beta builds that are being sent to the Test Department. Our current Build Machine (which is physically located locally) also acts as our Development Machine. All of the development activities like bug fixing are being done on the Build Machine. If you are REALLY REALLY careful, this is fine but still, a little bit crazy. But since we are Software Developers, we are never too careful. We are programmers, we cause accidents. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </p>
<p>So why is it important to have a dedicated build machine? Here&#8217;s why.</p>
<ol>
<li><strong>Pristine</strong> &#8211; You want to keep the build machine as clean as possible to make sure that only the needed resources are being included in the build. If your build machine also acts as your development machine, keeping a pristine state is a very tough task. When I inspected our latest Beta build, I was shocked to see that there are *.pdb (debug) files included in the install image.</li>
<li><strong>Control </strong>- It is very important to control your Build Environment. All of your builds must be coming from a standard setup from a standard state. The keyword here is standard. This means that the &#8220;exact state&#8221; of the machine used in creating Build 001 should also be used in creating Build 002. When you use your Build Machine as a Development Machine, it is almost impossible to maintain this &#8220;exact state&#8221; every time for every build. When we were migrating our product from SQL 2000 to SQL 2005, we added the SQL2005 installer to our local build machine but somehow, someone forgot to add the SQL 2005 installer to the source code repository. When we tried building from a new build machine, the installer would no longer work.</li>
<li><strong>Reliability </strong>- All builds coming from the build machine must be Reliable. If you are using your Build Machine as a Development Machine, most often the not, your builds are coming from your local copy and not from the Source Code Repository. In most cases, this is okay. But in our case where the final build will be built using the official build machine (located in the US), this is a big problem. One of the problem that we encountered is that the local copy is not in sync with the repository copy. We are Humans, sometimes we forget to check-in our changes.</li>
</ol>
<p>To solve the above problems (and since we don&#8217;t have any spare machines <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' />  ), I used a Virtual Machine! Yes, I used a Virtual Machine as a Build Machine. After 3 days of fixing the build scripts and updating the unsync&#8217;d files, I was able to create a clean and working build from my VM Build Machine.</p>
<div id="attachment_384" class="wp-caption aligncenter" style="width: 300px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/06/vbox_eps_cmyk2_ico.png"><img class="size-medium wp-image-384" title="VBOX" src="http://blog.ianuy.com/wp-content/uploads/2009/06/vbox_eps_cmyk2_ico-290x300.png" alt="I'm a big VirtualBox fan!" width="290" height="300" /></a><p class="wp-caption-text">I&#39;m a big VirtualBox fan!</p></div>
<p>Virtual Machines are perfect as Build Machines. You can always maintain a <strong>pristine</strong> state by creating a <a title="HOWTO: VirtualBox Snapshots. The Ins and Outs of Snapshots." href="http://ubuntuforums.org/showthread.php?t=689982" target="_blank">snapshot</a> of a freshly installed setup build environment and always building from there. Everytime that you need to create a build, you can just rollback to that pristine state. This feature of build machines gives you <strong>control</strong> over your build environment. Since you are always rolling back to a pristine state, you will then be forced to always fetch the latest copy from your source code repository! This means that you can be confident the builds coming out from your build machine is always <strong>reliable</strong>.</p>
<p>Before, I have no faith in our source code repository copy. As a result, I am always too anxious in making sure that I don&#8217;t break the local copy. There&#8217;s always that constant fear that the official copy from the Source Code Repository is broken or the official copy does not reflect the local &#8220;tested&#8221; copy. Now, I am always confident that anytime, anywhere in the company, we can always create a clean and reliable build that will work straigth from the repository. That feeling is very liberating! <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=The%20Importance%20of%20a%20Dedicated%20Build%20Machine&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;title=The%20Importance%20of%20a%20Dedicated%20Build%20Machine&amp;bodytext=%0D%0A%0D%0AWhen%20I%20was%20an%20Intern%20at%20a%20large%20Global%20500%20company%2C%20my%20major%20responsibility%20is%20to%20deliver%20a%20Software%20Delivery%20process%20that%20uses%20the%20software%20engineering%20practice%20called%20Continuous%20Integration.%20In%20simple%20terms%2C%20I%20am%20responsible%20for%20a%20project%20to%20cr" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;title=The%20Importance%20of%20a%20Dedicated%20Build%20Machine" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;title=The%20Importance%20of%20a%20Dedicated%20Build%20Machine&amp;notes=%0D%0A%0D%0AWhen%20I%20was%20an%20Intern%20at%20a%20large%20Global%20500%20company%2C%20my%20major%20responsibility%20is%20to%20deliver%20a%20Software%20Delivery%20process%20that%20uses%20the%20software%20engineering%20practice%20called%20Continuous%20Integration.%20In%20simple%20terms%2C%20I%20am%20responsible%20for%20a%20project%20to%20cr" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=The%20Importance%20of%20a%20Dedicated%20Build%20Machine%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=The%20Importance%20of%20a%20Dedicated%20Build%20Machine&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;t=The%20Importance%20of%20a%20Dedicated%20Build%20Machine" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;t=The%20Importance%20of%20a%20Dedicated%20Build%20Machine" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;title=The%20Importance%20of%20a%20Dedicated%20Build%20Machine&amp;annotation=%0D%0A%0D%0AWhen%20I%20was%20an%20Intern%20at%20a%20large%20Global%20500%20company%2C%20my%20major%20responsibility%20is%20to%20deliver%20a%20Software%20Delivery%20process%20that%20uses%20the%20software%20engineering%20practice%20called%20Continuous%20Integration.%20In%20simple%20terms%2C%20I%20am%20responsible%20for%20a%20project%20to%20cr" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F06%2F07%2Fthe-importance-of-a-dedicated-build-machine%2F&amp;title=The%20Importance%20of%20a%20Dedicated%20Build%20Machine" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/06/07/the-importance-of-a-dedicated-build-machine/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Migration: Why Developers Hate Microsoft or Why Developers Hate Vista or My First Encounter how Microsoft can Break your Software</title>
		<link>http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/</link>
		<comments>http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/#comments</comments>
		<pubDate>Sun, 10 May 2009 14:13:29 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=262</guid>
		<description><![CDATA[In my previous blog post, I&#8217;ve mentioned that I&#8217;m working on a project to migrate an entire product line to Vista. What I meant by that is that I am responsible for making sure that our current product will run properly on Windows Vista. To guarantee that it is indeed Running Properly it should behave [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_263" class="wp-caption aligncenter" style="width: 546px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/windowsvistalogo.jpg"><img class="size-full wp-image-263" title="Windows Vista Compatible Logo" src="http://blog.ianuy.com/wp-content/uploads/2009/05/windowsvistalogo.jpg" alt="Do you know how much Programmer's Blood it cost to put this tiny sticker in a Software Box?" width="536" height="262" /></a><p class="wp-caption-text">Do you know how much Programmer&#39;s Blood it cost to put this tiny sticker in a Software Box?</p></div>
<p>In my <a title="Coding Horror 01: Readability vs Efficiency " href="http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/" target="_blank">previous blog post</a>, I&#8217;ve mentioned that I&#8217;m working on a project to migrate an entire product line to Vista. What I meant by that is that I am responsible for making sure that our current product will run properly on Windows Vista. To guarantee that it is indeed <em>Running Properly</em> it should behave *exactly* like it behaves in Windows XP.  In simple terms, my entire job security is riding on making our products compatible with Microsoft&#8217;s failed attempt at a MAC-ish Operating System and with Microsoft&#8217;s successful attempt (a first in their history) to make their operating system <strong>NOT</strong> backward compatible with older applications. So much for <a title="Raymond Chen's Blog" href="http://blogs.msdn.com/oldnewthing/" target="_blank">Raymond Chen</a>&#8217;s camp <a title="How Microsoft Lost the API War" href="http://joelonsoftware.com/articles/APIWar.html" target="_blank">undying obsession with backward compatibility</a>.</p>
<p>This products that I&#8217;m talking about are a set of Web Applications written in ASP.NET version 1.1. This web applications are as old as Windows XP. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' />  I checked its File Modification History in our TFS repository and the last time that anyone have touched its code base is in 2005 &#8212; and that&#8217;s just for a minor code modification to fix a bug. I believe this apps were written way way back in 2004 &#8212; when I was in Third Year High School! <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>To make this products compatible with Vista, there are a couple of steps that had to be done. I&#8217;ll enumerate each steps and what it takes to accomplish them.</p>
<p><span id="more-262"></span></p>
<h3>.NET Upgrade (.NET 1.1 to .NET 2.0)</h3>
<p>Windows Vista comes pre-installed with .NET 2.0 (and .NET 3.0). Our products are running on .NET 1.1. One approach that most people will suggest is to just install .NET 1.1 on Windows Vista and everything will be perfect. Right? WRONG. Firstly, .NET 1.1 has already reached its end-of-life. Microsoft pulled support for .NET 1.1 last October 14, 2008. Although it was extended, its a sign that this technology is <em>old enough</em> to be replaced. Secondly, installing .NET 1.1 on a Vista machine is not as <a href="http://geekycoder.wordpress.com/2007/10/08/installing-microsoft-net-11-framework-on-windows-vista-without-tears/" target="_blank">easy</a> <a href="http://www.mydigitallife.info/2007/12/27/install-microsoft-net-framework-11-on-windows-vista-fix-regsvcsexe-fails-error/" target="_blank">as</a> <a href="http://searchwindevelopment.techtarget.com/tip/0,289483,sid8_gci1237467,00.html" target="_blank">you</a> <a href="http://www.sharpdeveloper.net/content/archive/2008/10/07/setup-aspnet-11-on-vista.aspx" target="_blank">think</a>. No, we are not lazy programmers, we just don&#8217;t want to introduce unnecessary complications to the system. We are, by the way, <a title="Coding Horror 01: Readability vs Efficiency " href="http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/" target="_blank">Software Developers</a>.</p>
<div id="attachment_270" class="wp-caption aligncenter" style="width: 224px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/lazy-programmers.jpg"><img class="size-medium wp-image-270" title="Lazy Programmers" src="http://blog.ianuy.com/wp-content/uploads/2009/05/lazy-programmers-214x300.jpg" alt="Those Lazy Programmers" width="214" height="300" /></a><p class="wp-caption-text">Those Lazy Programmers</p></div>
<p>So the approach we took is to upgrade our Visual Studio 2003 solutions to Visual Studio 2005 solutions. This, in turn, will &#8220;force&#8221; the web application to use .NET 2.0. You might say, &#8220;How hard could it be? Visual Studio 2005 can convert old solutions automatically using its <em>Upgrade Wizard. </em>All you have to do is click next!, You lazy programmer!&#8221;. That&#8217;s correct. Upgrading the solution is no problem. Converting every file to .NET 2.0 compliant code <em>is</em>.</p>
<p>We encountered two conversion problems. The first one is relatively simple to fix. It&#8217;s a problem where the old .NET 1.1 Resource files (*.resx) were not converted to the .NET 2.0 resource files. The two resource file formats are different (the .NET 2.0 have a *.designer.cs component) and in very rare cases, the .NET 1.1 *resx files won&#8217;t work in .NET 2.0. This problem is very hard to catch since the incompatible *.resx files won&#8217;t throw a compile error. The strings just won&#8217;t be detected. But once found it was relatively easy to fix. After a day of investigation, we found out that the XML format for the resource files changed in .NET 2.0. As a simple hack (fix), we manually changed the &lt;string&gt; parameters of each .NET 1.1 strings to match the .NET 2.0 &lt;string&gt; parameters.</p>
<p>The second problem is harder to find and much much harder to fix. The problem is related to ASP.NET&#8217;s datetime picker control.</p>
<div id="attachment_274" class="wp-caption aligncenter" style="width: 282px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/workingaspnet.jpg"><img class="size-full wp-image-274" title="ASP.NET 1.1 Calendar Control" src="http://blog.ianuy.com/wp-content/uploads/2009/05/workingaspnet.jpg" alt="Our Calendar Control before upgrading to .NET 2.0" width="272" height="214" /></a><p class="wp-caption-text">Our Calendar Control before upgrading to .NET 2.0</p></div>
<p>On our previous version running .NET 1.1, there is no problem with the datetime picker. But when we installed the .NET 2.0 version, the calendar objects are all over the place.</p>
<div id="attachment_275" class="wp-caption aligncenter" style="width: 1034px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/brokencontrol.jpg"><img class="size-large wp-image-275" title="Broken ASP.NET Calendar Control" src="http://blog.ianuy.com/wp-content/uploads/2009/05/brokencontrol-1024x211.jpg" alt="Broken ASP.NET Calendar Control" width="1024" height="211" /></a><p class="wp-caption-text">The Migrated .NET 2.0 Calendar Control</p></div>
<p style="text-align: left;">Two days of investigation later, we found out that the previous developer made this custom Calendar control by inheriting from .NET 1.1&#8217;s System.Web.Controls. During pre-render, he reads the rendered Calendar Control&#8217;s HTML and then does something funny with it. What he wanted to achieve is to replace the &#8220;Month&#8221; from the Calendar header (gray part) with a drop down box that contains a list of the months. So what he did is he &#8220;catch&#8221; the HTML stream from the Calendar Control and perform a String.Replace on it!</p>
<p style="text-align: left;">
<div id="attachment_278" class="wp-caption aligncenter" style="width: 586px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/design.jpg"><img class="size-full wp-image-278" title="Design Goal" src="http://blog.ianuy.com/wp-content/uploads/2009/05/design.jpg" alt="His Design Goal" width="576" height="207" /></a><p class="wp-caption-text">His Design Goal</p></div>
<p style="text-align: left;">The actual String.Replace command is something like this:</p>
<p style="text-align: left;">

<div class="wp_syntax"><div class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//szHTML = Get current HTML stream</span>
<span style="color: #008080; font-style: italic;">//szCurrentMonth = Get current month from HTML</span>
szHTML.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span>szCurrentMonth, <span style="color: #666666;">&quot;
&lt;select&gt;&lt;option value=&quot;</span>January<span style="color: #666666;">&quot;&gt;January&lt;/option&gt;
       &lt;option value=&quot;</span>February<span style="color: #666666;">&quot;&gt;February&lt;/option&gt;
       &lt;option value=&quot;</span>March<span style="color: #666666;">&quot;&gt;March&lt;/option&gt;
       &lt;option value=&quot;</span>April<span style="color: #666666;">&quot;&gt;April&lt;/option&gt;
       &lt;option value=&quot;</span>May<span style="color: #666666;">&quot;&gt;May&lt;/option&gt;
       &lt;option value=&quot;</span>June<span style="color: #666666;">&quot;&gt;June&lt;/option&gt;
       &lt;option value=&quot;</span>July<span style="color: #666666;">&quot;&gt;July&lt;/option&gt;
       &lt;option value=&quot;</span>August<span style="color: #666666;">&quot;&gt;August&lt;/option&gt;
       &lt;option value=&quot;</span>September<span style="color: #666666;">&quot;&gt;September&lt;/option&gt;
       &lt;option value=&quot;</span>October<span style="color: #666666;">&quot;&gt;October&lt;/option&gt;
       &lt;option value=&quot;</span>November<span style="color: #666666;">&quot;&gt;November&lt;/option&gt;
       &lt;option value=&quot;</span>December<span style="color: #666666;">&quot;&gt;December&lt;/option&gt;
&lt;/select&gt;
&nbsp;
&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #008000;">;</span></pre></div></div>

<p>It worked fine before the migration, but somehow we broke it during migration to .NET 2.0. A further investigation of the &#8220;emitted&#8221; HTML stream from the .NET 2.0 control shows this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;table style=&quot;border-style: solid; border-width: 1px; border-collapse: collapse;&quot; title=&quot;Calendar&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: Silver;&quot; colspan=&quot;7&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse;&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15%;&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the previous month&quot; href=&quot;javascript:__doPostBack('ctl01','V3378')&quot;&gt;&amp;lt;&lt;/a&gt;&lt;/td&gt;
&lt;!-- THIS WILL BE THE PART THAT WILL BE REPLACED BY A DROP DOWN BOX --&gt;
&lt;td style=&quot;width: 70%;&quot; align=&quot;center&quot;&gt;May 2009&lt;/td&gt;
&lt;td style=&quot;width: 15%;&quot; align=&quot;right&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the next month&quot; href=&quot;javascript:__doPostBack('ctl01','V3439')&quot;&gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sun&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Mon&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Tue&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Wed&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Thu&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Fri&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sat&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: black;&quot; title=&quot;April 26&quot; href=&quot;javascript:__doPostBack('ctl01','3403')&quot;&gt;26&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 27&quot; href=&quot;javascript:__doPostBack('ctl01','3404')&quot;&gt;27&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 28&quot; href=&quot;javascript:__doPostBack('ctl01','3405')&quot;&gt;28&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 29&quot; href=&quot;javascript:__doPostBack('ctl01','3406')&quot;&gt;29&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;April 30&quot; href=&quot;javascript:__doPostBack('ctl01','3407')&quot;&gt;30&lt;/a&gt;&lt;/td&gt;
&lt;!-- THE TITLE ATTRIBUTE WAS ALSO REPLACED ACCIDENTALLY --&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;May 01&quot; href=&quot;javascript:__doPostBack('ctl01','3408')&quot;&gt;1&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;May 02&quot; href=&quot;javascript:__doPostBack('ctl01','3409')&quot;&gt;2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
.....&lt;/tbody&gt;&lt;/table&gt;</pre></div></div>

<p>A comparison with the &#8220;emitted&#8221; .NET 1.1 control shows this:</p>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;table style=&quot;border-style: solid; border-width: 1px; border-collapse: collapse;&quot; title=&quot;Calendar&quot; border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;background-color: Silver;&quot; colspan=&quot;7&quot;&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse;&quot; border=&quot;0&quot; cellspacing=&quot;0&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 15%;&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the previous month&quot; href=&quot;javascript:__doPostBack('ctl01','V3378')&quot;&gt;&amp;lt;&lt;/a&gt;&lt;/td&gt;
&lt;!-- THIS WILL BE THE PART THAT WILL BE REPLACED BY A DROP DOWN BOX --&gt;
&lt;td style=&quot;width: 70%;&quot; align=&quot;center&quot;&gt;May 2009&lt;/td&gt;
&lt;td style=&quot;width: 15%;&quot; align=&quot;right&quot;&gt;&lt;a style=&quot;color: Black;&quot; title=&quot;Go to the next month&quot; href=&quot;javascript:__doPostBack('ctl01','V3439')&quot;&gt;&amp;gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sun&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Mon&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Tue&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Wed&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Thu&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Fri&lt;/th&gt;
&lt;th align=&quot;center&quot; scope=&quot;col&quot;&gt;Sat&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: black;&quot; href=&quot;javascript:__doPostBack('ctl01','3403')&quot;&gt;26&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3404')&quot;&gt;27&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3405')&quot;&gt;28&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3406')&quot;&gt;29&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3407')&quot;&gt;30&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3408')&quot;&gt;1&lt;/a&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14%;&quot; align=&quot;center&quot;&gt;&lt;a style=&quot;color: Black;&quot; href=&quot;javascript:__doPostBack('ctl01','3409')&quot;&gt;2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
.....&lt;/tbody&gt;&lt;/table&gt;</pre></div></div>

<p>Executing the String.Replace command in the .NET 1.1 code will produce the proper output. However, Microsoft decided to <em>upgrade</em> the Calendar control in .NET 2.0 by adding a <strong>tooltip</strong> for each date!</p>
<div id="attachment_287" class="wp-caption aligncenter" style="width: 282px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/05/tooltip1.jpg"><img class="size-full wp-image-287" title="Tool Tip in .NET 2.0" src="http://blog.ianuy.com/wp-content/uploads/2009/05/tooltip1.jpg" alt="Tool Tip in .NET 2.0" width="272" height="216" /></a><p class="wp-caption-text">Tool Tip in .NET 2.0</p></div>
<p>Since the String.Replace has no <em>checking</em> (this is not REGEX afterall), it also replaced the &#8220;Month&#8221; in the tooltip with the drop down box (&lt;select&gt; command), thus generating the broken control shown above. This is not, in anyway, the fault of the original developer. Can you anticipate what will Microsoft do?</p>
<p><strong>This is my first encounter on how Microsoft can break your products. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /><br />
</strong></p>
<h3>MSDE to Microsoft SQL Server 2005 Express</h3>
<p>Our web applications were written before the release of SQL Server 2005 Express. The only *free* choice back then is Microsoft SQL Server Desktop Engine, a free scaled-down version of Microsoft SQL Server 2000. Since the support for MSDE officially ended last April 8, 2008, we are then forced to upgrade to Microsoft SQL Server 2005 express.</p>
<p>Our previous MSDE setup runs on <strong>default instance</strong>. In migrating to SQL Server 2005, we run the risk of &#8220;conflicting&#8221; with our other products that runs on <strong>default instance</strong> of SQL 2005. So the decision was made to migrate from <strong>default instance </strong>to <strong>named instance</strong>.</p>
<p>Migrating to SQL Server 2005 Express is straightforward at first look. The first and the most obvious thing to do is to modify the installer (InstallShield) so that it will install SQL 2005 instead of MSDE.  To compensate with the instance problem, the second thing to do is to modify each and every <strong>connection string</strong> in the entire app to point to the proper named instance. Making sure that each and every connection string in your entire app has been changed is a monumental task&#8230; especially if different version of connection strings were used. After that, you also need to modify the Service Query String so that it will point to the proper SQL Service ($MSSQLSERVER to $Instance_Name). There are also minor modifications here and there, but its not worth the mention.</p>
<p>After three days of manual modification, we got to the point where we were able to install the product. We tested it and everything seems to work fine. We then got to the part where are going to test for the database backup. Lo and behold, it failed. But no error message was given. We looked for the bug for an entire day but our search proved futile. We called it a day and went home. The next day, my brilliant manager excitedly told us the problem.</p>
<blockquote>
<h3 style="text-align: center;">Microsoft SQL Server 2005 Express does not have SQL Server Agent.</h3>
</blockquote>
<p>Our backup routine uses SQL Server Agent. When a user request for a backup, the SQL Server will &#8220;schedule&#8221; that backup request and the SQL Server Agent will &#8220;execute&#8221; the request when the schedule parameter is met.</p>
<p>Simply put, No SQL Server Agent, No Backup.</p>
<p>We have three solutions to the problem:</p>
<ol>
<li>Ship the product with Microsoft SQL Server 2005 standard or enterprise edition (Instead of the Express edition)</li>
<li>Remove the &#8220;scheduled&#8221; backup. Instead, just provide a &#8220;one shot&#8221; backup</li>
<li>Create our own custom &#8220;Backup Scheduler&#8221; using Windows Task Scheduler</li>
</ol>
<p>We talked to the marketing folks and they eliminated option 1 because, according to them, we can&#8217;t make our customer pay for something that was free before. Option 2 was eliminated due to the simple fact that we can&#8217;t ship an upgraded version of our product with downgraded features (But this was actually done to one of the product that had missed its deadline). So Option 3 was our only choice.</p>
<p>The plan in creating Option 3 is simple. Create a &#8220;scheduled task&#8221; using <strong>schtasks.exe </strong>that will invoke <strong>sqlcmd.exe</strong> that will invoke the <strong>sql command</strong> to invoke the <strong>stored procedure</strong> that was doing the backups. The <strong>schtasks</strong> will then be invoked by the ASP.NET page using Process.Start();. So I created a wrapper class that will simplify this process. The class was created in 2 hours and I had it running and compiled to the ASP.NET page in just 3 hours. <strong>BUT IT DIDN&#8217;T WORK.</strong></p>
<p>Further investigation revealed that IIS 6.0 has a different security model than IIS 5.1 (which XP uses). Spawning a process from within IIS 6.0 will have a credential of NETWORK SERVICE. Yes, we can impersonate since we are using Windows Authentication, but it won&#8217;t work unless we force the user to type-in the credentials again. Which is bad in a usability point of view.</p>
<p>The workaround was to put the scheduler on a Windows Service that will then be run with proper credentials. The problem then was the communication between the ASP.NET page and the Windows Service. How will the Service know when to invoke the backup? Our solution is a little crude but simple. We did it old-skul UNIX style! The ASP.NET page will create a &#8220;marker&#8221; file in a certain, defined location. The Windows Service will then monitor that location&#8230; waiting for the &#8220;marker&#8221; file. If the marker file is found, the service will then invoke the backup procedure. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Fortunately for us, all the data needed for the backup is in the database, so we don&#8217;t need to pass anything between the ASP.NET page and the Service. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' />  We could have used sockets or mutex, but its overkill for our purpose.</p>
<p><strong>This</strong> are just the major steps that had to be done in order to make our web applications compatible with Windows Vista. There are a couple of minor steps that also needs attention like the IIS 5.1 to IIS 7.0 migration and the new Vista Security Model.</p>
<p>The next time you see the &#8220;Vista Compatible&#8221; sticker on a Software Box, think of the programmers who nearly died in making your software run on a &#8220;cuter&#8221; operating system.</p>
<h2>Windows 7, we are ready! <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </h2>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;bodytext=%0A%0D%0AIn%20my%20previous%20blog%20post%2C%20I%27ve%20mentioned%20that%20I%27m%20working%20on%20a%20project%20to%20migrate%20an%20entire%20product%20line%20to%20Vista.%20What%20I%20meant%20by%20that%20is%20that%20I%20am%20responsible%20for%20making%20sure%20that%20our%20current%20product%20will%20run%20properly%20on%20Windows%20Vista.%20To%20guaran" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;notes=%0A%0D%0AIn%20my%20previous%20blog%20post%2C%20I%27ve%20mentioned%20that%20I%27m%20working%20on%20a%20project%20to%20migrate%20an%20entire%20product%20line%20to%20Vista.%20What%20I%20meant%20by%20that%20is%20that%20I%20am%20responsible%20for%20making%20sure%20that%20our%20current%20product%20will%20run%20properly%20on%20Windows%20Vista.%20To%20guaran" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;t=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;t=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software&amp;annotation=%0A%0D%0AIn%20my%20previous%20blog%20post%2C%20I%27ve%20mentioned%20that%20I%27m%20working%20on%20a%20project%20to%20migrate%20an%20entire%20product%20line%20to%20Vista.%20What%20I%20meant%20by%20that%20is%20that%20I%20am%20responsible%20for%20making%20sure%20that%20our%20current%20product%20will%20run%20properly%20on%20Windows%20Vista.%20To%20guaran" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F05%2F10%2Fmigration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software%2F&amp;title=Migration%3A%20Why%20Developers%20Hate%20Microsoft%20or%20Why%20Developers%20Hate%20Vista%20or%20My%20First%20Encounter%20how%20Microsoft%20can%20Break%20your%20Software" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/05/10/migration-why-developers-hate-microsoft-or-my-first-encounter-how-microsoft-can-break-your-software/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Coding Horror 01: Readability vs Efficiency</title>
		<link>http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/</link>
		<comments>http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/#comments</comments>
		<pubDate>Sun, 26 Apr 2009 12:15:08 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Coding Horror]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=173</guid>
		<description><![CDATA[Back in College, I have a friend who&#8217;s programming prowess is so godly that it can surpass or match mine  . He is a C++ Junkie and belongs to the Java Cult. His mental agility is so great that he can beat me in writing complex algorithms anytime of the day. In fact, I [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_174" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/04/coding-horror-stickers.jpg"><img class="size-medium wp-image-174" title="coding-horror-stickers" src="http://blog.ianuy.com/wp-content/uploads/2009/04/coding-horror-stickers-300x225.jpg" alt="My First Official &quot;Coding Horror&quot; Encouter" width="300" height="225" /></a><p class="wp-caption-text">My First Official &quot;Coding Horror&quot; Encounter</p></div>
<p>Back in College, I have a friend who&#8217;s programming prowess is so godly that it can surpass or match mine <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> . He is a C++ Junkie and belongs to the Java Cult. His mental agility is so great that he can beat me in writing complex algorithms anytime of the day. In fact, I chose him to be the &#8220;Architect&#8221; for our project in Compiler Theory Class (<a title="Kompayler Studio 2008: The First Tagalog Kompayler, Programming Language and IDE" href="http://ianuy.multiply.com/journal/item/40" target="_blank">Kompayler Studio 2008: The First Tagalog Kompayler, Programming Language and IDE</a>). He is THAT great of a programmer&#8230; BUT</p>
<blockquote>
<h5 style="text-align: center;">Being a Great Programmer is not the same as being a Great Software Developer</h5>
</blockquote>
<p>&#8220;Aren&#8217;t programming and software development the same?&#8221; Uhhmm, NO. Programming is just a single part of Software Development. Software Development, on the other hand, is an entirely different song and dance.</p>
<p>In one of our converstations, I told him that instead of reading books about programming he should try to read books about software development. I gave him that advice not because I want him to suck in programming (I&#8217;m not that envious). I gave him that advice because I want him to realize that programming alone won&#8217;t make a great software product and that programming prowess alone won&#8217;t give him the best programming job around&#8230; at least here in the Philippines.</p>
<p>One of our main differences is reflected on how we write code (which eventually shows in our software). For example, say that we have a project that requires us to deliver a Simple Number Sorting Application that will ask the user to input 50 numbers and sort it. This project is resource constrained in such a way that we need to deliver it in 2 days.</p>
<p><span id="more-173"></span></p>
<p style="text-align: left;">What I would do is use a pre-existing <strong>bubble sort</strong> algorithm available in the class library (in .NET, I suppose), then I would add additional functionality, then create a test harness (unit test) to test my functions and then I&#8217;m done with the &#8220;coding&#8221; part. Then I would use the rest of my time to design an intuitive user-interface, provide a user manual and work on the packaging.</p>
<div id="attachment_180" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/04/simplesorter.jpg"><img class="size-medium wp-image-180" title="simplesorter" src="http://blog.ianuy.com/wp-content/uploads/2009/04/simplesorter-300x245.jpg" alt="My Simple Sorting Application" width="300" height="245" /></a><p class="wp-caption-text">My Simple Sorting Application</p></div>
<p style="text-align: left;">On the other hand, my friend would create a <strong>complex multi-threaded sorting algorithm</strong> that will have a runtime efficiency of  O(Log N). Not only that, it will be written in Haskel (or any other hardcore programming language) and it will also be invoked via command-line! So hackerish. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p style="text-align: center;">
<div id="attachment_181" class="wp-caption aligncenter" style="width: 310px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/04/complexsorter.jpg"><img class="size-medium wp-image-181" title="complexsorter" src="http://blog.ianuy.com/wp-content/uploads/2009/04/complexsorter-300x151.jpg" alt="His Complex Sorting &quot;Tool&quot;" width="300" height="151" /></a><p class="wp-caption-text">His Complex Sorting &quot;Tool&quot;</p></div>
<p>My point is simple&#8230; <em>In Software Development, there is a thing called <span style="text-decoration: underline;"><strong>Tradeoffs</strong></span></em>. What do I mean by Tradeoff? Take the above example. I traded-off the uber-cool <strong>complex multi-threaded sorting algorithm </strong>to <strong>USABILITY</strong> <strong>AND FUNCTIONALITY </strong>which, by the way, has more practical and positive impact to my users. You could argue that I suck for using bubble sort and not the <strong>complex multi-threaded sorting algorithm </strong>and you could also argue that my bubble sort has a runtime complexity of O(N^2). But being a Software Developer, I know that using that &#8220;<strong>complex multi-threaded sorting algorithm&#8221; </strong>would only be faster by 0.000000000000001312 seconds (remember, we are only sorting 50 elements) and that &#8220;improvement&#8221; will not be of any <em>significant </em>use to my end-users and I might as well use my time in creating extra  features, such as Print and Copy to Clipboard, that will surely make my product more functional and easy to use.</p>
<p>At work, I am working on a project to &#8220;migrate&#8221; our products to Vista. To Migrate meaning &#8220;<em>to make it compatible with Vista&#8221;</em>. One of our product has an <strong>Autorun</strong> executable which will decide which &#8220;components&#8221; (SQL Server, VC++ 8.0 Redistributable, .NET Framework) to install. During a routine test run at the Test Deparment, they found out that this certain product is not working on Vista and filled a Track against it. The said Track was assigned to me and I&#8217;m expected to fix it. So I pulled the Visual Basic 6.0 source code of the Autorun executable from our TFS and performed an investigation. While investigating, I saw a very weird block of code&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;"><span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> VCREDIST <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
<span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> NETFRAMEWORK <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
<span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> SQLSERVER <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
<span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> COMPONENT1 <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
<span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> COMPONENT2 <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
<span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> COMPONENT3 <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
<span style="color: #000080;">Private</span> <span style="color: #000080;">dim</span> COMPONENT16 <span style="color: #000080;">as</span> <span style="color: #000080;">long</span>
&nbsp;
VCREDIST = 1
NETFRAMEWORK = 2
SQLSERVER = 4
COMPONENT1 = 8
COMPONENT2 = 16
COMPONENT3 = 32
COMPONENT16 = 65536</pre></div></div>

<p>If you see a 1 or a 0 in the code, its pretty normal because you know that it is a <em>flag</em> for something . But if you see a 7 or 16 or 32, you know something is wrong. So I ignored that and went straight to the actual function that does the shell execution to install the component and I saw something like this&#8230;</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;"><span style="color: #000080;">While</span> ComponentInstalled != 13
&nbsp;
	installNum = GetNextComponent	
&nbsp;
	<span style="color: #000080;">if</span> installNum <span style="color: #000080;">AND</span> 1 <span style="color: #000080;">then</span>
		InstallComponent(installNum)
	<span style="color: #000080;">else</span>
		installNum = installNum * 2
	<span style="color: #000080;">end</span> <span style="color: #000080;">if</span>
&nbsp;
<span style="color: #000080;">End</span> <span style="color: #000080;">While</span></pre></div></div>

<p>I was dumbfounded and stupified, why is there an &#8220;AND 1&#8243; in that code? and what is the purpose of the * 2? So I asked my manager for his input. And after staring at the code for 30 minutes, my brilliant manager shouted &#8220;That code is using <strong>BIT PATTERNS!</strong>&#8220;. Instantly, I understood what the code does.</p>

<div class="wp_syntax"><div class="code"><pre class="vb" style="font-family:monospace;">VCREDIST = 1                 <span style="color: #008000;">'0000 0000 0001
</span>NETFRAMEWORK = 2        <span style="color: #008000;">'0000 0000 0011
</span>SQLSERVER = 4              <span style="color: #008000;">'0000 0000 0111
</span>COMPONENT1 = 8           <span style="color: #008000;">'0000 0000 1111
</span>COMPONENT2 = 16          <span style="color: #008000;">'0000 0001 1111
</span>COMPONENT3 = 32          <span style="color: #008000;">'0000 0011 1111
</span>COMPONENT16 = 65536    '1111 1111 1111</pre></div></div>

<p>That block of code is actually a binary pattern used for flagging the components. Each placeholder in that binary pattern is a FLAG (1 or 0) which actually tells the function GetNextComponent if that component should be installed or not. The *2 is used for shifthing the binary pattern so that the active placeholder for a certain flag will be at the rightmost (last bit) of the pattern! Brilliant!</p>
<p>To solve the issue, I just needed to force the Autorun to Install <strong>VCREDIST</strong> in Vista by adding this line of code in the Vista Condition of the <em>GetNextComponent</em> function:</p>
<pre>VCREDIST = VCREDIST OR 1</pre>
<p>So it will always install the Visual C++ 8.0 Redistributable in Vista. The actual problem is that the Autorun Executable thinks that Vista does not need the redistributable and will not install it.  That&#8217;s why our product that needs the redistributable will not work.</p>
<p>I have great admiration for the brilliance of the programmer who wrote this. The method is so efficient that instead of declaring 12 Integers for Flag, he would only need to use a single long! My manager told me that the one who wrote this application is actually a &#8220;CONTROLLER&#8221; programmer. A type of programmer in our organization that writes the firmwares for our hardware controllers.</p>
<p>When writing firmwares that needs to be tight and needs to run in realtime, time complexity is your biggest enemy and you need to code against that. But in an Autorun application for installation, you <strong>DONT!</strong> In this example, <span style="text-decoration: underline;"><em><strong>Readability and Maintability was traded-off to efficiency that was not even needed!</strong></em></span> In turn, a simple issue that can be fixed in a matter of seconds was fixed in half a day.</p>
<p>As Software Developers, we should have the right mindset to decide on what trade offs are necessary. We should not only be Great Programmers who can write great codes but we should transcend to being Great Software Developers who can &#8220;take a concept, build a team, set up state of the art development processes, design a software product, the right software product, and produce it. Not just any software product: a high quality software product that solves a problem and delights your users. With documentation. A web page. A setup program. Test cases. Norwegian versions. Bokmål and Nynorsk. Appetizers, dessert, and twenty seven eight-by-ten color glossy photographs with circles and arrows and a paragraph on the back of each one explaining what each one was.&#8221;</p>
<p>As for my Friend, he is now working at Oracle. My only wish is that he would be able to work on their database management system where efficiency has higher value than code-readability.</p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;title=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency&amp;bodytext=%0A%0D%0ABack%20in%20College%2C%20I%20have%20a%20friend%20who%27s%20programming%20prowess%20is%20so%20godly%20that%20it%20can%20surpass%20or%20match%20mine%20%3AD.%20He%20is%20a%20C%2B%2B%20Junkie%20and%20belongs%20to%20the%20Java%20Cult.%20His%20mental%20agility%20is%20so%20great%20that%20he%20can%20beat%20me%20in%20writing%20complex%20algorithms%20anytime%20" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;title=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;title=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency&amp;notes=%0A%0D%0ABack%20in%20College%2C%20I%20have%20a%20friend%20who%27s%20programming%20prowess%20is%20so%20godly%20that%20it%20can%20surpass%20or%20match%20mine%20%3AD.%20He%20is%20a%20C%2B%2B%20Junkie%20and%20belongs%20to%20the%20Java%20Cult.%20His%20mental%20agility%20is%20so%20great%20that%20he%20can%20beat%20me%20in%20writing%20complex%20algorithms%20anytime%20" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;t=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;t=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;title=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency&amp;annotation=%0A%0D%0ABack%20in%20College%2C%20I%20have%20a%20friend%20who%27s%20programming%20prowess%20is%20so%20godly%20that%20it%20can%20surpass%20or%20match%20mine%20%3AD.%20He%20is%20a%20C%2B%2B%20Junkie%20and%20belongs%20to%20the%20Java%20Cult.%20His%20mental%20agility%20is%20so%20great%20that%20he%20can%20beat%20me%20in%20writing%20complex%20algorithms%20anytime%20" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F26%2Fcoding-horror-01-readability-vs-efficiency%2F&amp;title=Coding%20Horror%2001%3A%20Readability%20vs%20Efficiency" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/04/26/coding-horror-01-readability-vs-efficiency/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Deadlines: I used to love them</title>
		<link>http://blog.ianuy.com/2009/04/12/deadlines-i-used-to-love-them/</link>
		<comments>http://blog.ianuy.com/2009/04/12/deadlines-i-used-to-love-them/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 12:30:43 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=101</guid>
		<description><![CDATA[Just a day after graduation, I received a congratulatory note from the Director of Software Development at work. The email is addressed to the whole software development department and it goes something like:
&#8220;Congratulations in accomplishing another milestone in your life. Now, there&#8217;s a new milestone that you need to accomplish&#8230;&#8221;
DEADLINES!



I don&#8217;t get it. What&#8217;s with [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span style="font-size: small;">Just a day after graduation, I received a congratulatory note from the Director of Software Development at work. The email is addressed to the whole software development department and it goes something like:</span></p>
<p>&#8220;Congratulations in accomplishing another milestone in your life. Now, there&#8217;s a new milestone that you need to accomplish&#8230;&#8221;</p>
<div style="text-align: center;"><span style="font-weight: bold; font-size: large;">DEADLINES!</span></div>
<p style="text-align: left;"><span style="font-size: small;"><br />
</span><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none; width: 322px; height: 177px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/ScXfXAoKCDIAAE75saA1/deadline1.jpg?et=iZyicGVKEjgDxij%2BbheDvA&amp;nmid=0" border="0" alt="" width="200" height="201" /></span><span style="font-size: small;"><br />
</span></p>
<p style="text-align: left;"><span id="more-101"></span><span style="font-size: small;">I don&#8217;t get it. What&#8217;s with deadlines and software development? and why is it that most, if not all, developers I have met (or read their blogs) hate deadlines? and why is it that in the field of I.T in general, it is a common and accepted practice that projects </span><span style="font-size: small;">overshoot and miss their deadlines? I know that&#8217;s alot of &#8220;whys&#8221;, but cut me some slack, will ya? I&#8217;m just 3 weeks employed.<br />
</span><span style="font-size: small;"><br />
</span></p>
<div style="text-align: justify;"><span style="font-size: small;">During my college days, <span style="font-weight: bold;">I love deadlines</span>! I don&#8217;t kn</span><span style="font-size: small;">ow exactly</span><span style="font-size: small;"> why, but I saw it as a &#8220;<span style="font-weight: bold;">finish line</span>&#8221; that I need to cross &#8212; and if I </span><span style="font-size: small;">cross </span><span style="font-size: small;">it fas</span><span style="font-size: small;">ter than an</span><span style="font-size: small;">y</span><span style="font-size: small;">one else, then I can be considered as the winner. And I&#8217;ve always <span style="font-style: italic;">won</span> those races (as pointed out in my <a href="http://ianuy.multiply.com/journal/item/90/Leadership_Why_I_Love_Going_to_Work">previous post</a>). Maybe that&#8217;s why I love deadlines&#8230; they provide an arena wher</span><span style="font-size: small;">e I can compete and win. And everyone wh</span><span style="font-size: small;">o knows me can atte</span><span style="font-size: small;">st that I&#8217;m a very competitive guy who like to boast and win (and all real programmers are like this, by default). <span style="font-style: italic;">Pride of Workmanship</span>, I say.</span><span style="font-size: small;"><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none; width: 211px; height: 105px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/ScXkZwoKCDIAAA0fDRc1/deadlines.jpg?et=JCDXSxmviJaTg5k%2BB1BnmQ&amp;nmid=0" border="0" alt="" width="300" height="225" /></span></span><span style="font-size: small;"><br />
Just this week, my manager (Development Manager) approached me and told me that I will no longer be working on my <a title="Localization: A Programmer's Dirty Job" href="http://blog.ianuy.com/2009/04/12/localization-a-programmers-dirty-job/" target="_blank"><span style="font-style: italic;">Dirty Job</span> (Localization, that is)</a> and that I will be placed on a new project that involves ASP.NET and Licensing. Well, who would not want to work on a shinny cool new feature using an up</span><span style="font-size: small;">dated techn</span><span style="font-size: small;">ology especially when it will take you off a dirty job? So I took it and became the <span style="font-weight: bold;">main developer</span> for the project. Anyway, Encryption and security stuff is right up my alley (My <a href="http://ianuy.com/flaxor/">undergraduate thesis is related to encryption</a>) and I have 2 years experience working with .NET code so I thought, the project is just appropriate for me.</span></p>
<p><span style="font-size: small;">The project involves implementing a new licensing scheme called <span style="text-decoration: underline;">Temporary Licenses</span>. There&#8217;s already an existing set of licenses (READ: SET) that is too complex for me to explain in this post. But anyway, the reasoning behind implementing the new temporary license is to allow the Salesman (or the Marketing Guys) to demonstrate how the new product works and in turn, close the deal and earn some green.</span></p>
<p><span style="font-size: small;"><br />
</span><span class="insertedphoto"><img class="alignleft" style="width: 153px; height: 203px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/ScXv1goKCDIAAC9neeQ1/thanks-vote-of-confidence.png?et=VdDn17YRaymMSmTwBCq6Cw&amp;nmid=0" border="0" alt="" /></span><span style="font-size: small;">My task, then, is to <span style="font-weight: bold;">construct</span> an <span style="font-style: italic;">Architecture Document<span style="font-weight: bold;"> </span></span>to explain how the different components of this new feature will interact with the existing core </span><span style="font-size: small;">system. Now, let&#8217;s take a step back and consider the fact that I am just 3 weeks old in terms of employment and then I am asked to deliver an Architecture Document! A high-l</span><span style="font-size: small;">evel design doc</span><span style="font-size: small;">ument! Th</span><span style="font-size: small;">at&#8217;s a huge vote of confidence coming from my manager and I&#8217;m very thankful for the fact that they are giving me an opportunity to flex my Programming Muscle very early-on. (Yes, I know its docume</span><span style="font-size: small;">ntation but in-order to deliver this particular architecture document, you need to understand the underlying code of the existing system. Think of it like the foreplay before having sex. haha).</span></div>
<p><span style="font-size: small;">Right after reading the <span style="font-weight: bold;">concept document</span> (a document which contains how the higher-ups believe the</span><span style="font-size: small;"> new fe</span><span style="font-size: small;">ature should work), my manager asked me for a <span style="font-weight: bold;"><a href="http://en.wiktionary.org/wiki/guesstimate">guesstimate</a>. </span>So I said, &#8220;<span style="font-weight: bold;">I don&#8217;t know</span>&#8220;, </span><span style="font-size: small;">and quite joyfully at that. H</span><span style="font-size: small;">ow should I know? I haven&#8217;t even seen a single line of code of the existing system. Even though I know exactly how </span><span style="font-size: small;">to implement the new feature, I still need to add it to an existing working system and integration needs research and time. Luckily, my manager is not a &#8220;<span style="font-weight: bold;">suit</span>&#8221; so he understood where I was coming from and scheduled a meeting with our Technical Lead and another Seni</span><span style="font-size: small;">or Developer to produce a valid estimate.</span></p>
<div style="text-align: justify;"><span style="font-size: small;">After the meeting, the Technical Lead has concluded th</span><span style="font-size: small;">at I do not yet have sufficient knowledge of the work that had to be done so </span><span style="font-size: small;">a</span><span style="font-size: small;"> valid estim</span><span style="font-size: small;">ate couldn&#8217;t be produced. So he suggested that we perform a &#8220;fact finding&#8221; activity. It&#8217;s </span><span style="font-size: small;">a research-type activity where I will touch base with developers of various systems that I </span><span style="font-size: small;">need to interact with. </span><span style="font-size: small;">And one thing was clear, <span style="font-weight: bold;">no one in Manila have worked with any of those systems! </span>This was the first time that our department will be handling and be trusted with Licensing stuffs. </span><span style="font-size: small;">So I have to contact different people from both U.S. and U.K sites just </span><span style="font-size: small;">to gather facts about the system.</span></div>
<p style="text-align: left;"><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none; width: 178px; height: 199px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/ScYROgoKCDIAAA4FB5g1/CMHRimage.gif?et=jM55xFRdRXbM34FTxv7Ijg&amp;nmid=0" border="0" alt="" width="300" height="300" /></span></p>
<p><span style="font-size: small;">Eventually, my manager persuaded me that this task can be done in <span style="font-weight: bold;">1 week</span>. By that time</span><span style="font-size: small;">, I already have a vague idea on how to implement the feature in the existing system&#8230; I just have to prove my theory by directly working with the code so I agreed and started by asking for a <span style="font-weight: bold;">debug</span> build that I can work on. Sadly, there is no working setup for a debug build so I have to make do with just reading the code and compilin</span><span style="font-size: small;">g mentally. And doing it like that will take time &#8212; time which is not included in my prior guesstimate.</span></p>
<p><span class="insertedphoto"><img class="alignleft" style="width: 134px; height: 152px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/Scev3woKCDIAADV4gIY1/god-programmer.jpg?et=HfV4B1lEtWhJYLAoEVSWCQ&amp;nmid=0" border="0" alt="" /></span><span style="font-size: small;">Now</span><span style="font-size: small;"> I </span><span style="font-size: small;">know why developers hate deadlines. <span style="font-weight: bold;">Deadlines makes developers feel tha</span></span><span style="font-size: small;"><span style="font-weight: bold;">t they are not in control of the situation.</span> And as developers, we hate being out </span><span style="font-size: small;">of control. We are so used to having TOTAL control of our own universe (Our Systems), that we already think that we are the Gods of our own universe. I remember a quote by <a href="http://en.wikipedia.org/wiki/Joseph_Weizenbaum">Joseph Weizenbaum</a>, the creator of <a href="http://en.wikipedia.org/wiki/ELIZA">ELIZA</a>, that goes something like this&#8230;</span></p>
<p><span style="font-size: small;"><br />
</span></p>
<div style="text-align: center; font-style: italic;"><span style="font-size: large;">&#8220;The computer programmer is a creator of universes for which he alone is responsible. Universes of virtually unlimited complexity can be created in the form of computer programs.&#8221;</span></div>
<p>Why do I feel that deadlines make us feel out of control? Well, in my particular case,  I feel out of control because I don&#8217;t have any command to the crucial variables that constitutes my task. Like, I don&#8217;t have any control on when I will have my <span style="font-weight: bold;">debug </span>machine. I also don&#8217;t have control on <span style="font-weight: bold;">what time the people</span> from U.S. and U.K <span style="font-weight: bold;">will respond to my inquiries</span> via e<span style="font-size: small;">-mail. I don&#8217;t even have immediate control of my <span style="font-weight: bold;">research time</span> because it is <span style="font-style: italic;">dependent</span> on having a debug machine and other people. The key word here is <span style="font-weight: bold;">DEPENDECIES</span>&#8230; and it plays a big part of making us feel out of control.</span></p>
<div style="text-align: justify;"><span style="font-size: small;">In my <a title="Leadership: Why I Love Going to Work" href="http://blog.ianuy.com/2009/04/12/leadership-why-i-love-going-to-work/" target="_blank">previous post</a>, I have mentioned that TEAM WORK is </span><span style="font-size: small;">my biggest learning I had from my On-the-Job training. But there is also some downside in working in a team environment and that is <span style="font-weight: bold;">dependencies</span>. After realizing this, something suddenly hit me. All throughout college, I have mostly worked alone (around 85% of the work) and that&#8217;s why I have total control of anyt</span><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none; width: 289px; height: 191px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/Sce3dwoKCDIAADHerJY1/t5-service-dependencies.jpg?et=ZrktYMwx0QNoCwY0%2BBNmIw&amp;nmid=0" border="0" alt="" width="300" height="201" /></span><span style="font-size: small;">hing that is related to my projects and that is also why we have always sub</span><span style="font-size: small;">mi</span><span style="font-size: small;">tted 2 to 3 weeks ahead of the deadline. Other teams have always submitted</span><span style="font-size: small;"> late (As much as 6 months late), and those teams are com</span><span style="font-size: small;">posed of friends or barkadas&#8230; Because they are so keen on working in batch (like overnight thesis making) that they ended up not finishing anything at all. Why? Because a MODULE that is supposed to be done by MEMBER A is not done in time so the other MODULE by MEMBER B cannot move forward because it is dependent on MEMBER A&#8217;S MODULE. This is the common excuse during their defense and I believe its a common excuse among I.T. students everywhere when asked why the project was delayed for so long &#8212; and it&#8217;s all about <span style="font-weight: bold;">dependencies.</span></span></div>
<p><span style="font-size: small;"><br />
</span><span style="font-size: small;"><br />
Back then, I used to love deadlines because it makes me feel that I am the master of my own destiny. I used to love it because it makes mo more productive by giving me something to shoot for&#8230; a competition, a race, a tourney to win&#8230;</span></p>
<p><span style="font-style: italic; font-size: large;">&#8230; </span><span style="font-style: italic; font-size: large;">Now, <span style="text-decoration: underline;">I hate it </span>because if I’m behind schedule, I feel doomed and depressed and unmotivated.</span></p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=Deadlines%3A%20I%20used%20to%20love%20them&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;title=Deadlines%3A%20I%20used%20to%20love%20them&amp;bodytext=Just%20a%20day%20after%20graduation%2C%20I%20received%20a%20congratulatory%20note%20from%20the%20Director%20of%20Software%20Development%20at%20work.%20The%20email%20is%20addressed%20to%20the%20whole%20software%20development%20department%20and%20it%20goes%20something%20like%3A%0D%0A%0D%0A%22Congratulations%20in%20accomplishing%20anot" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;title=Deadlines%3A%20I%20used%20to%20love%20them" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;title=Deadlines%3A%20I%20used%20to%20love%20them&amp;notes=Just%20a%20day%20after%20graduation%2C%20I%20received%20a%20congratulatory%20note%20from%20the%20Director%20of%20Software%20Development%20at%20work.%20The%20email%20is%20addressed%20to%20the%20whole%20software%20development%20department%20and%20it%20goes%20something%20like%3A%0D%0A%0D%0A%22Congratulations%20in%20accomplishing%20anot" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=Deadlines%3A%20I%20used%20to%20love%20them%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Deadlines%3A%20I%20used%20to%20love%20them&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;t=Deadlines%3A%20I%20used%20to%20love%20them" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;t=Deadlines%3A%20I%20used%20to%20love%20them" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;title=Deadlines%3A%20I%20used%20to%20love%20them&amp;annotation=Just%20a%20day%20after%20graduation%2C%20I%20received%20a%20congratulatory%20note%20from%20the%20Director%20of%20Software%20Development%20at%20work.%20The%20email%20is%20addressed%20to%20the%20whole%20software%20development%20department%20and%20it%20goes%20something%20like%3A%0D%0A%0D%0A%22Congratulations%20in%20accomplishing%20anot" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fdeadlines-i-used-to-love-them%2F&amp;title=Deadlines%3A%20I%20used%20to%20love%20them" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/04/12/deadlines-i-used-to-love-them/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Leadership: Why I Love Going to Work</title>
		<link>http://blog.ianuy.com/2009/04/12/leadership-why-i-love-going-to-work/</link>
		<comments>http://blog.ianuy.com/2009/04/12/leadership-why-i-love-going-to-work/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 11:59:03 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Leadership]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=81</guid>
		<description><![CDATA[On April 17, 2009, I will be attending a  leadership seminar sponsored by Accenture Philippines. Accenture Student Leadership Conference is a 3-day seminar that will be held somewhere in Tagaytay.
According to Accenture&#8217;s website, participants will &#8220;learn about key Accenture leadership contribution areas by being value creators, business operators, and people developers through seminars and [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><span style="font-size: small;">On April 17, 2009, I will be attending a  <span style="font-weight: bold;">leadership seminar</span> sponsored by <span style="font-weight: bold;">Accenture Philippines</span>. <a href="http://careers3.accenture.com/Careers/Philippines/Graduate/StudentLeadershipConference_FAQs">Accenture Student Leadership Conference</a> is a 3-day seminar that will be held somewhere in <span style="font-style: italic;">Tagaytay</span>.</span></p>
<p><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/Sbx47woKCDIAAGCs8Wk1/SLC-FAQs.jpg?et=XWtJ1KWKJa4BYhGygYkh1Q&amp;nmid=0" border="0" alt="" width="300" height="199" /></span><span style="font-size: small;">According to Accenture&#8217;s website, participants will &#8220;learn about key Accenture leadership contribution areas by being value creators, business operators, and people developers through seminars and fun activities</span>&#8230; <span style="font-size: small;">They will also hear first-hand testimonials from some of the top Accenture Senior Executives, Managers, and Leads from various workforces and projects&#8221;.</span></p>
<p>If you have attended at least one leadership seminar in your life, you know that it will be full of ego-massaging and morale-boosting talks from some senior-management guy from some Fortune/Global 500 company. And some funny &#8220;group dynamics&#8221; that the event coordinators will link to a certain &#8220;leadership&#8221; quality but in reality, it will just make you tired and sweaty. I have yet to attend a leadership seminar that will <span style="font-weight: bold;">really</span> teach me on how to be a <span style="font-weight: bold;">really</span> good leader. <span style="font-size: small;">Accenture SLC&#8230; here&#8217;s hoping!</span></p>
<div style="text-align: justify;"><span style="font-size: small;"><span id="more-81"></span><br />
</span><span style="font-size: small;"><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbyNUwoKCDIAAG2bKrI1/Above-Beyond-logo-w-no-tag.jpg?et=cFZ%2BK2CF%2BLiXMse7dF8XLw&amp;nmid=0" border="0" alt="" width="300" height="106" /></span></span><br />
<span style="font-size: small;">During my College days, whenever there&#8217;s a new project that had to be done in <span style="font-weight: bold;">groups</span>, people never failed to nominate me as the <span style="font-weight: bold;">leader</span> (Mostly on CS* and IT* subjects) and I have always gladly accepted it. I like being the leader because I have total control of everything&#8230; from the implementation details like naming conventions and algorithms to project management details like deadlines and task </span><span style="font-size: small;">breakdowns. </span><span style="font-size: small;">And looking back, I was very successful on all of those endeavors. Successful in the sense that we have always submitted 2 weeks (at most 1 month) <span style="font-weight: bold;">be</span></span><span style="font-size: small;"><span style="font-weight: bold;">fore the deadline</span><span style="font-weight: bold;"> </span>and the <span style="font-weight: bold;">specs and feature set</span> (Including documentation and packaging) of our project is <span style="font-weight: bold;"><span style="font-style: italic;">above and beyond</span></span><span style="font-style: italic;"> </span>the agreed upon requirements. As my co-worker puts it, we may have &#8220;<span style="text-decoration: underline;">underpromised and overdelivered</span>&#8220;. Truth be told, all of my project related subjects garnered a grade of 1.0. (Making a point here).</span></div>
<p style="text-align: left;"><span style="font-size: small;"><br />
But it begs the question, why did my groupmates chose me as the leader? I don&#8217;t really know. But what I know is this&#8230; They <span style="font-weight: bold;">did not</span> choose be because I was inspirational, motivational nor because I have good leadership qualities&#8230; They chose me because <span style="font-weight: bold;">I can deliver</span> (and because they know that I will always do 85% of the work). They chose me because of my <span style="font-weight: bold;">technical abilities</span> and not because of my <span style="font-weight: bold;">leadership abilities</span>.<br />
</span></p>
<p>You know what? I don&#8217;t really think that I have &#8220;leadership&#8221; abiliti<span style="font-size: small;">es. In fact, I suck at being a leader, or at least I suck at the <span style="font-weight: bold;">people-side</span> of being a leader. I do not know anything about being <span style="font-weight: bold;">inspirational or motivational</span>. I do not know how to handle a group <span style="font-weight: bold;">efficiently</span>. I don&#8217;t know squat about WBS (Work-breakdown Structure) or <span style="font-weight: bold;">Teamwork</span>. Up till the end of my college days, I have, mostly, always worked alone.</span><span style="font-size: small;"><br />
</span></p>
<p>Tha<span style="font-size: small;">t&#8217;s why my biggest learning from my On-the-Job</span><span style="font-size: small;"> Training is learning on how to work with my teammates. Although I have learned a lot of technical stuffs like Software Delivery (From Automated Unit Testing to Image Builds) and a whole new field of Process Automation, I still consider learning to work harmoniously in a team environment as the most rewarding experience.</span><br />
<span class="insertedphoto"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbyMeAoKCDIAAE2ojDs1/anonymous-leadership-5000373.jpg?et=14I3ACav5A9LIYn5FnPa6Q&amp;nmid=0" border="0" alt="" width="300" height="216" /></span><br />
<span style="font-size: small;">At work, there are real leaders. People like my immediate supervisor (Development Manager) and his immediate supervisor (Director of Software Development) are the *real-world* leaders. And to tell you the truth, I think that they are GREAT at what they do. In both technical-side and people-side of lead</span><span style="font-size: small;">ing a software development team.</span><br />
<span style="font-size: small;"><br />
</span><span style="font-size: small;"><br />
</span><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/Sbye9AoKCDIAAB9e9uQ1/20724.strip.sunday.gif?et=jfJIAO5ijDBbUT87fHZL6w&amp;nmid=0" border="0" alt="" width="300" height="134" /></span><span style="font-size: small;">When I </span><span style="font-size: small;">was in college, one of my biggest fear is to have an immediate supervisor that has an MBA (Business Administration) degree. I call those </span><span style="font-size: small;">people &#8220;the </span><span style="font-size: small;">suits&#8221;. <a href="http://www.joelonsoftware.com/items/2006/06/16.html">Joel Spolsky</a> said that &#8220;Watching non-programmers trying to run software companies is like watching someone who doesn&#8217;t know how to surf trying to surf&#8230; The cult of the MBA likes to </span><span style="font-size: small;">believe that you can run organizations that do things that you don&#8217;t understand&#8221;. Which I totally agree-on&#8230; based on experience (I had this certain professor in college who have a PH.D. in BA and teaching management subjects like Quality Management who argues that the PENTAGON was infected with a virus ["the LOVE bug"] because their &#8220;firewall&#8221; was weak and not because, against the better judgment of his computer science student, of social engineering techniques).</span></p>
<p>So it was quite a relief when my supervisors at work happens to be really technical guys. Once in their careers, they were programmers. Real, actual, programmers. And that&#8217;s one of the things that motivates me at work. For me, that is what being a leader is all about. Leadership by example.</p>
<p><span class="insertedphoto"><img class="alignleft" style="border: 0pt none; width: 240px; height: 358px;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbylgQoKCDIAABi-YyQ1/leadership-mountain-guy.jpg?et=i7JCSff3Y19tPMati7Bn5g&amp;nmid=0" border="0" alt="" width="240" height="300" /></span></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;"><span style="font-size: small;">It is such a joy to come to work and see your supervisor, the development</span><span style="font-size: small;"> </span><span style="font-size: small;"><span style="font-weight: bold;">manager</span>, <span style="text-decoration: underline;">DEBUGGING and TRYING to fix an issue</span>. It is also a joy to have a manager who actually knows what you are doing. And there were instances at work while we are trying to fix a very complex issue, it is our development manager who cracked the case! I mean, there were times that our manager is much more smarter than us!</span><br />
<span style="font-size: small;"><br />
Just the other week, I saw the Director of Software Development seating at my co-worker&#8217;s workstation trying to fix an installer issue! I was shocked. A senior management guy directly working with a computer. That single event alone restored my faith on the system&#8230;</span></p>
<p><span style="font-style: italic; font-size: large;"><br />
&#8230;the belief that geeky guys can still succeed in a world where business acumen is valued more than technical skills.</span></p>
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;">
<p style="text-align: left;"><span style="font-size: small;">I&#8217;ll leave you with a short story from <a href="http://www.joelonsoftware.com/articles/BestSoftwareWriting.html">Joel Spolsky&#8217;s</a> blog about Leadership as this story shares the same sentiments as mine. Enjoy!</span></p>
<div style="text-align: left;">
<blockquote><p><em>For a few months in the army I worked in the mess hall, clearing tables and washing dishes nonstop for 16 hours a day, with only a half hour break in the afternoon, if you washed the dishes really fast. My hands were permanently red, the front of my blouse was permanently wet and smelly, and I couldn’t take it any more.</em></p>
<p><em>Somehow, I managed to get out of the mess hall into a job working for a high-ranking Sergeant Major. This guy had years of experience. He was probably twenty years older than the kids in the unit. Even in the field, he was always immaculate, wearing a spotless, starched, pressed full dress uniform with impeccably polished shoes no matter how dusty and muddy the rest of the world was around him. You got the feeling that he slept in 300 threadcount Egyptian cotton sheets while we slept in dusty sleeping bags on the ground.</em></p>
<p><em>His job consisted of two things: discipline and the physical infrastructure of the base. He was a bit of a terror to everyone in the battalion due to his role as the chief disciplinary officer. Most people only knew him from strutting around the base conducting inspections, screaming at the top of his lungs and demanding impossibly high standards of order and cleanliness in what was essentially a bunch of tents in the middle of the desert, alternately dust-choked or mud-choked, depending on the rain situation.</em></p>
<p><em>Anyway, on the first day working for the Sergeant Major, I didn’t know what to expect. I was sure it was going to be terrifying, but it had to be better than washing dishes and clearing tables all day long (and it’s not like the guy in charge of the mess hall was such a sweetheart, either!)</em></p>
<p><em>On the first day he took me to the officer’s bathroom and told me I would be responsible for keeping it clean. “Here’s how you clean a toilet,” he said.</em></p>
<p><em>And he got down on his knees in front of the porcelain bowl, in his pressed starched spotless dress uniform, and scrubbed the toilet with his bare hands.</em></p>
<p><em>To a 19 year old who has to clean toilets, something which is almost by</em> definition <em>the worst possible job in the world, the sight of this high ranking, 38 year old, immaculate, manicured, pampered discipline officer cleaning a toilet completely reset my attitude. If he can clean a toilet, I can clean a toilet. There’s nothing wrong with cleaning toilets. My loyalty and inspiration from that moment on were unflagging.</em> That’s <em>leadership.</em></p></blockquote>
<p><em><br />
</em></div>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;title=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work&amp;bodytext=On%20April%2017%2C%202009%2C%20I%20will%20be%20attending%20a%20%20leadership%20seminar%20sponsored%20by%20Accenture%20Philippines.%20Accenture%20Student%20Leadership%20Conference%20is%20a%203-day%20seminar%20that%20will%20be%20held%20somewhere%20in%20Tagaytay.%0D%0A%0D%0AAccording%20to%20Accenture%27s%20website%2C%20participants%20wil" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;title=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;title=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work&amp;notes=On%20April%2017%2C%202009%2C%20I%20will%20be%20attending%20a%20%20leadership%20seminar%20sponsored%20by%20Accenture%20Philippines.%20Accenture%20Student%20Leadership%20Conference%20is%20a%203-day%20seminar%20that%20will%20be%20held%20somewhere%20in%20Tagaytay.%0D%0A%0D%0AAccording%20to%20Accenture%27s%20website%2C%20participants%20wil" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;t=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;t=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;title=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work&amp;annotation=On%20April%2017%2C%202009%2C%20I%20will%20be%20attending%20a%20%20leadership%20seminar%20sponsored%20by%20Accenture%20Philippines.%20Accenture%20Student%20Leadership%20Conference%20is%20a%203-day%20seminar%20that%20will%20be%20held%20somewhere%20in%20Tagaytay.%0D%0A%0D%0AAccording%20to%20Accenture%27s%20website%2C%20participants%20wil" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fleadership-why-i-love-going-to-work%2F&amp;title=Leadership%3A%20Why%20I%20Love%20Going%20to%20Work" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/04/12/leadership-why-i-love-going-to-work/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Localization: A Programmer&#8217;s Dirty Job</title>
		<link>http://blog.ianuy.com/2009/04/12/localization-a-programmers-dirty-job/</link>
		<comments>http://blog.ianuy.com/2009/04/12/localization-a-programmers-dirty-job/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 10:47:32 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Job]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=70</guid>
		<description><![CDATA[When I was in College, I was amazed that the suits (&#8221;Business People&#8221;) are so willing to pay me good money just to spew out pieces of code that would eventually end up in a crappy system somewhere. Well, that was the time when I thought that working as programmer is just about programming. Or, [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: small;">When I was in College, I was amazed that the suits (&#8221;Business People&#8221;) are so willing to pay me good money just to spew out pieces of code that would eventually end up in a crappy system somewhere. Well, that was the time when I thought that working as programmer is just about programming. Or, that was the time when I believe that majority of a programmer&#8217;s time would be spent writing code&#8230; building stuffs.</span></p>
<p>Nowadays, when people ask me about my typical day at work, I always tell them that I&#8217;m working on a Localization Project. Most often than not, the common reply is &#8220;What&#8217;s that? Does it involve programming?&#8221; Yes, it involves &#8220;programming&#8221;, if you consider replacing a bunch of strings to their localized equivalent as &#8220;programming&#8221;.</p>
<p>As Mike Rowe will put it&#8230;</p>
<div style="text-align: center;"><span style="font-weight: bold;"><span style="font-size: large;">Localization&#8230; It&#8217;s a dirty job!</span></span><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbNJYwoKCDIAAFfWh0I1/MikeRowe.jpg?et=yOudM0HO%2CxniW3Wa5aMaOg&amp;nmid=0" border="0" alt="" width="175" height="175" /></span></div>
<p><span style="font-size: small;">Why is it a dirty job, you ask? Consider the <span style="font-weight: bold;">English </span>phrase &#8220;Preview and Spell Check&#8221;. Now let&#8217;s see how it will translate to different languages:</span></p>
<p><span style="font-weight: bold;">French: <span style="text-decoration: underline;">Prévision et contrôle de charme</span></span><br style="font-weight: bold;" /><span style="font-weight: bold;">German: <span style="text-decoration: underline;">Vorbetrachtung und Rechtschreibüberprüfung</span></span><br style="font-weight: bold;" /><span style="font-weight: bold;">Russian: </span><span style="font-size: small;"><span style="font-weight: bold;"><span style="text-decoration: underline;">??????????????? ???????? ? ???????? ????????????</span></span></span></p>
<p><span style="font-size: small;"><span id="more-70"></span><br />
A simple 23 letter English phrase will translate into a very complex 48 letter Russian gibberish. Do you understand now why this is a <span style="font-weight: bold;">dirty job? </span>No? Alright, let me illustrate with a simple dialog box&#8230;</span></p>
<p style="text-align: left;"><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNMngoKCDIAACqFinA1"></a><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNMngoKCDIAACqFinA1"></a><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNNqgoKCDIAAEPkF-M1"><span class="insertedphoto"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbNMngoKCDIAACqFinA1/Locale-English.JPG?et=c07w0dU1WdDkhAJtNdZVYw&amp;nmid=0" border="0" alt="" width="299" height="138" /></span></a><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNMngoKCDIAACqFinA1"></a><span style="font-size: small;"><br />
Now let&#8217;s try to localize this particular dialog box into Russian&#8230;<a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNMngoKCDIAACqFinA1"></a></span><br />
<a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNNqgoKCDIAAEPkF-M1"><img class="aligncenter" style="border: 0pt none;" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbNNqgoKCDIAAEPkF-M1/Locale-Russian.JPG?et=xVPUnGuDNDyVJ48RP68sXQ&amp;nmid=0" border="0" alt="" width="299" height="138" /></a><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNNqgoKCDIAAEPkF-M1"></a><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNNqgoKCDIAAEPkF-M1"></a><br />
<span style="font-size: small;">Because some languages are just so weird, a simple phrase will translate into a <span style="font-weight: bold;">paragraph</span>! And as &#8220;programmers&#8221;, its our job to <span style="font-style: italic;">resize</span> the offending component (See last button on the left) so that the translated phrase will fit. In this particular dialog, to be able to <span style="font-style: italic;">resize</span> the offending button, you need to:</span></p>
<ol>
<li><span style="font-size: small;">Resize the Form</span></li>
<li><span style="font-size: small;">Move the Textbox, the command button (button5) on the right , and the group box (groupbox2) on the right<br />
</span></li>
<li><span style="font-size: small;">Resize the groupbox (groupbox1) on the left</span></li>
<li><span style="font-size: small;">Finally, resize the offending button</span></li>
</ol>
<p style="text-align: left;"><span style="font-size: small;">You might say &#8220;Well, that&#8217;s easy! It won&#8217;t even take me 3 minutes to do that.&#8221;. Hah, I&#8217;m being too easy on you with that example. Consider this dialog then:</span><br />
<a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNQiAoKCDIAABN2DNU1"><img class="aligncenter" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbNQiAoKCDIAABN2DNU1/wgetgui-screenshot.png?et=wf6QugEL0EINRXcMrNgVQA&amp;nmid=0" border="0" alt="" /></a><span style="font-size: small;">Haha. Still too easy? How bout this?</span></p>
<p><a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNR5QoKCDIAAEBEN4Y1"><img class="aligncenter" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbNR5QoKCDIAAEBEN4Y1/o-filematrix.png?et=AgZTJMjIo6xBCSh%2CmugM4w&amp;nmid=0" border="0" alt="" /></a><br />
<img src="file:///C:/DOCUME%7E1/Ian/LOCALS%7E1/Temp/moz-screenshot-3.jpg" alt="" /><span style="font-size: small;">And it&#8217;s a bitch when the programmer that designed the original GUI does not understand the concept of GOOD UI DESIGN PRACTICES and decided that overlapping 20 groupboxes and toggling the Visible flag during <span style="font-weight: bold;">runtime</span> is a GOOD IDEA. (Yes, I know. I&#8217;ve done this a couple of times in the past and I apologize for having committed this damnable sin!)</span><br />
<a href="http://ianuy.multiply.com/photos/hi-res/upload/SbNUfQoKCDIAAAbpbkk1"><img class="aligncenter" src="http://images.ianuy.multiply.com/image/1/photos/upload/300x300/SbNUfQoKCDIAAAbpbkk1/Overlapping.JPG?et=D8dGHmfvlOhOFOBO79bRyw&amp;nmid=0" border="0" alt="" /></a><span style="font-size: small;">Now, consider the fact that we have a <span style="font-weight: bold;">very very huge system</span> that contains roughly <span style="font-weight: bold;">300+ </span>dialog boxes and the fact that we need to ship the system in <span style="font-weight: bold;">5 </span>different languages. Don&#8217;t get me wrong, we are using a localization tool to accomplish the task but somethings just have to done MANUALLY. It&#8217;s indeed a dirty job!</span></p>
<p>This hell right here is just <span style="font-weight: bold;">ONE</span> part of the Localization Job and it&#8217;s the <span style="font-weight: bold;">EASIEST PART!</span> Since some part of our codebase is so freakin old, when you change a small part of the code, all hell breaks loose. The system will break in 15 different places at the same time! And you know what&#8217;s great? The system is already localized that you won&#8217;t understand what the error message is saying! And with a codebase consisting of <span style="font-weight: bold;">MILLION LINES </span>of code (some from the 80&#8217;s), you&#8217;ll understand why localization is a dirty job.</p>
<p>Here&#8217;s the upside (YES! There is an upside), Localizing a piece of software into different languages automatically converts to sales. Its good money. And at times like this, contributing to the company&#8217;s bottom line is what separates you from being laid-off to keeping your job, even though its a dirty one. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>In the future, I have 2 projects lined up that involves *real* coding. But for now, I&#8217;ll have to make do.</p>
<p><span style="font-size: large;"><span style="font-style: italic;">&#8220;It&#8217;s a dirty job but someone&#8217;s gotta do it!&#8221;</span></span></p>
<p><span style="font-size: x-small;">*</span><span style="font-size: x-small;">PS: I used the term &#8220;Dialog Boxes&#8221; for the non-technical readers to understand. For the geeky guys, just translate. <img src='http://blog.ianuy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span><span style="font-style: italic;"><br />
</span></p>
<p><!-- Site Meter --><!-- Copyright (c)2006 Site Meter --></p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=Localization%3A%20A%20Programmer%27s%20Dirty%20Job&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;title=Localization%3A%20A%20Programmer%27s%20Dirty%20Job&amp;bodytext=When%20I%20was%20in%20College%2C%20I%20was%20amazed%20that%20the%20suits%20%28%22Business%20People%22%29%20are%20so%20willing%20to%20pay%20me%20good%20money%20just%20to%20spew%20out%20pieces%20of%20code%20that%20would%20eventually%20end%20up%20in%20a%20crappy%20system%20somewhere.%20Well%2C%20that%20was%20the%20time%20when%20I%20thought%20that%20working%20" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;title=Localization%3A%20A%20Programmer%27s%20Dirty%20Job" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;title=Localization%3A%20A%20Programmer%27s%20Dirty%20Job&amp;notes=When%20I%20was%20in%20College%2C%20I%20was%20amazed%20that%20the%20suits%20%28%22Business%20People%22%29%20are%20so%20willing%20to%20pay%20me%20good%20money%20just%20to%20spew%20out%20pieces%20of%20code%20that%20would%20eventually%20end%20up%20in%20a%20crappy%20system%20somewhere.%20Well%2C%20that%20was%20the%20time%20when%20I%20thought%20that%20working%20" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=Localization%3A%20A%20Programmer%27s%20Dirty%20Job%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=Localization%3A%20A%20Programmer%27s%20Dirty%20Job&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;t=Localization%3A%20A%20Programmer%27s%20Dirty%20Job" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;t=Localization%3A%20A%20Programmer%27s%20Dirty%20Job" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;title=Localization%3A%20A%20Programmer%27s%20Dirty%20Job&amp;annotation=When%20I%20was%20in%20College%2C%20I%20was%20amazed%20that%20the%20suits%20%28%22Business%20People%22%29%20are%20so%20willing%20to%20pay%20me%20good%20money%20just%20to%20spew%20out%20pieces%20of%20code%20that%20would%20eventually%20end%20up%20in%20a%20crappy%20system%20somewhere.%20Well%2C%20that%20was%20the%20time%20when%20I%20thought%20that%20working%20" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Flocalization-a-programmers-dirty-job%2F&amp;title=Localization%3A%20A%20Programmer%27s%20Dirty%20Job" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/04/12/localization-a-programmers-dirty-job/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>What makes a great programmer?</title>
		<link>http://blog.ianuy.com/2009/04/12/what-makes-a-great-programmer/</link>
		<comments>http://blog.ianuy.com/2009/04/12/what-makes-a-great-programmer/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 10:07:27 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Passion]]></category>
		<category><![CDATA[Programmers]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=57</guid>
		<description><![CDATA[Lo and Behold, I will now commit geeky heresy by confessing that&#8230;
&#8220;Programming is NOT a talent&#8221;
We, the nerds and the geeks, would like to believe that programming is a talent. That programming is&#8230; Something special. Something that cannot be learned fully. Something inherent &#8212; a gift from the gods. We would like to believe that [...]]]></description>
			<content:encoded><![CDATA[<p><span style="font-size: large;">Lo and Behold, I will now commit geeky heresy by confessing that&#8230;</span></p>
<div style="text-align: center;"><span style="font-size: large;">&#8220;Programming is <span style="font-weight: bold;">NOT </span>a talent&#8221;</span></div>
<div id="attachment_58" class="wp-caption aligncenter" style="width: 246px"><a href="http://blog.ianuy.com/wp-content/uploads/2009/04/beginning-programming-for-dummies.jpg"><img class="size-full wp-image-58" title="beginning-programming-for-dummies" src="http://blog.ianuy.com/wp-content/uploads/2009/04/beginning-programming-for-dummies.jpg" alt="Dummines can learn programming too." width="236" height="295" /></a><p class="wp-caption-text">Dummies can learn programming, too.</p></div>
<p><span style="font-size: large;"><span style="font-size: small;">We, the nerds and the geeks, would like to believe that programming is a talent. That programming is&#8230; Something special. Something that cannot be learned fully. Something inherent &#8212; a gift from the gods. We would like to believe that programmers are born &#8211; not made.</span></span></p>
<p><span style="font-size: large;"><span style="font-size: small;"><span id="more-57"></span>These beliefs stems from the premise that programming is an ART. Like singing or painting.</span></span></p>
<p>Let me be the one to tell you that programming is NOT a talent. However, let me stress the fact that programming is an ART and as all matters concerning art, passion separates the good from the great.</p>
<p>Programming can be learned. Programming Languages can be learned. Algorithms can be learned. Software Engineering techniques can be learned. Everything concerning programming can be learned. So what separates great programmers from <span style="font-size: large;"><span style="font-size: small;">good or mediocre </span></span><span style="font-size: large;"><span style="font-size: small;"> programmers? No, not talent. <span style="font-weight: bold;">Passion</span>.</span></span></p>
<p>Programming (or Software Development to be precise) is just building <span style="font-style: italic;">stuffs<span style="font-weight: bold;"> </span></span>for people to use&#8230; It&#8217;s a modern form of craftsmanship. Even in the old times,<span style="font-weight: bold;"> </span>craftsmanship is the vehicle for passion. <span style="font-weight: bold;">Passionate</span> people create great works, their <span style="font-style: italic;">magnum opus</span>. Passion is what separates a $5 painting to a $10,000,000 dollar one. Passion is reflected in the end product&#8230; It&#8217;s as if the heart of the creator is passed on into the product.</p>
<p>I still believe that programmers are not born &#8211; they can be made. But hear this, <span style="font-weight: bold;">Great</span> Programmers are born. Not because great programmers are born with great intellect. Not because great programmers are born with superb logical and rational thinking skills. Not because great programmers are just geniuses&#8230;</p>
<p><span style="font-size: large;">But because <span style="font-weight: bold;">GREAT</span> programmers are born with <span style="font-weight: bold;">passion</span>. The passion to create great programs.</span></p>
<p><span style="font-style: italic;"><span style="font-size: small;">&#8230;</span></span><span style="font-size: small;"> <span style="font-style: italic;">and passion can never, ever be learned.</span></span></p>
<p><!-- Site Meter --><!-- Copyright (c)2006 Site Meter --></p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=What%20makes%20a%20great%20programmer%3F&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;title=What%20makes%20a%20great%20programmer%3F&amp;bodytext=Lo%20and%20Behold%2C%20I%20will%20now%20commit%20geeky%20heresy%20by%20confessing%20that...%0D%0A%22Programming%20is%20NOT%20a%20talent%22%0D%0A%0D%0A%0D%0AWe%2C%20the%20nerds%20and%20the%20geeks%2C%20would%20like%20to%20believe%20that%20programming%20is%20a%20talent.%20That%20programming%20is...%20Something%20special.%20Something%20that%20cannot%20b" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;title=What%20makes%20a%20great%20programmer%3F" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;title=What%20makes%20a%20great%20programmer%3F&amp;notes=Lo%20and%20Behold%2C%20I%20will%20now%20commit%20geeky%20heresy%20by%20confessing%20that...%0D%0A%22Programming%20is%20NOT%20a%20talent%22%0D%0A%0D%0A%0D%0AWe%2C%20the%20nerds%20and%20the%20geeks%2C%20would%20like%20to%20believe%20that%20programming%20is%20a%20talent.%20That%20programming%20is...%20Something%20special.%20Something%20that%20cannot%20b" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=What%20makes%20a%20great%20programmer%3F%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=What%20makes%20a%20great%20programmer%3F&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;t=What%20makes%20a%20great%20programmer%3F" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;t=What%20makes%20a%20great%20programmer%3F" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;title=What%20makes%20a%20great%20programmer%3F&amp;annotation=Lo%20and%20Behold%2C%20I%20will%20now%20commit%20geeky%20heresy%20by%20confessing%20that...%0D%0A%22Programming%20is%20NOT%20a%20talent%22%0D%0A%0D%0A%0D%0AWe%2C%20the%20nerds%20and%20the%20geeks%2C%20would%20like%20to%20believe%20that%20programming%20is%20a%20talent.%20That%20programming%20is...%20Something%20special.%20Something%20that%20cannot%20b" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2Fwhat-makes-a-great-programmer%2F&amp;title=What%20makes%20a%20great%20programmer%3F" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/04/12/what-makes-a-great-programmer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>1 Software Developer == 2 Jeepney Drivers</title>
		<link>http://blog.ianuy.com/2009/04/12/1-software-developer-2-jeepney-drivers/</link>
		<comments>http://blog.ianuy.com/2009/04/12/1-software-developer-2-jeepney-drivers/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 09:53:53 +0000</pubDate>
		<dc:creator>Ian Uy</dc:creator>
				<category><![CDATA[Articles]]></category>
		<category><![CDATA[Salary]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://blog.ianuy.com/?p=50</guid>
		<description><![CDATA[I was wrong.
For a very very long time, I&#8217;ve always thought that the reason why Software Developers leave our country and work abroad is because of pure greed.
The realization came on the day of my job offer. Don&#8217;t get me wrong, their offer was good enough. In fact, it made me think of those developers [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_51" class="wp-caption aligncenter" style="width: 249px"><a href="http://www.tungateinparis.com/tungateinparis/pages/photography.html"><img class="size-full wp-image-51" title="jeepney-drivers" src="http://blog.ianuy.com/wp-content/uploads/2009/04/jeepney-drivers.jpg" alt="Jeepney Drivers in the Philippines" width="239" height="360" /></a><p class="wp-caption-text">Jeepney Drivers in the Philippines</p></div>
<p><span style="font-weight: bold;"><span style="font-size: large;">I was wrong.</span></span></p>
<p><span style="font-size: small;">For a very very long time, I&#8217;ve always thought that the reason why Software Developers leave our country and work abroad is because of pure greed.</span></p>
<p>The realization came on the day of my job offer. Don&#8217;t get me wrong, their offer was good enough. In fact, it made me think of those developers who are receiving &#8220;average&#8221; or &#8220;below average&#8221; salary.</p>
<p>A lot of realization came to me that day&#8230; I realized why the people of this country is so angry with the government and corrupt government officials (READ: Taxes). I also realized that even if I graduated Cum Laude in a prestigious school and even if I am working for a Global 500 company earning above average salary, I will not be able to live on my own comfortably.</p>
<p>On that very moment, I am living in reality&#8230; the real world &#8212; Not in the fantasy world presented on those success stories in Time Magazine about how a geek changed the world and earned a few billion dollars in the process.</p>
<p><span id="more-50"></span><br />
So let&#8217;s talk about reality&#8230;</p>
<p>In the Philippines, an average <span style="font-weight: bold;">entry level </span>software developer earns about 15,000 &#8211; 25,000 PHP a month (Gross). For the sake of our example, let&#8217;s say that Peter (an entry level software developer) earns about 20,000 PHP per month. If you factor-in all the deductables (30% tax, SSS, etc), Peter will have a take home pay of 15,308.34 PHP (<a href="http://www.wraithstrider.com/witholding_Site/pages/salary_index.html">Click here for the calculator</a>).</p>
<p>On the other end of the spectrum, Pedro, a very humble Jeepney Driver touring the Guadalupe route in Makati who never need to pay his taxes earns about a reasonable 500 pesos per day. Since Pedro here is very hardworking, he works 7 days a week. So Pedro earns about 15,000 php per month!</p>
<p>So that leads us to my conclusion that a Software Developer who finished a college degree and working on a multinational company is equivalent to 2 Jeepney Drivers who just have a high school diploma and is working without a boss and without the need to kiss the boss&#8217; ass on a daily basis!<br />
<br style="font-weight: bold;" /></p>
<div style="text-align: center;"><span style="font-size: large;"><span style="font-size: small;"><span style="font-weight: bold;">1 Peter == 2 Pedro</span></span></span></div>
<p><span style="font-size: large;"><br />
<span style="font-size: small;">With those things in mind, I think that in the near future, I will be included in the roster of Gen Y OFWs. Things really didn&#8217;t change that much since Rizal&#8217;s time, we are still under foreign rul</span></span><span style="font-size: small;">e</span><span style="font-size: small;">&#8230; but that&#8217;s another blog post.</span><br />
<span style="font-size: small;"><a title="Comparative salaries of IT employees in the Philippines" href="http://www.pinoymoneytalk.com/2008/06/26/philippine-it-salary-report/" target="_blank">Here&#8217;s the recent Salary Report</a> for IT Professionals here in the Philippines. Enjoy!<br />
</span></p>



Share and Enjoy:


	<a rel="nofollow" href="mailto:?subject=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers&amp;body=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F" title="E-mail this story to a friend!"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/email_link.png" title="E-mail this story to a friend!" alt="E-mail this story to a friend!" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://digg.com/submit?phase=2&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;title=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers&amp;bodytext=%0A%0D%0AI%20was%20wrong.%0D%0A%0D%0AFor%20a%20very%20very%20long%20time%2C%20I%27ve%20always%20thought%20that%20the%20reason%20why%20Software%20Developers%20leave%20our%20country%20and%20work%20abroad%20is%20because%20of%20pure%20greed.%0D%0A%0D%0AThe%20realization%20came%20on%20the%20day%20of%20my%20job%20offer.%20Don%27t%20get%20me%20wrong%2C%20their%20offer%20" title="Digg"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/digg.png" title="Digg" alt="Digg" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://reddit.com/submit?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;title=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers" title="Reddit"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/reddit.png" title="Reddit" alt="Reddit" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://delicious.com/post?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;title=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers&amp;notes=%0A%0D%0AI%20was%20wrong.%0D%0A%0D%0AFor%20a%20very%20very%20long%20time%2C%20I%27ve%20always%20thought%20that%20the%20reason%20why%20Software%20Developers%20leave%20our%20country%20and%20work%20abroad%20is%20because%20of%20pure%20greed.%0D%0A%0D%0AThe%20realization%20came%20on%20the%20day%20of%20my%20job%20offer.%20Don%27t%20get%20me%20wrong%2C%20their%20offer%20" title="del.icio.us"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/delicious.png" title="del.icio.us" alt="del.icio.us" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://twitter.com/home?status=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers%20-%20http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F" title="Twitter"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/twitter.png" title="Twitter" alt="Twitter" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://slashdot.org/bookmark.pl?title=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers&amp;url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F" title="Slashdot"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/slashdot.png" title="Slashdot" alt="Slashdot" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.facebook.com/share.php?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;t=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers" title="Facebook"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/facebook.png" title="Facebook" alt="Facebook" class="sociable-hovers" /></a>
	<a rel="nofollow" href="http://www.myspace.com/Modules/PostTo/Pages/?u=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;t=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers" title="MySpace"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/myspace.png" title="MySpace" alt="MySpace" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&amp;bkmk=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;title=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers&amp;annotation=%0A%0D%0AI%20was%20wrong.%0D%0A%0D%0AFor%20a%20very%20very%20long%20time%2C%20I%27ve%20always%20thought%20that%20the%20reason%20why%20Software%20Developers%20leave%20our%20country%20and%20work%20abroad%20is%20because%20of%20pure%20greed.%0D%0A%0D%0AThe%20realization%20came%20on%20the%20day%20of%20my%20job%20offer.%20Don%27t%20get%20me%20wrong%2C%20their%20offer%20" title="Google Bookmarks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/googlebookmark.png" title="Google Bookmarks" alt="Google Bookmarks" class="sociable-hovers" /></a>
	<a rel="nofollow" target="_blank" href="http://www.dotnetkicks.com/kick/?url=http%3A%2F%2Fblog.ianuy.com%2F2009%2F04%2F12%2F1-software-developer-2-jeepney-drivers%2F&amp;title=1%20Software%20Developer%20%3D%3D%202%20Jeepney%20Drivers" title="DotNetKicks"><img src="http://blog.ianuy.com/wp-content/plugins/sociable/images/dotnetkicks.png" title="DotNetKicks" alt="DotNetKicks" class="sociable-hovers" /></a>


<br/><br/>]]></content:encoded>
			<wfw:commentRss>http://blog.ianuy.com/2009/04/12/1-software-developer-2-jeepney-drivers/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

