<?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>Pervasive Code &#187; outsourcing</title>
	<atom:link href="http://www.pervasivecode.com/blog/category/outsourcing/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pervasivecode.com/blog</link>
	<description>Jamie Flournoy's Software Development Blog</description>
	<lastBuildDate>Fri, 19 Mar 2010 05:37:52 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Evaluating Future Web Application Technologies</title>
		<link>http://www.pervasivecode.com/blog/2007/11/12/evaluating-future-web-application-technologies/</link>
		<comments>http://www.pervasivecode.com/blog/2007/11/12/evaluating-future-web-application-technologies/#comments</comments>
		<pubDate>Mon, 12 Nov 2007 23:22:30 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[perl]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[strategy]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/11/12/evaluating-future-web-application-technologies/</guid>
		<description><![CDATA[Technical Architecture is a Form of Investing. I&#8217;m reminded of this sort of thinking because of recent news from RubyConf 2007.

First, IronRuby joins Ruby.NET in providing a Ruby runtime on .NET. They&#8217;re at different stages of completeness, and building on different .NET runtimes (DLR vs. the regular CLR), but the important point is that Microsoft [...]]]></description>
			<content:encoded><![CDATA[<p>Technical Architecture is a Form of Investing. I&#8217;m reminded of this sort of thinking because of recent news from <a href="http://www.rubyconf.org/">RubyConf</a> 2007.<br />
<span id="more-48"></span><br />
First, <a href="http://www.ironruby.net/">IronRuby</a> joins <a href="http://plas.fit.qut.edu.au/Ruby.NET/">Ruby.NET</a> in providing a Ruby runtime on .NET. They&#8217;re at different stages of completeness, and building on different .NET runtimes (<a href="http://blogs.msdn.com/hugunin/archive/2007/04/30/a-dynamic-language-runtime-dlr.aspx">DLR</a> vs. the regular CLR), but the important point is that Microsoft is investing in dynamic languages. Is it ready for production today? Probably not. But keep an eye on Ruby, Python, and JavaScript if you&#8217;re a .NET developer.</p>
<p>Second, <a href="http://docs.codehaus.org/display/JRUBY/2007/11/02/JRuby+1.1b1+Released">JRuby 1.1b1</a> has been released and as expected is considerably faster (see <a href="http://headius.blogspot.com/2007/11/top-five-questions-i-get-asked.html">item #5 in this link</a>) than the standard &#8220;MRI&#8221; runtime. JRuby joins <a href="http://www.jython.org/">Jython</a> and <a href="http://www.mozilla.org/rhino/">Rhino</a> in providing a JVM-based runtime for a dynamic language, with features designed to help developers mix and match the dynamic language code with Java code.</p>
<p>See the trend here? Python, Ruby, and JavaScript are emerging as the dynamic languages of the future for .NET and Java developers.</p>
<p>The hard work done by Sun and Microsoft to make their VMs work well is being leveraged by the next wave of languages. Threads, high performance I/O, memory management, and portability are all features that are quite expensive to get right, and the .NET and Java platforms have pretty much achieved that at this point. (Piggybacking newer, higher-level languages on these mature runtimes means that you get a mature new language runtime faster than if each language&#8217;s runtime were built from scratch and painstakingly debugged in isolation from the others.)</p>
<p>There are still some hurdles (performance, type safety fears, lack of mass market acceptance, ECMAScript 4 standardization and adoption, etc.), but in 2 or 3 years, things are going to change dramatically in the web application development world. The seeds of this change are already sown, and it&#8217;s just a matter of time. Threads, SQL, OOP, and garbage collection are all features of web application architectures that were initially controversial, but have now met with general acceptance. Dynamic languages are clearly the next step.</p>
<p>Obviously, Java and C# are far from dead, and in 10 years people will still be coding in Java and C#, because as with other languages like C and assembly, the newest and highest-level language isn&#8217;t automatically right for every project. But if you&#8217;re building web applications, most of what your code does falls into the categories of string manipulation, collection operations, or file and socket I/O. Image processing, crypto, full text search, and other CPU-heavy, byte-twiddling features may be part of your application, but you&#8217;re not writing the image scaler, RC4 cipher, or inverted index yourself; those are done in a library, probably written in C, and you&#8217;re just calling it. So your needs are likely to be similar to the sweet spot of dynamic languages: maximum expressivity and the fancy features to let you write clever code, making you productive and making the code as clean and elegant as possible. In other words, they put developer productivity first (lower labor cost and shorter development schedules) at the expense of runtime performance. Since hardware gets cheaper over time but <a href="http://www.laputan.org/mud/mud.html#Forces">code gets uglier over time</a>, this is probably the right choice to make for most web application projects.</p>
<p>Another interesting benefit of layering instead of starting over is that the integration between dynamic languages and Java or CLR languages is much nicer than managed vs. unmanaged code in .NET or, even worse, JNI in Java. That is, it won&#8217;t be a bloody mess to mix and match code, from a technical feasibility standpoint. This matters, because <a href="http://chadfowler.com/2006/12/27/the-big-rewrite">The Big Rewrite</a> is among the <a href="http://www.joelonsoftware.com/articles/fog0000000069.html">Things You Should Never Do</a>. But little bitty rewrites are fine, especially if you have a thorough test suite to help you avoid breaking things. (By the way, dynamic languages are <i>great</i> for writing automated tests.)</p>
<p>Which of these three (JavaScript, Python, or Ruby) is going to be dominant 5 years from now? I don&#8217;t think any of them will be. The dynamic language community is fragmented, and the various vendors and big sponsors of these three languages are fairly entrenched already. Microsoft is investing in all three; Google has standardized on Python and JavaScript to the exclusion of Ruby; Sun has hired the JRuby team; Mozilla is heavily invested in JavaScript; Adobe supports JavaScript in AIR but not Ruby or Python, etc. </p>
<p>In fact, if you encapsulated the glue code sufficiently well, you could mix and match JavaScript, Python, and Ruby in your application, and port your hideous hydra between the JVM and .NET. You would be wasting a lot of effort since the three languages are largely similar, but you could do it. Alternatively, you could create a portability layer between the DLR and the JVM a la WxWindows, and write-once-debug-everywhere in a more productive language than Java.</p>
<p>These are all repugnant ideas, but only because as I write this and as you read this, we probably realize that to attempt this today would be a huge task. But what about in 2010? Probably not so gross. What about an application that could be executed on Silverlight, AIR, Firefox, SWT, and Mono, unmodified? How about a mobile app that runs on smartphones regardless of the runtime (.NET vs. J2SE)? Not gross at all, and not unthinkable if your app is written in JavaScript using some kind of portability layer that doesn&#8217;t exist yet.</p>
<p>In the longer term, JavaScript (a.k.a. ECMAScript 4) is likely to become extremely popular. As far as I know it&#8217;s not quite a perfect fit for Steve Yegge&#8217;s <a href="http://steve-yegge.blogspot.com/2007/02/next-big-language.html">The Next Big Language</a>, but it&#8217;s the closest thing there is, and it has two critical advantages over Ruby and Python that will make it successful: C-family syntax (which makes development tools cheaper to build) and effectively unanimous buy-in from vendors and developers.</p>
<p>So, what about the other dynamic languages that people are using in large numbers today? What&#8217;s going to happen to ActionScript, CFScript, PHP, and VB?</p>
<p>ActionScript and CFScript are pretty close to JavaScript by design; I&#8217;ve read that ActionScript 3 is actually compliant with the ECMAScript 4 draft specfication. It&#8217;s pretty clear that Adobe is betting on JavaScript. In the near future (2 or 3 years) I predict that Adobe will rev its products and support ECMAScript 4 across the board.</p>
<p>PHP and VB.NET/VBScript will hang around for a long time because they&#8217;re approachable and already very popular, but they&#8217;ve already peaked, and will steadily decline as developers switch to C# (on the .NET side) and Rails (on the Linux side), and then JavaScript as soon as a serious web app framework and an ISP-friendly runtime exist. Microsoft will keep investing in VB to keep customers happy; Yahoo will keep investing in PHP because it is so heavily invested in PHP already; new developers will find PHP to be an easy starting point for light duty web development, with tons of documentation and free applications that they can download and hack. But PHP will not inherit the kingdom from C# or Java, and the languages which do achieve mainstream success after C# and Java will do everything that PHP does language-wise, and the market momentum around those languages will make them better than PHP at what PHP does. Developers will ask themselves why they would write the client side and server side in two different languages, especially when the server-side language is more expressive and has better portability and libraries. That&#8217;s not true yet, but it will be in a couple of years. In 5 years or so PHP and VBScript will go the way of Perl CGIs: still used, but by a community a tenth of the size it is today.</p>
<p>What about the new Java-based dynamic language, Groovy? Groovy is interesting, but it&#8217;s too late. The Java mainstream of vendors and developers only recently managed to convince the world of &#8220;serious&#8221; C++ developers that automatic garbage collection and JIT compiled bytecodes can actually work in a high traffic context. The next battle, to promote the dynamic language features that Java lacks but which Groovy brings, will take years to fight. Once a developer makes a decision to not use standard Java, Groovy is on a more or less level playing field with the JVM-hosted versions of Python, JavaScript, and Ruby, but each of those languages has far greater adoption than Groovy, and each of them has greater opportunity for leverage on other runtimes than Groovy. For a Java developer, once the door is opened to other languages, the only advantage Groovy has is that its syntax is familiar. Compare this to JavaScript which web developers also need to know how to use; why learn a third language (Groovy) in addition to Java and JavaScript? Over time the simplicity of coding and debugging in JavaScript on client and server, together with dynamic-language productivity, will overcome the momentum of the Java standard, and web developers using server-side Java now will gradually replace it with JavaScript on the JVM. Conservative attitudes in the mainstream Java community (including Fortune 500 companies and the many offshore development firms that write code for them) will make this take quite a while &#8211; probably 5 years before JavaScript becomes a common part of the architectures that currently use J2EE, and 10 years before Java goes the way of COBOL (maintained forever but not used for new projects).</p>
<p>So in conclusion, keeping an eye on the future value of a technology, including who&#8217;s investing in it and who&#8217;s talking about investing in it, is critical to making your own investments today. In five years you&#8217;re not going to be using the same technology stack that you are today, and your project&#8217;s success and your own salary will be tied in large part to how well you invested today.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/11/12/evaluating-future-web-application-technologies/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Bad, Bad Code</title>
		<link>http://www.pervasivecode.com/blog/2007/08/04/bad-bad-code/</link>
		<comments>http://www.pervasivecode.com/blog/2007/08/04/bad-bad-code/#comments</comments>
		<pubDate>Sat, 04 Aug 2007 22:21:02 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[humor]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[labor]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/08/04/bad-bad-code/</guid>
		<description><![CDATA[I&#8217;ve written before about tips for offshoring. One specific thing I said to watch for is the bait-and-switch of talent: during the sales process you&#8217;re shown rockstars, but the real code you get is written by clueless newbies. When you set up a project such that you&#8217;ve minimized the cost per hour of development, but [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve written before about <a href="http://www.pervasivecode.com/blog/2007/02/20/tips-for-offshoring/">tips for offshoring</a>. One specific thing I said to watch for is the bait-and-switch of talent: during the sales process you&#8217;re shown rockstars, but the real code you get is written by clueless newbies. When you set up a project such that you&#8217;ve minimized the cost per hour of development, but you don&#8217;t have anyone checking the work product (i.e. code reviews) coming from the subcontractor, very bad things happen.<br />
<span id="more-40"></span><br />
Here&#8217;s a doozy: <a href="http://www.discursive.com/blog/2007/07/in-2007-people-are-still-writing-jsp.html">In 2007, people are still writing JSP like this&#8230;</a></p>
<p>Check out the 4th message in the thread, with the big code sample.</p>
<ul>
<li>Table based HTML layout, and no CSS at all? Check. Heck, the table width % values don&#8217;t even add up to 100%.</li>
<li>SQL in the JSP? Check.</li>
<li>Making a new JDBC connection for each page view, instead of using a connection pool? Check.</li>
<li>Unescaped strings in the SQL? Check. (Not strings coming from the browser in this particular JSP page, but you don&#8217;t know where those strings originate. Why wouldn&#8217;t you escape it just in case?)</li>
<li>Failing to use a prepared statement? Check. (That would also solve the escaping problem.)</li>
<li>Using a string literal in a SQL or command line context, so you can&#8217;t log it beforehand? Check. Even better, the code makes a query string first, prints it (commented out), and then <i>uses a different string in the actual query</i>. Nice!</li>
<li>Using the JdbcOdbc driver? Check. (From <a href="http://java.sun.com/docs/books/tutorial/jdbc/basics/connecting.html">Sun&#8217;s JDBC Basics</a>: The JDBC-ODBC Bridge driver provided with JDBC is recommended only for development and testing, or when no other alternative is available.) I&#8217;m guessing that the use of ODBC here is the only reason why the database username and password aren&#8217;t embedded in the code sample and posted for all to see.</li>
<li>Empty exception catch block? Check.</li>
</ul>
<p>I&#8217;d have a hard time coming up with a fake example of bad code that was worse.</p>
<p>But wait, <a href="http://forum.java.sun.com/profile.jspa?userID=908177">what else has this person asked about</a>?</p>
<p>No way. Yes! <a href="http://forum.java.sun.com/thread.jspa?threadID=5156702&#038;messageID=9593464#9593464">Error in Socket and File Writing</a>!<br />
The post includes the router&#8217;s username and password, and its configuration including:</p>
<ul>
<li>Its IP address, and all of the routes it contains, and all of its interfaces and where they go</li>
<li>A couple of other passwords stored in the router</li>
<li>A crypto key that appears to be to a VPN (looks like a pre-shared key, meaning not a public key but one that must be kept secret)!</li>
</ul>
<p>I&#8217;m not gonna say &#8220;you get what you pay for&#8221; since open source software has served me very well, but I will say that you get what you bargain for. If your bargain includes not looking at the work product of the people you hire, which is to say, hiring the cheapest people available and not supervising them, you&#8217;re not going to be happy with what you get.</p>
<p>Of course, this <em>could</em> have been written by a U.S. citizen who works in a cube on-site and makes $200/hour. Point is, hire carefully, and supervise your workers. It seems simple when put that way, but it&#8217;s amazing how often companies are willing to hire software subcontractors carelessly (solely on price?) and then pay little or no attention to the resulting work, when the arrangement involves offshore outsourcing.</p>
<p>By the way, the IP addresses in the original post (with the awful code sample) are listed next to the name &#8220;Areva&#8221;, implying that this code is part of a project for Areva. Who is Areva? <a href="http://www.areva.com/servlet/operations-en.html">They make nuclear power plants</a>. Sweet dreams!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/08/04/bad-bad-code/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Great contracting advice from Josh Berkus</title>
		<link>http://www.pervasivecode.com/blog/2007/06/27/great-contracting-advice-from-josh-berkus/</link>
		<comments>http://www.pervasivecode.com/blog/2007/06/27/great-contracting-advice-from-josh-berkus/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 07:34:39 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[databases]]></category>
		<category><![CDATA[labor]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[postgresql]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/06/27/great-contracting-advice-from-josh-berkus/</guid>
		<description><![CDATA[Most of his rules are applicable to generic software consulting.
Josh&#8217;s Rules (of Database Contracting)
]]></description>
			<content:encoded><![CDATA[<p>Most of his rules are applicable to generic software consulting.</p>
<p><a href="http://blogs.ittoolbox.com/database/soup/archives/joshs-rules-of-database-contracting-17253">Josh&#8217;s Rules (of Database Contracting)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/06/27/great-contracting-advice-from-josh-berkus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Gray-hat business idea: MySpace integration hack vendor</title>
		<link>http://www.pervasivecode.com/blog/2007/02/27/gray-hat-business-idea-myspace-integration-hacker/</link>
		<comments>http://www.pervasivecode.com/blog/2007/02/27/gray-hat-business-idea-myspace-integration-hacker/#comments</comments>
		<pubDate>Tue, 27 Feb 2007 23:55:36 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/02/27/gray-hat-business-idea-myspace-integration-hacker/</guid>
		<description><![CDATA[With all of the zillions of companies building &#8220;widgets&#8221; for MySpace, Bebo, etc., it&#8217;s only a matter of time before the gray-hat crowd starts to see the dollar signs. Maybe they already have. But it seems like a large waste of effort for all of those strange little VC-funded startups playing remora to MySpace&#8217;s shark [...]]]></description>
			<content:encoded><![CDATA[<p>With all of the zillions of companies building &#8220;widgets&#8221; for MySpace, Bebo, etc., it&#8217;s only a matter of time before the gray-hat crowd starts to see the dollar signs. Maybe they already have. But it seems like a large waste of effort for all of those strange little VC-funded startups playing remora to MySpace&#8217;s shark to have to keep figuring out new ways to get their code to embed in MySpace layouts.<br />
<span id="more-16"></span><br />
What if there were a company which acted like the &#8220;security analyst&#8221; gray-hat companies of the 90s, which constantly looked for new exploits in MSIE, Windows, firewalls, web servers, etc. and slowly trickled them out so that they would always have a new and scary problem that their clients needed to know about and compensate for (until the vendor released a patch)?</p>
<p>This company would just find new and different ways of embedding Flash, AJAX code, iframes, etc. in MySpace and similar sites, and would then release sample code snippets and example apps that clients would use to build their widgets. Later on they could release some kind of API that made the same widgets work across all of those sites. Clearly they would be the first ones to re-engineer their hacks when MySpace decided to change its code for whatever reason (breaking existing widget embedding mechanisms).</p>
<p>I&#8217;m not going to do it, but it&#8217;s an interesting idea, and in my opinion, it&#8217;s only a matter of time. It&#8217;ll probably be someone overseas, in Russia or Eastern Europe who does this, since it&#8217;s not terribly well looked upon to sell what amounts to a cross between an exploit kit and an &#8220;undocumented APIs&#8221; reference for a big web site.</p>
<p>Or maybe it&#8217;s already out there, and I just don&#8217;t know about it&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/02/27/gray-hat-business-idea-myspace-integration-hacker/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Tips for Offshoring</title>
		<link>http://www.pervasivecode.com/blog/2007/02/20/tips-for-offshoring/</link>
		<comments>http://www.pervasivecode.com/blog/2007/02/20/tips-for-offshoring/#comments</comments>
		<pubDate>Tue, 20 Feb 2007 10:53:05 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[labor]]></category>
		<category><![CDATA[management]]></category>
		<category><![CDATA[offshoring]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[process]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/02/20/tips-for-offshoring/</guid>
		<description><![CDATA[Having just read Why you need to get rid of your freelance developer ASAP, and the comments under it, I can see that people are really clueless about offshoring. It&#8217;s a magic box that you put pennies in, and great code comes out a few weeks later!
Having worked for a few companies that sold themselves [...]]]></description>
			<content:encoded><![CDATA[<p>Having just read <a href="http://www.carsonified.com/misc/why-you-need-to-get-rid-of-your-freelance-developer-asap">Why you need to get rid of your freelance developer ASAP</a>, and the comments under it, I can see that people are really clueless about offshoring. It&#8217;s a magic box that you put pennies in, and great code comes out a few weeks later!</p>
<p>Having worked for a few companies that sold themselves as &#8220;a magic box that you put millions of dollars into, and great code comes out a few weeks later&#8221;, I know that this is a serious misconception. Subcontracting is fraught with peril. Offshore subcontracting is fraught with more peril, but it costs less per hour. In both cases, the peril is avoidable, but avoiding it requires that you manage the relationship carefully.</p>
<p>I&#8217;ve worked with offshore teams on a couple of occasions, and in one case I was fortunate enough to get sent overseas to work with the team in their own offices. I think I probably have more direct experience with offshoring than most developers or technical project managers, and I&#8217;ve seen how offshored projects can go awry, so I thought I&#8217;d share some tips for those of you considering offshoring a software project, or those involved with such a situation already.<br />
<span id="more-15"></span></p>
<p>One thing to think about first is whether you&#8217;ve really looked for folks locally. Pretty much everywhere I&#8217;ve worked, the management has been vehemently opposed to posting a public job listing. Simply spending <a href="http://www.craigslist.org/about/job.boards.html">$75 or less on Craigslist</a> was too much to spend for someone who&#8217;d probably be paid about $75/hr. Seriously. I&#8217;ve basically been limited to finding people I know, from past work or a mailing list or LinkedIn, and if nobody is available, panic! We need more people but there&#8217;s noooobody out there! Really? Have you tried?</p>
<p>A second question to ask is whether you could use a part-time (fixed # of hours/wk) or freelance person, and if they have to work in the office or not. If you&#8217;re about to hire someone thousands of miles away in a different time zone, you might want to make sure there&#8217;s not someone in town who just doesn&#8217;t feel like commuting but who&#8217;ll answer the phone during your business hours, or if there&#8217;s someone with a kid to take care of, who would be happy to work their butt off 5 hours a day in the office, but who needs the rest of their day to spend with the kid. Remember, you&#8217;re considering adopting a serious amount of communication overhead in order to get someone to work for you; you might do better to just find a 1/2 time person who is in the next room for a big chunk of each day.</p>
<p>Anyway, let&#8217;s assume you&#8217;ve exhausted those options and you&#8217;re going to definitely hire some folks in a foreign country far away.</p>
<p>Here are some questions to ask about the specific situation you&#8217;re evaluating, some of which are similar to things you&#8217;d want to ask about non-offshored situations.</p>
<p>Can you fire the developer without firing the project manager? Or are they a team that you have to fire as a unit, and lose all institutional knowledge? This gets even worse as the team gets bigger. Can you afford to can the whole development organization if you don&#8217;t like the way things are going? In other words, are you clear on whether you&#8217;re hiring a PM and having them hire developers in turn, vs. hiring a company that will act as a subcontractor?</p>
<p>Will the project manager fire the developer and find someone better, if the PM determines that the developer is not working out? Or will they try to cover up for it, or not worry about it since productivity is not their incentive, but keeping billable hours high is? Bear in mind that you may be paying the PM&#8217;s company one rate and that the developers may be paid 1/2 of that, and both you and the developers may see that as a really desirable hourly wage. If you think the PM works for you, then the developers should be paid by you, not by the PM, or at least you and the developers should have agreed on what the PM will pay them. Skimming contractor wages is common practice in the US, too, and depending on how extreme it is, it can create serious incentives for the PM to find new and inventive ways to cheat you.</p>
<p>Will the team&#8217;s primary language be the primary language used in your source code, and if so, will that limit your options if you decide to fire them and hire someone else? This isn&#8217;t a big issue for India, China, and Russia, but for some languages, you might have a very hard time finding another team that can read and understand the source code. You might also find that it&#8217;s impossible to integrate a local developer into your team because they only speak your language, not the language of the offshore team.</p>
<p>Are you sure they&#8217;re only working on your project, full time, and billing you their actual hours? Again, 150% of a low wage for you may not be a lot of money, but to them it might be livin&#8217; large, and worth the risk of getting caught padding hours. As far as my moderate research can tell, there&#8217;s no systematic, reliable, direct way to measure programmer productivity (not that people haven&#8217;t been trying for decades to come up with a way to do this), so you pretty much have to have someone on your end working closely with the team who can make a subjective judgement as to whether they really need 12 weeks to do something, or if 8 people are really working on your project all day every day on their end, or if they&#8217;re just scamming you.</p>
<p>Do you know that the developer you thought you hired is the same person who is coding for you? This is a textbook US consulting company scam: bring in the rockstars with the stellar resumes for the sales pitch, and then gradually roll them off onto the next new project, backfilling with clueless newbies, at the same billable rate as the rockstars.</p>
<p>Of course, falsified resumes are a problem too, just as they are here. If the company is in another country, they may do things like making up impressive-sounding universities and companies to pad resumes, or just copying someone else&#8217;s resume and putting their name on it. I have had a resume sent to me by a colleague who said it sounded strangely familiar. It belonged to a person that we had worked with, and was copied verbatim, with the name changed. I was on a 2 person team with the actual owner of this resume; I&#8217;m pretty darn sure the third guy wasn&#8217;t sitting in the little office in Mountain View with us unnoticed. In another case, a large offshoring company introduced a team from India and even flew some of them over to meet us. Two of them were supposedly the project technical leads, but in 3 months they never responded to my emails, never checked in code, and never were available for conference calls, and the PM made up excuse after excuse for why they were missing. We received invoices with their hours on them, and I couldn&#8217;t get our folks to stop paying for them. I&#8217;m convinced that they never worked on our project.</p>
<p>Is the professional culture in the offshore country the same as in yours? For instance, do they work exactly 8 hours a day and then bail, even if they promised they&#8217;d get something done today and it&#8217;s not done? Will they stay late, work weekends, etc. if you say something is an emergency? Most cultures in the rest of the world consider U.S. and U.K. working hours and work culture to be too long and too intense (and they&#8217;re right, but that&#8217;s a different issue). A colleague told me a story about an offshore team that was working on fixing a serious production bug which the U.S. team was freaking out about and clearly communicating the level of urgency of, but which didn&#8217;t stop the offshore team from quitting at the usual time on Friday and not working again until Monday even though the problem wasn&#8217;t resolved. ASAP doesn&#8217;t necessarily mean what you think it does, if the person on the other end is not on the same wavelength about work culture as you are. Getting someone to work all night or all weekend may not be negotiable, or it might just cost time and a half, or double, or something like that. Just make sure you have that spelled out explicitly, and if that means you need a &#8220;B team&#8221; in another time zone, or a local developer resource, so be it.</p>
<p>My favorite model for offshoring basically eliminates the subcontracting agreement, making the PM and developers (and anybody else you want to hire offshore) part of a wholly owned subsidiary company in their country. Instead of treating them as a unit, treat them as individuals working for a unit that you own, so you can give raises individually, replace the manager if necessary, and generally so that you can keep working with your subsidiary continuously no matter what happens. This means that you need to be pretty hands-on with managing them, but you have to do that no matter what.</p>
<p>Hope this helps!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/02/20/tips-for-offshoring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
