<?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>Teeeeejirrrrr &#187; Scribbles</title>
	<atom:link href="http://www.beanos.com/~tsoutij/wp/category/things/scribbles/feed" rel="self" type="application/rss+xml" />
	<link>http://www.beanos.com/~tsoutij/wp</link>
	<description>I like food. I like hammers. I like bunnies.</description>
	<lastBuildDate>Tue, 20 Jul 2010 02:05:41 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>The Cost of Incompetent Programmers</title>
		<link>http://www.beanos.com/~tsoutij/wp/2009/06/the-cost-of-incompetent-programmers</link>
		<comments>http://www.beanos.com/~tsoutij/wp/2009/06/the-cost-of-incompetent-programmers#comments</comments>
		<pubDate>Mon, 29 Jun 2009 21:58:59 +0000</pubDate>
		<dc:creator>Tijger Tsou</dc:creator>
				<category><![CDATA[Fail]]></category>
		<category><![CDATA[Fotzepolitic]]></category>
		<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Nerding]]></category>
		<category><![CDATA[Scribbles]]></category>
		<category><![CDATA[php script kiddies]]></category>
		<category><![CDATA[software development]]></category>
		<category><![CDATA[the bellcurve]]></category>
		<category><![CDATA[underqualified programmer]]></category>

		<guid isPermaLink="false">http://www.beanos.com/~tsoutij/wp/?p=921</guid>
		<description><![CDATA[This topic comes up for me not necessarily as a rant, but as I was going through some old notes before tossing them away, and this issue came up. How much damage can an organization do to themselves by hiring discount, unqualified programming resources? The answer: A hell of a lot. If you own a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.beanos.com/~tsoutij/wp/wp-content/uploads/2009/06/php_diagram.jpg"><img class="alignnone size-medium wp-image-922" title="PHP New Hire Diagram" src="http://www.beanos.com/~tsoutij/wp/wp-content/uploads/2009/06/php_diagram-387x499.jpg" alt="PHP New Hire Diagram" width="387" height="499" /></a></p>
<p>This topic comes up for me not necessarily as a rant, but as I was going through some old notes before tossing them away, and this issue came up. How much damage can an organization do to themselves by hiring discount, unqualified programming resources?</p>
<p>The answer: A hell of a lot.</p>
<p>If you own a small software development shop, do yourself a huge favor and keep reading.</p>
<p><span id="more-921"></span></p>
<blockquote>
<h2>Stupidity cost us about $250,000 over a 9 month period. Another $250,000 was lost for us in other means.</h2>
</blockquote>
<p>A previous company that I worked at had a habit of hiring low-cost coding staff to handle production quality servers- Not just any production machines&#8230; but the very hardware which was responsible for 100% of the revenue being generated for said company. This makes no sense as their client side programmers were generally top-notch, and among the more creative and competent that I have had the pleasure to work with.</p>
<p>Management also had a habit of protecting these junior staff members voraciously- for various reasons, but mainly economic. A single server-side programmer could cost two or three times more in salary to maintain. Also, some in the management felt that this staff member was a &#8216;worthy project&#8217; that could become a superstar programmer someday. I mean, it worked for Darko Milicic during his stint with the Pistons, didn&#8217;t it?</p>
<p>I calculated that my previous employer definitely cost themselves <strong>$250,000</strong> in lost cashmoney over a 9 month period for the mishaps they had in retaining ONE very junior server-side engineering resource. This was absolutely staggering to me. Another <strong>$250,000</strong> could easily be accounted for in other means. I&#8217;ll get to that in a moment.</p>
<p>The other sources for my numbers are the assumptions that:</p>
<ol>
<li>Yes, this programmer was causing problems nearly EVERY SINGLE DAY.</li>
<li>Five client/server development resources were utilized, at $20/hr in wage costs each time a bug needed to be fixed.</li>
<li>Eight QA staff were utilized, at $15/hr in wage costs to confirm said bug fix.</li>
<li>This underqualified developer introduced one bug per day, which took an average of six hours per bug to fix.</li>
<li>This individual worked for a period of 9 months, before finally being axed for causing a systemwide outage of all revenue generating products for a significant part of a business day.</li>
<li>Not entirely relevant, but said individual produced on average 15 lines of code per day, with the assumption of 21 working days per month. Vacation time is included in this count because this individual only really took one, and worked some weekends as well &#8211; so it all balances out.</li>
</ol>
<p>The numbers I am leaving out are:</p>
<ol>
<li>Costs to management salaries. The reason for this is twofold- one is that I don&#8217;t know how many staff members were involved in back-room decisionmaking each time we suffered downtime events. This ranges from one to four. Who knows&#8230;</li>
<li>Costs to my productivity. I was a systems admin, so it was my job to support the engineering staff. I had the unique experience of being able to read/understand code, but full well knew that I could not hold a candle to the proper engineers. In a nutshell, I could talk shop with them, and help diagnose problems. I was a bit faster than a plain old sysadmin at doing this. I was a good cheerleader at times. That&#8217;s about it.</li>
<li>Costs of contractors: During most of this 9 month period, we had consulting/contracting staff on board who had to shift gears to help fix problems on a near-regular basis. I simply did not accurately keep track of how often they had to drop whatever they were doing and scramble to help us.</li>
<li>The damage caused by spaghetti code. This is utterly incalculable. Each time new server-side programming staff were added they faced an absolute nightmare of a learning curve.</li>
<li>The amount of time lost by production server uptime &#8211; According to my notes we were down (and by that I mean not being able to process subscription material) for a period of nine total business days during that 9 month period. To this day I still don&#8217;t exactly know how many dollars per hour in transactions were being handled by those servers, so I can&#8217;t guess there. I won&#8217;t even bother to put a price tag on it, but it is the elephant in the room.</li>
</ol>
<p>If I really do have to hazard a guess at the total cost of damage over 9 months, then I&#8217;ll say that stupidity cost us about USD <strong>$500,000</strong> total. There is also the untold damage done to the reputation of the company, as subscribers probably grew tiresome of outages and took their business somewhere else.</p>
<blockquote>
<h2>How much damage can one incompetent programmer do to an organization? A hell of a lot.</h2>
</blockquote>
<p>In the end it isn&#8217;t my intention to throw anyone under the bus for the mistakes that were made. Guilty parties all know who they are, and to some degree or another, they all paid for it already, so there&#8217;s no need to flog that dead horse all over again.</p>
<p>The underqualified individual who boasted of general programming expertise which he did not have faced the prospect of never finding work in a proper engineering environment again. Management who felt they were saving money by having this resource around because of cost-effectiveness are facing the prospect of their entire company going down the tubes because the server-side codebase is nearly unmaintainable, among other things. Those of us who stuck around trying to fix the situation paid for it with a few sleepless nights, and the agony of <a href="http://en.wikipedia.org/wiki/Unusual_software_bug" target="_blank">&#8216;Heisenbug&#8217; </a>code which was nigh near unpossible to debug or maintain effectively.</p>
<p>I learned many things myself. I used to never document very well. Because of the insanity I was forced to deal with, I feel I have come a long way in that regard. I enjoy documenting now. It&#8217;s saved my ass a number of times since then.</p>
<blockquote>
<h2>Over a year after the staff member was let go, the server programmers were still fixing bugs.</h2>
</blockquote>
<p>Also, a young and promising programmer who was forced to help debug and manage the fix processes on a regular basis learned a hell of a lot from these failures, and it will serve him tremendously in his career as time goes on. This is the type of education you just can&#8217;t get in college. Over a year after the staff member was let go, he was still fixing bugs. The thing is, he&#8217;s already bailed on this company and isn&#8217;t looking back. If there was someone worth focusing on and making into your future team nucleus&#8230; this guy was the one.</p>
<p>What&#8217;s done is done, and hopefully dear reader, if you&#8217;re in management or if you own a small company, you won&#8217;t make the same mistakes that they did. I implore you to hire competent people. Don&#8217;t cheap out in that regard. It will cost you a whole lot more than you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beanos.com/~tsoutij/wp/2009/06/the-cost-of-incompetent-programmers/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Xythos Broken Advanced Upload Functionality</title>
		<link>http://www.beanos.com/~tsoutij/wp/2009/02/xythos-broken-advanced-upload-functionality</link>
		<comments>http://www.beanos.com/~tsoutij/wp/2009/02/xythos-broken-advanced-upload-functionality#comments</comments>
		<pubDate>Mon, 23 Feb 2009 16:29:18 +0000</pubDate>
		<dc:creator>Tijger Tsou</dc:creator>
				<category><![CDATA[Information Technology]]></category>
		<category><![CDATA[Nerding]]></category>
		<category><![CDATA[Scribbles]]></category>
		<category><![CDATA[advanced upload broken]]></category>
		<category><![CDATA[java.lang.ClassFormatError]]></category>
		<category><![CDATA[xythos]]></category>

		<guid isPermaLink="false">http://www.beanos.com/~tsoutij/wp/?p=362</guid>
		<description><![CDATA[We use Xythos at our workplace to provide a file repository for students and eventually faculty and staff. It&#8217;s basically a web front end for a file system. My personal feelings about the product are somewhat ho-hum and indifferent. It makes funny noises under the hood, it&#8217;s a bit clunky, but it works, runs on [...]]]></description>
			<content:encoded><![CDATA[<div class="wpg2tag-image"><a href="http://www.beanos.com/gallery/v/users/tsoutij/scribbles/i_eat_tapes.JPG.html" title="i_eat_tapes"><img src="http://www.beanos.com/gallery/d/46541-4/i_eat_tapes.JPG" width="400" height="267" id="IFid2" class="ImageFrame_none" alt="i_eat_tapes"/></a></div>
<p><!-- patch in wpg2embed.inc to make this work. --></p>
<p>We use <a href="http://www.xythos.com" target="_blank">Xythos</a> at our workplace to provide a file repository for students and eventually faculty and staff. It&#8217;s basically a web front end for a file system.</p>
<p>My personal feelings about the product are somewhat ho-hum and indifferent. It makes funny noises under the hood, it&#8217;s a bit clunky, but it works, runs on Linux and it&#8217;s reliable.</p>
<p>So you&#8217;re probably here because you searched on this error:</p>
<pre>java.lang.ClassFormatError: Truncated class file</pre>
<p>The problem is that you&#8217;re probably running your Xythos installation over port 443 (as you should) but there are still components trying to pull files down from port 80. With Xythos, if SSL is enabled, any requests to port 80 get dumped over to 443, and you will get truncated errors like above.</p>
<p><span id="more-362"></span></p>
<p>The fix is to feed some hardcoded variables for your site name into the application so it does not do that, and use port 443 isntead.</p>
<p>We use version 7.1, and in our case the error was addressed by editing the following file, in your Xythos installation:</p>
<p>/path_to_xythos/wfs&lt;version&gt;/webapps/xythoswfs/upload_advanced.jsp</p>
<p>Now look for the text &#8220;UPLOAD Applet&#8221;, and you should see some source that looks like this:</p>
<pre>&lt;!-- UPLOAD Applet --&gt;</pre>
<pre>&lt;% if (l_showApplet) { %&gt;</pre>
<pre>&lt;div class="xy_content" style="margin-top: 5px;"&gt;</pre>
<pre>  &lt;div id="uploadAppletDiv"&gt;</pre>
<pre>    &lt;script type="text/javascript"&gt;</pre>
<pre>      var l_altMessage = "&lt;%= p_msgBun.getString("NO_JAVA_PLUGIN_MESSAGE") %&gt;";</pre>
<pre>      printUploadApplet("uploadAppletDiv",</pre>
<pre>        "&lt;%= l_codeContext %&gt;",</pre>
<pre>        "&lt;%= l_sessionID %&gt;",</pre>
<pre>        "&lt;%= ServletUtil.makeHtmlSafe(l_baseWebdavServerURL) %&gt;",</pre>
<p>Change the following lines, so it looks like this:</p>
<pre>&lt;!-- UPLOAD Applet --&gt;</pre>
<pre>&lt;% if (l_showApplet) { %&gt;</pre>
<pre>&lt;div class="xy_content" style="margin-top: 5px;"&gt;</pre>
<pre>  &lt;div id="uploadAppletDiv"&gt;</pre>
<pre>    &lt;script type="text/javascript"&gt;</pre>
<pre>      var l_altMessage = "&lt;%= p_msgBun.getString("NO_JAVA_PLUGIN_MESSAGE") %&gt;";</pre>
<pre>      printUploadApplet("uploadAppletDiv",</pre>
<pre>&lt;%--        "&lt;%= l_codeContext %&gt;",  --%&gt;</pre>
<pre>        "https://yournamehere/xythoswfs",</pre>
<pre>        "&lt;%= l_sessionID %&gt;",</pre>
<pre>&lt;%--        "&lt;%= ServletUtil.makeHtmlSafe(l_baseWebdavServerURL) %&gt;",  --%&gt;</pre>
<pre>        "https://yournamehere",</pre>
<p>You won&#8217;t need to restart the Xythos service, but now give your setup a whirl. Advanced Upload functionality should work now. Be aware that if you do this, drop-in upgrades might break this functionality, and you&#8217;ll need to edit the new files again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beanos.com/~tsoutij/wp/2009/02/xythos-broken-advanced-upload-functionality/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bounce It Off My Head</title>
		<link>http://www.beanos.com/~tsoutij/wp/2008/12/bounce-it-off-my-head</link>
		<comments>http://www.beanos.com/~tsoutij/wp/2008/12/bounce-it-off-my-head#comments</comments>
		<pubDate>Wed, 03 Dec 2008 18:38:31 +0000</pubDate>
		<dc:creator>Tijger Tsou</dc:creator>
				<category><![CDATA[Scribbles]]></category>
		<category><![CDATA[Things]]></category>
		<category><![CDATA[flat city]]></category>
		<category><![CDATA[productivity]]></category>

		<guid isPermaLink="false">http://www.beanos.com/~tsoutij/wp/?p=269</guid>
		<description><![CDATA[]]></description>
			<content:encoded><![CDATA[<div class="wpg2tag-image"><a href="http://www.beanos.com/gallery/v/users/tsoutij/scribbles/_MGL9469.JPG.html" title="Bounce it off my head!"><img src="http://www.beanos.com/gallery/d/42390-4/_MGL9469.JPG" width="680" height="544" id="IFid4" class="ImageFrame_none" alt="Bounce it off my head!"/></a></div>
<p><!-- patch in wpg2embed.inc to make this work. --></p>
]]></content:encoded>
			<wfw:commentRss>http://www.beanos.com/~tsoutij/wp/2008/12/bounce-it-off-my-head/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smoothie Sale</title>
		<link>http://www.beanos.com/~tsoutij/wp/2008/11/smoothie-sale</link>
		<comments>http://www.beanos.com/~tsoutij/wp/2008/11/smoothie-sale#comments</comments>
		<pubDate>Thu, 20 Nov 2008 20:04:40 +0000</pubDate>
		<dc:creator>Tijger Tsou</dc:creator>
				<category><![CDATA[Scribbles]]></category>
		<category><![CDATA[Things]]></category>
		<category><![CDATA[flat city]]></category>
		<category><![CDATA[smoothie sale]]></category>

		<guid isPermaLink="false">http://www.beanos.com/~tsoutij/wp/?p=249</guid>
		<description><![CDATA[Yeah. This is how i feel right about now.]]></description>
			<content:encoded><![CDATA[<div class="wpg2tag-image"><a href="http://www.beanos.com/gallery/v/users/tsoutij/scribbles/2008_nov_14.jpg.html" title="Smoothie Sale"><img src="http://www.beanos.com/gallery/d/42372-4/2008_nov_14.jpg" width="640" height="640" id="IFid6" class="ImageFrame_none" alt="Smoothie Sale"/></a></div>
<p><!-- patch in wpg2embed.inc to make this work. --></p>
<p>Yeah. This is how i feel right about now.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.beanos.com/~tsoutij/wp/2008/11/smoothie-sale/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

