<?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>Andrey Gavrilov's IT-consulting</title>
	<atom:link href="http://www.freelanceconsult.biz/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.freelanceconsult.biz</link>
	<description>IT-consulting on working with offshore freelancers.</description>
	<lastBuildDate>Tue, 16 Feb 2010 09:46:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Windows Phone 7 series multitasking</title>
		<link>http://www.freelanceconsult.biz/2010/02/16/windows-phone-7-series-multitasking/</link>
		<comments>http://www.freelanceconsult.biz/2010/02/16/windows-phone-7-series-multitasking/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 09:30:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[analysis]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=31</guid>
		<description><![CDATA[One of the most interesting questions about Windows Phone 7 series is &#8211; multitask or not. Lack of direct answers leads some journalists to bad premonitions. But let&#8217;s look close to what we know.

1. Third-parties will be able to &#8220;bring value to the user, even when their apps aren&#8217;t running.&#8221; (http://gizmodo.com/5471805/windows-phone-7-series-everything-is-different-now).
2. &#8220;In some cases [a [...]]]></description>
			<content:encoded><![CDATA[<p>One of the most interesting questions about Windows Phone 7 series is &#8211; multitask or not. Lack of direct answers leads some journalists to bad premonitions. But let&#8217;s look close to what we know.<br />
<span id="more-31"></span><br />
1. Third-parties will be able to &#8220;bring value to the user, even when their apps aren&#8217;t running.&#8221; (<a href="http://gizmodo.com/5471805/windows-phone-7-series-everything-is-different-now" onclick="javascript:pageTracker._trackPageview ('/outbound/gizmodo.com');">http://gizmodo.com/5471805/windows-phone-7-series-everything-is-different-now</a>).</p>
<p>2. &#8220;In some cases [a hub is] guiding the users to the apps, in other cases it&#8217;s pulling data from the app or the app&#8217;s associated service&#8221; (<a href="http://gizmodo.com/5472235/windows-phone-7-apps-what-we-know-what-we-dont" onclick="javascript:pageTracker._trackPageview ('/outbound/gizmodo.com');">http://gizmodo.com/5472235/windows-phone-7-apps-what-we-know-what-we-dont</a>)</p>
<p>3. &#8220;If you play music, for example, the music will play back as you navigate around the experience and be smooth and glitch-free and all those sorts of things. If you&#8217;re using email, we have great support for push email, and that happens in the background.&#8221; (<a href="http://gizmodo.com/5472235/windows-phone-7-apps-what-we-know-what-we-dont" onclick="javascript:pageTracker._trackPageview ('/outbound/gizmodo.com');">http://gizmodo.com/5472235/windows-phone-7-apps-what-we-know-what-we-dont</a>)</p>
<p>So, that looks quite solid from my point of view. Each application may have background services, so if you close application, the service is running. The service could communicate with hubs (there are a lot of articles describing hubs in Windows Phone 7), sound, network and alerts.</p>
<p>Well, actually we don&#8217;t have any confirmations about alerts (but I assume &#8220;push emails&#8221; means some method of notifying users), and about restrictions for third-party applications. There could be some surprises there, but let&#8217;s make assumption what background services will be able to play sound, monitor network and perform other hardware-related tasks, as well as notifying users.</p>
<p>So with these assumptions we have to save &#8211; that&#8217;s everything we need from multitasking on the phone. Really, we don&#8217;t need several windows floating around on the small phone screen (actually I think we don&#8217;t need them for desktop either &#8211; but that&#8217;s different story). Instead we need background tasks to do their job, monitor events and inform users about their results.</p>
<p>Lets look at some standard apps requiring multitasking:<br />
- Instant messager. No problems. Background service monitors network and issue alerts on new messages arrive.<br />
- Archivers, downloaders, etc. No problems. They could do their work in background and send alert on completion.<br />
- Route tracking while performing other tasks. No problems if background tasks will have access to GPS functionality as well.</p>
<p>In fact the idea is not new. The same multitasking concept was included in Palm OS 6 (Cobalt). There were 2 types of thread &#8211; interface and background and this system worked quite well.</p>
<p>In fact I have only 2 concerns:</p>
<p>1. There could be some restrictions for third-party apps. They could be very painful for developers.</p>
<p>2. Not sure how application closing will work. Windows mobile had issues with not closing applications and I wonder if there will be an ability to close background tasks.</p>
<p>But apart from that, the new Microsoft OS looks more than promising.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2010/02/16/windows-phone-7-series-multitasking/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Low-to-middle 3D tools analysis</title>
		<link>http://www.freelanceconsult.biz/2009/04/02/low-to-middle-3d-tools-analysis/</link>
		<comments>http://www.freelanceconsult.biz/2009/04/02/low-to-middle-3d-tools-analysis/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 09:31:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[analysis]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=26</guid>
		<description><![CDATA[This article is a sample of research analysis work.
First we need to characterize the segment:
- Premium segment targets movies, games and CAD tasks. The tools of this segment are oriented on 3D modelling.
- Low-cost segment targets custom scene rendering. The tools of this segment are focused on scene composition from prebuilt models.
- Middle-cost segment targets [...]]]></description>
			<content:encoded><![CDATA[<p><strong>This article is a sample of research analysis work.</strong></p>
<p>First we need to characterize the segment:<br />
- Premium segment targets movies, games and CAD tasks. The tools of this segment are oriented on 3D modelling.<br />
- Low-cost segment targets custom scene rendering. The tools of this segment are focused on scene composition from prebuilt models.<br />
- Middle-cost segment targets the same tasks as previous, but for more advanced users. The tools of this segment are still focused on scene composition, but they also allow material editing, limited modelling and more advanced rendering.<br />
<span id="more-26"></span><br />
The following features are common for the low-level 3D tools:<br />
- Scene composition.<br />
- Simple rendering.<br />
- Library of models.<br />
- Posable human figures.<br />
- Conforming hair (hair emulation with 3D model attached to human figure).<br />
- Conforming cloth (cloth emulation with 3D model attached to human figure).<br />
The following features are usually present in middle-level 3D tools:<br />
- Simple physics.<br />
- Dynamic hair (change their form based on collisions and physical forces).<br />
- Dynamic cloth (change their form based on collisions and physical forces).<br />
- More rendering options.<br />
- Limited modelling functionality.<br />
- Environment design.</p>
<p>Low-level tools are often paired with middle-level tools by the same company. Many users increase their skills over time and low-level tools become not enough for them. By offering more advanced version, producers don&#8217;t loose their customers.</p>
<p>Below is the list of the most 3D tools of the low-to-middle segment with their analysis:</p>
<p><strong>Poser</strong></p>
<p>The most popular tool in the low-cost segment with some features from middle-cost (dynamic hair and cloth). Previous owner (e-frontier) offered Shade as a middle-cost tool, but current owner (Smith Micro) seems to have difficulties with supporting received code. Due to this they stopped selling Shade and started selling Vue from E-On Software as a middle-level companion for Poser. This move seems to be quite wise &#8211; currently Vue is the leader in landscape scene building.</p>
<p>Strong points:<br />
- Huge library of models.<br />
- Strong brand.<br />
- Rich set of features.</p>
<p>Weak points:<br />
- Quite obsolete interface.<br />
- Weak development in recent years.<br />
- Very weak library management (items are stored in a bunch of files, so there is no user-friendly method of adding/removing library items).<br />
- Obsolete concepts of conforming hairs and cloths can&#8217;t handle collisions.<br />
- Very limited set of dynamic hairs and cloths.<br />
- Most hairs and clothes are incompatible between figures.</p>
<p><strong>Daz Studio</strong></p>
<p>Free tool from Daz3D designed to be Poser-compatible. While it still misses some Poser features (dynamic hair and cloth, some material options, etc.) its under very active development and seems to evolve much faster.</p>
<p>In the near future Daz3D is going to add poser-incompatible dynamic cloth plugin to the Daz Studio. The plugin is going to combine collision handling from dynamic cloth with nice look of conforming cloth. But since the plugin isn&#8217;t released yet, this statement is difficult to proof.</p>
<p>Daz3D offers Carrara as middle-level pair for the Daz Studio.</p>
<p>Strong points:<br />
- Access to Poser libraries.<br />
- Very intuitive interface.<br />
- Active development.<br />
- Very rich set of plugins.<br />
- No cost.</p>
<p>Weak points:<br />
- All Poser libraries disadvantages.<br />
- Some Poser incompatibilities.</p>
<p><strong>MakeHuman</strong></p>
<p>Opensorce product for designing human figures. It doesn&#8217;t allow scene composition, but still could produce great results if paired with any other 3D tool.</p>
<p>Makehuman 1.0 which is currently under heavy development, is going to introduce hair and cloth support, which could make it a great Poser competitor.</p>
<p>Strong points:<br />
- Open source.<br />
- Full compatibility between models (we&#8217;ll wait for hair and cloth support to see how well it will be).<br />
- Active development.<br />
- Accurate human modelling with huge number of options.</p>
<p>Weak point:<br />
- Restrictive GPL license prohibits integration into commercial aplications.<br />
- No compatibility with existing libraries.</p>
<p><strong>Carrara</strong></p>
<p>Carrara is Daz3D middle-cost tool. In the recent years Daz3D stopped development of specialized products (Bryce for landscapes and Hexagon for modelling), trying to make Carrara one tool for all. However, Carrara landscape design is still weaker than in Bryce, so currently Daz3D have no competitor to Vue in this area.</p>
<p>Also, Carrara has the same problems as Poser &#8211; it changed too many owners and current development is quite slow. This makes Daz Studio &#8211; Carrara pair less effective, since Daz Studio development is much faster. For example, there is no plans to support dynamic clothes in Carrara. It is rumored that in the future Carrara could be replaced with something like &#8220;Daz Studio Professional&#8221;.</p>
<p>Unlike Vue, which imports Poser content using Poser itself, Carrara has its own support of Poser content. However, the compatibility is even more limited than in Daz Studio. Carrara has support for dynamic hairs, but they are incompatible with Poser.</p>
<p>Strong points:<br />
- Good &#8220;all-in-one&#8221; tool close to premium segment.<br />
- Modern interface.<br />
- Poser content support.</p>
<p>Weak points:<br />
- Slow development.<br />
- Lacks 64-bit version (due to powerful set of features, especially in rendering, 32-bit version crashes with &#8220;Out of memory&#8221; very often).<br />
- Limited support for Poser content.<br />
- Problems with Daz Stusio compatibility.</p>
<p><strong>Vue</strong></p>
<p>Vue is environment design application. However, due to powerful renderer, Vue is a good companion for low-cost 3D tools. User could setup and pose human models in a low-cost tool and then place it into Vue environment and render.</p>
<p>Vue even supports posing figures right inside it, using Poser. However it is not recommended on 32-bit systems &#8211; Vue has the same memory problems as Carrara in 32-bit version.</p>
<p>Strong points:<br />
- Leading environment design tool.<br />
- Powerful renderer.<br />
- 64-bit version available.</p>
<p>Weak points:<br />
- Narrow specialization.<br />
- Lack of internal posing support.</p>
<p><strong>Conclusion</strong></p>
<p>While the market seems to be very rich, it suffer from obsolete concepts. Most of the 3D content available is based on 10-year old Poser approaches (this statement mostly relates to human figures and hairs/clothes for them).</p>
<p>Two tools has a good perspectives:</p>
<p>Daz Studio&#8217;s approach is to add modern features while not breaking compatibility with huge set of Poser content. Going this way Daz3D has a very good chances against quite stagnant Poser.</p>
<p>MakeHuman offers fully modern approach, including figure unification. However its success will greatly depend on number of cloth models produced for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2009/04/02/low-to-middle-3d-tools-analysis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Economic recession and software outsourcing</title>
		<link>http://www.freelanceconsult.biz/2008/12/28/economic-recession-and-software-outsourcing/</link>
		<comments>http://www.freelanceconsult.biz/2008/12/28/economic-recession-and-software-outsourcing/#comments</comments>
		<pubDate>Sun, 28 Dec 2008 15:18:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Find a freelancer]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[offshore]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=20</guid>
		<description><![CDATA[During the crisis the only way to run business is to decrease costs and increase demand as much as possible. In terms of software projects you need cheap and highly skilled developers. This is there the recession gives great opportunities.

However jobless skilled developers are still rare. In Europe and USA they are last to fire [...]]]></description>
			<content:encoded><![CDATA[<p>During the crisis the only way to run business is to decrease costs and increase demand as much as possible. In terms of software projects you need cheap and highly skilled developers. This is there the recession gives great opportunities.<br />
<span id="more-20"></span><br />
However jobless skilled developers are still rare. In Europe and USA they are last to fire and there are still enough money to afford them. In China and India skilled developers are not very common and they have no problems finding a job if they loose one. So the most attractive place for hiring software freelancers is Eastern Europe, especially young post-soviet countries.</p>
<p>Countries like Latvia or Ukraine have a lot of top software developers who lost their work recently. And in contrast with other countries with strong IT, Eastern Europe couldn&#8217;t find new jobs for these people.</p>
<p>Hiring the newly jobless professionals is a tricky task, though. Their English is usually at &#8220;technical&#8221; level (just enough to read technology manuals and leave code comments) and they rarely know how to sell themselves on freelance websites. The jobless top software developers also often doesn&#8217;t have a portfolio, since they usually work on large projects, which could be of internal use and/or even unfinished.</p>
<p>To work with this kind of professionals it is required to have a native speaker, who is on the one hand familiar with the project and on the other hand familiar with Eastern Europe software development environment. Lets call this person a representative, since his/her role is to play on the project owner&#8217;s side in the developers&#8217; language.</p>
<p>The first task for the representative will be gathering CV from the sites native to developers. With the database, remote interviews should be done to determine actual skill since (remember this?) portfolio could be irrelevant.</p>
<p>After the team is gathered, the representative should be used in the communication between the project owner and developers. It is usual for Eastern Europe software developers to have enough English skills to read documentation, but not enough to discuss it. In this situation representative is the only person who could ensure understanding for both sides.</p>
<p>There is also an interesting side effect of using the representative. Most top software developers prefer agile software development practices, which require skills and constant communication from the customer. With trusted representative, who plays the customer role in the agile processes, this could be done.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/12/28/economic-recession-and-software-outsourcing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology overview: Ruby</title>
		<link>http://www.freelanceconsult.biz/2008/09/01/technology-overview-ruby/</link>
		<comments>http://www.freelanceconsult.biz/2008/09/01/technology-overview-ruby/#comments</comments>
		<pubDate>Mon, 01 Sep 2008 09:32:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=19</guid>
		<description><![CDATA[The Ruby is initially multi-purpose language, but in this article we&#8217;ll focus on web development, since in other areas Ruby is much less popular.

The key aspect of Ruby language &#8211; it was designed to take the best things from other languages to make programming quick and fun. This leads to the following advantages:
- Many high-skilled [...]]]></description>
			<content:encoded><![CDATA[<p>The Ruby is initially multi-purpose language, but in this article we&#8217;ll focus on web development, since in other areas Ruby is much less popular.<br />
<span id="more-19"></span><br />
The key aspect of Ruby language &#8211; it was designed to take the best things from other languages to make programming quick and fun. This leads to the following advantages:<br />
- Many high-skilled developers prefer Ruby.<br />
- Ruby development is really fast.<br />
- Ruby applications are usually good-architectured and easy to maintain.</p>
<p>But there are also disadvantages in the approach:<br />
- The language performance was sacrificed to development speed. The long-awaited Ruby 2.0 is going to make it better, but Ruby will never be a performance competitor for Java or .NET.<br />
- The language is almost unusable for novice developers. Lots of advanced features and overgrown semantics makes the Ruby code totally unreadable for unskilled programmers.<br />
- Good Ruby developers are not only expensive. For many of them programming is art, not craft. While this kind of people produce beautiful code, they rarely follow time constraints.</p>
<p>The key of Ruby success on the web is Ruby on Rails framework. It had a lot of revolutionary and unique features at the time of appearance. Of course, modern frameworks in other languages already adopted these features, but RoR (as Ruby on Rails usually abbreviated) took its piece of pie.</p>
<p>The RoR have another advantage &#8211; it dominates the Ruby world (Ruby have a couple of other frameworks, but they aren&#8217;t competitors). While Java, for example, have much wider community, it is spread over dozens of approaches. So by consolidated efforts of the Ruby community, RoR have a very rich set of plugins.</p>
<p>The weak point of RoR is pre-built solutions. There are some content-management systems, blogs, etc., but they aren&#8217;t so consolidated as RoR framework and thus have very pure community.</p>
<p>So to summarize this. Use Ruby on Rails in the following cases:<br />
- There are a lot of custom requirements, making pre-built solutions poorly usable.<br />
- Project expects high maintaince, probably by different teams. A lot of additional requirements could appear during or after development.<br />
- All performance-critical functionality (such as multimedia processing) is clearly separated and could be done in another language. This requirement applies to PHP as well.<br />
- There is a team of Ruby developers ready for the project.</p>
<p>It is not recommended to use Ruby on Rails if:<br />
- There is a pre-built PHP solution which fits the project&#8217;s requirements.<br />
- Part of the project interface is performance critical. Or interface have very tight connection with performance-critical parts.<br />
- The project&#8217;s team need to be build from scratch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/09/01/technology-overview-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Technology overview: PHP</title>
		<link>http://www.freelanceconsult.biz/2008/08/25/technology-overview-php/</link>
		<comments>http://www.freelanceconsult.biz/2008/08/25/technology-overview-php/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 11:29:48 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=18</guid>
		<description><![CDATA[This material opens a long-awaited cycle of technology overviews. While one article couldn&#8217;t be sufficient to make well-grounded decisions, it should give enough understanding for reviewing technical proposals.

PHP is quite old for internet technologies (existing from 1995) and it is very simple in concept. Since then, it eveolved, and eveolved, and gained a lot of [...]]]></description>
			<content:encoded><![CDATA[<p>This material opens a long-awaited cycle of technology overviews. While one article couldn&#8217;t be sufficient to make well-grounded decisions, it should give enough understanding for reviewing technical proposals.<br />
<span id="more-18"></span><br />
PHP is quite old for internet technologies (existing from 1995) and it is very simple in concept. Since then, it eveolved, and eveolved, and gained a lot of competitors. But it&#8217;s still the most popular server-side technology in the internet. To understand the PHP place in the internet world, you need to remember one word &#8211; &#8220;cheap&#8221;.</p>
<p><strong>First</strong> thing is cheap sites. Initially PHP was used to add some functionality to an HTML page structure. It is still used this way very often. The sites built this way cost not much more than plain HTML.</p>
<p><strong>Second</strong> thing is a cheap hosting, even free. Since PHP is often used for cheap sites with minimal functionality, it&#8217;s easy to host a lot of different sites on one physical server without virtualization and other complex things.</p>
<p>The <strong>third</strong> thing is cheap developers. PHP is easy, if you use it with the cheap sites approach. This is the point where PHP kicks out all other server-based technologies. If development for Ruby on Rails is 2 times faster than plain PHP, it still have no sence if the PHP developers are 3 times cheaper.</p>
<p>The <strong>fourth</strong> thing is cheap software, usually open-source. PHP developers are numerous and they produce a lot of free and cheap stuff. So it is very common way of website development &#8211; just use a pre-built PHP solutions and customize it for your needs.</p>
<p>Of course, words &#8220;cheap&#8221; and &#8220;simple&#8221; have their drawbacks.</p>
<p><strong>First</strong>, the PHP technology is oriented for easy development not efficiency (Ruby have the same issue, but it is oriented on very, very different kind of developers). If you need to make something complex &#8211; you need to do it externally. Usually Unix C applications are used for this purpose. If you have complex requirements &#8211; say goodbye to cheap hosting and say hello to expensive developers.</p>
<p><strong>Second</strong>, PHP promotes bad architecture. Architecture is the thing, what needs to be learned (object-oriented approach, template-driven websites, etc.), so basic PHP is designed to live without it. If you need a large project, be very careful with PHP &#8211; the result could be a maintenance disaster.</p>
<p><strong>Third</strong> thing is what most of the pre-built PHP solutions (content-management systems, social networks, etc.) were started by cheap developers with very weak architecturing skills. I think this occurs because experienced developers prefer to develop existing solutions instead of reinventing the wheel. Anuway, all the PHP solutions I&#8217;ve studied, are internally catastrophic.</p>
<p>How to make use of PHP pluses, negating its minuses? Here are some guidelines:</p>
<p><strong>First</strong>, the PHP is for interfaces. Separate the performance-critical parts from the requirements. If these parts are tightly coupled with interface, it is better to proceed without PHP, otherwise use it freely.</p>
<p><strong>Second</strong>, seek experienced PHP developers. There are many people who learned a lot in PHP, but for some reasons didn&#8217;t move to other technology. They are usually cheaper than, for example, Java developers, but have enough skills to produce well-architectured projects.</p>
<p><strong>Third</strong>, use pre-built PHP solutions with a history. During their evolution, the solutions usually learned to hide their disadvantages. For example, in WordPress architecture, any module could ruin other modules or even the system core. But the WordPress developed naming conventions, which, if strictly followed, prevent the collisions.</p>
<p>The examples of useful open-source PHP projects at the time of writing are: WordPress and Drupal. Joomla have a long history, but there are still a lot of pitfalls in it, so choose it with care.</p>
<p><strong>Fourth</strong>, if not use pre-built solution, use frameworks. Framework is architecture &#8220;skeleton&#8221;, so if developer follows it, this ensures quite good architecture. It is also very important, what this architecture will be easily understandable for other developers with the framework&#8217;s knowledge.</p>
<p>Most popular PHP frameworks are Zend Framework (from the company developing PHP itself) and Symfony. Both have good and flexible object-oriented design.</p>
<p>There is one pitfall of the frameworks, however &#8211; developers could make sites &#8220;near&#8221; the framework, so it is installed, but mostly not used. To prevent this, use experienced developers as supervisors, preferrable with high scores on the framework-related tests.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/08/25/technology-overview-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Choosing software technology</title>
		<link>http://www.freelanceconsult.biz/2008/07/29/choosing-software-technology/</link>
		<comments>http://www.freelanceconsult.biz/2008/07/29/choosing-software-technology/#comments</comments>
		<pubDate>Tue, 29 Jul 2008 10:35:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[organization]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=17</guid>
		<description><![CDATA[In a classic software development, technology choice is left to the programmers&#8217; company. This approach makes sense if the company have a broad variety of professionals, or if technology choice is obvious. But usually the development company offers solutions based on their staff skills, not the task.
So it seems logical to select the technologies first [...]]]></description>
			<content:encoded><![CDATA[<p>In a classic software development, technology choice is left to the programmers&#8217; company. This approach makes sense if the company have a broad variety of professionals, or if technology choice is obvious. But usually the development company offers solutions based on their staff skills, not the task.</p>
<p>So it seems logical to select the technologies first and the development company basing on it. The perfect way is to use independent consulting on this stage, but I&#8217;m going to give several guidelines on the technology choice here and brief overview of the most popular technologies in further materials.</p>
<p><span id="more-17"></span></p>
<p><strong>Critical parameters</strong></p>
<p>The first criteria is environment:<br />
- Desktop (list of operating systems).<br />
- Server (list of operating systems).<br />
- Mobile (list of operating systems).<br />
- Browser (list of supported web browsers).<br />
- Plugin (list of supported applications).<br />
Each environment have its own strong, weak and completely inapplicable technologies. So at this step we could greatly filter our technology list.</p>
<p>For application there could be multiple environments. In this case it is useful to check which environments have shared functionality and which aren&#8217;t. For example &#8211; client and server applications usually don&#8217;t have shared functionality, while different clients (i.e. Windows, Linux and Mobile phones) have. The general rule is simple &#8211; in case of shared functionality it is recommended to use one technology to reuse the code.</p>
<p>The next criteria is critical requirements, like application performance or direct working with hardware. By analyzing these requirements it is possible to finally make a list of technologies to choose.</p>
<p>One important thing to note is that application for one environment could be made with several technologies. For example it is possible to make performance-critical modules on fast low-level languages, and combine it with GUI written in high-level language for faster development.</p>
<p><strong>Additional parameters</strong></p>
<p>After the first phase we already have a list of possible technologies. Now we need to optimize our project to develop it fast and cheap. It is recommended to make a full list of technology variants, gather additional parameters for each of them and later estimate. Here come the additional parameters.</p>
<p>The first criteria is library availability. Most projects have a lot of common functionality, so it seems logical to found the things already done and reuse them. Libraries could be open-source (in this case developers could fix the bugs and add features if needed) or proprietary (in this case you could count of support). The libraries could come in form of framework or even customizable application, general principle is the same &#8211; reuse code to reduce the work.</p>
<p>Second criteria is resource availability. For some technologies developers are very rare, for some &#8211; common, but costly, etc. This corresponds with <a href="http://www.freelanceconsult.biz/2008/07/10/developer-quality-guide/" title="Developer quality guide">code quality question</a>, since different parts of the application may require different developer qualification.</p>
<p>The last and slightly mythical criteria is development speed for the technology. This question caused a lot of holy wars between developers, but in general it&#8217;s still a question of libraries coming in the standard technology set. With the modern IDEs programming languages don&#8217;t have a significant difference in the development speed.</p>
<p>Now you have different variants of realization and all the criterias affecting the time and cost. So it is time to make estimations and compare the results. If the winner variant was found you may start searching for developers. But once again it is strongly recommended to use independant consultant on this step, unless the choise is obvious.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/07/29/choosing-software-technology/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Developer quality guide</title>
		<link>http://www.freelanceconsult.biz/2008/07/10/developer-quality-guide/</link>
		<comments>http://www.freelanceconsult.biz/2008/07/10/developer-quality-guide/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 11:53:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Guide]]></category>
		<category><![CDATA[organization]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=16</guid>
		<description><![CDATA[The software quality is a very popular theme. Every time you ask a development company about their higher price &#8211; you&#8217;ll hear about higher quality. This short guide will help non-programmers understand the meaning of development quality.

Quality of architecture
The good architecture is documented and is using standard names for architecture patterns. Making architecture documentation doesn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p>The software quality is a very popular theme. Every time you ask a development company about their higher price &#8211; you&#8217;ll hear about higher quality. This short guide will help non-programmers understand the meaning of development quality.<br />
<span id="more-16"></span><br />
<strong>Quality of architecture</strong></p>
<p>The good architecture is documented and is using standard names for architecture patterns. Making architecture documentation doesn&#8217;t create a lot of overhead work with modern development tools, but it have a lot of value. The good architecture helps in 2 things: <a href="http://en.wikipedia.org/wiki/Refactoring" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">refactoring</a> and switching to the new developer (even without the change, developer could forget some parts of the architecture and it will cost additional work).</p>
<p>The need of refactoring I hope to discuss another time, but most of the big projects change their structure several times during their lifecycle. So making the project refactoring-ready is recommended in most cases. Changing developers is unpredictable, so it&#8217;s also recommended to be ready for this.</p>
<p>There are also parts where you don&#8217;t need architecture skills from your developers. First case is really simple projects &#8211; documenting the architecture may be considered overhead if the project structure could be easily understood from the code itself.</p>
<p>Second case is not very complicated &#8220;extension&#8221; projects. If your team makes plugin to existing system, there usually are some guidelines for making these extensions. If your team follows them, the project is much easier to understand, so larger projects could be readable without architecture. Using <a href="http://en.wikipedia.org/wiki/Software_framework" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">frameworks</a> is the same case.</p>
<p>Third case is complex projects with a dedicated architecturer (team leader, senior developer, etc.). In this case other team members could have low architecture skills. This is a very common practice for large companies trying to decrease their expenses.</p>
<p>Note: The good architectured project should also be split by layers and areas of responsibility. In this case you could have GUI designer without programming skills working with themes and templates; you could increase and decrease your developer team to match the timeline, etc. Of course, this makes more sense for the large projects.</p>
<p><strong>Quality of code</strong></p>
<p>The code quality consists of three parts &#8211; readablity, comments and performance.</p>
<p>The readability doesn&#8217;t require any additional work (standards are usually applied by the development environment, and correct naming is just a matter of practice), but they help a lot in case of project transition to another developer. So no discussions here.</p>
<p>Comments are more difficult point &#8211; some theories propose writing self-explaining code, but at least comments should be enough to feed <a href="http://en.wikipedia.org/wiki/Documentation_generator" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">documentation generator</a>.</p>
<p>Code performance may seem very important, but it doesn&#8217;t. In real projects, only small amount of code have major effect on application speed. So it is often recommended to provide performance optimization at final stages of development after the performance tests (I already mentioned refactoring, it is used for this optimization as well).</p>
<p>So, the only requirement to the coding quality in most cases is to follow the standards. The high requirements are required only for architecturing and optimization, which is not very large amount of work.</p>
<p><strong>Unit tests</strong></p>
<p>Not to be confused with the testers&#8217; work, <a href="http://en.wikipedia.org/wiki/Unit_testing" onclick="javascript:pageTracker._trackPageview ('/outbound/en.wikipedia.org');">unit tests</a> are created by programmers for themselves. Unit tests are part of refactoring (mentioned two times before) and they could be run automatically. Their goal is to ensure what all parts of the application are still functionable after the changes.</p>
<p>The unit tests shouldn&#8217;t be necessarily written by the same programmer (it&#8217;s very common case &#8211; if good developer receives bad code, the developer writes missing tests at first, understanding the code in progress). And they don&#8217;t need to be written from start &#8211; they&#8217;ll be required before the first refactoring. For large projects this moment comes very soon, but small and/or strictly architectured projects may live without refactoring for a long time.</p>
<p>Note: Do not be confused, thinking that strict architecture saves time by eliminating the need of refactoring. First, the strict architecturing usually takes not less effort and, second, there will be unaccounted factors, which will usually lead to refactoring even in the strictest architecture.</p>
<p><strong>Security</strong></p>
<p>The security is mostly valuable for web and system applications. To make code secure, you don&#8217;t need high-quality programming. The situation is simple &#8211; developers need to follow standards and at the final stages of development, security testing should be performed.</p>
<p>It&#8217;s better to have a separate person for security testing &#8211; he/she should be more hacker than developer. This is one of the places there freelance shines &#8211; regular software development company couldn&#8217;t afford high quality security tester in office, but could easily hire one as freelancer.</p>
<p><strong>Conclusion</strong></p>
<p>The developer quality plays major role only if the developer doing all kind of jobs in the project. If you have 3 or more developers, it&#8217;s reasonable to have one highly-experienced team leader with architecturing skills. Other developers could be of average quality &#8211; they just need to know the standards, plus there should be dedicated people for testing, including security one.</p>
<p>The testing was almost uncovered here, I hope to make a separate post for it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/07/10/developer-quality-guide/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Large companies</title>
		<link>http://www.freelanceconsult.biz/2008/07/08/large-companies/</link>
		<comments>http://www.freelanceconsult.biz/2008/07/08/large-companies/#comments</comments>
		<pubDate>Tue, 08 Jul 2008 17:21:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Find a freelancer]]></category>
		<category><![CDATA[company]]></category>
		<category><![CDATA[offshore]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=15</guid>
		<description><![CDATA[Overview
When you start moving a software development project to offshore, the most obvious choise is a partnership with big companies. They are the first in search engine results, you could found them through advertizing and if you put your project to freelance auction, the first bids will come from big companies. But obvious variant isn&#8217;t [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Overview</strong></p>
<p>When you start moving a software development project to offshore, the most obvious choise is a partnership with big companies. They are the first in search engine results, you could found them through advertizing and if you put your project to freelance auction, the first bids will come from big companies. But obvious variant isn&#8217;t always better.<br />
<span id="more-15"></span><br />
The main problem of big companies is what they have a lot of expenses. The larger company is, the biggest share of employees becomes management staff. Large companies require very stable income, so a lot of money is spent on advertizing and other additional project sources. So without additional measures the development with a large company would cost 2-3 times more than independent development team.</p>
<p>The second problem is developer cost. If you sell developer hours, their salary couldn&#8217;t be more than 30-40% of external work. If you sell software product, you don&#8217;t have this cap and usually could raise your developers&#8217; salaries. This situation forces offshore companies to loose competition on the local job market.</p>
<p>For increasing price there is only one solution &#8211; the companies create an illusion of guarantees. They have big portfolio, US legal entities, many persons to contact, etc. And customers are usually ready to pay for guarantees.</p>
<p><strong>The cost-quality exchange</strong></p>
<p>The most obvious way for decreasing expenses is using lower-quality developers. They could be people not suitable for product-making companies. Or they could be people from country with undeveloped IT-infrastructure (and so not having product-making companies). The result is the same &#8211; lower salary, lower quality. Simple convertion.</p>
<p>Another method could look awfully for western people, but it works. The company could lay financial risks on developers. The scheme is simple. The company sends you a standard $10.000 proposal (no analytics &#8211; additional economy). The team will get no more than $5000, no matter how many they are and how many time they&#8217;ll spend, so the company will always have profit. Of course, it&#8217;s the same cost-quality exchange &#8211; programmers will not work in such conditions if they have a choice.</p>
<p>Note: I&#8217;m speaking a lot about developer quality. I think I&#8217;ll make a separate post aboit it, since the theme is not as simple as it looks. For now I&#8217;ll speak it simple: for many projects, low developer quality means unacceptable results.</p>
<p><strong>The more complex approach</strong></p>
<p>All the methods described above were marked simple, but the simple way is rarely effective. I&#8217;ve seen several companies evolved in the growing competition. Usually they ended up with a scheme with 3 levels of developers. This approach is not seen very often, but in some cases provides very good results.</p>
<p>The top level employees are senior developers. They are the treasure of the company and keepers of the knowledge. Their salary costs company more than it earns from their work directly. These people took their part in initial project analysis and about 10% of work in each project. Their job is architecturing, standards and technologies &#8211; the most difficult parts. And they gather a lot of experience, having 5-10 times more projects than regular developers. The senior developers rarely leave, but if they are &#8211; it&#8217;s a great stress for the company.</p>
<p>The average level employees are regular developers. They do most part of the job (60-70%), they have some experience and, usually, a specialization. They have a low salary, which compensates the company expenses (including high team leaders&#8217; salaries), so they leave often and easily. Others become senior developers and some are just too lazy to leave and remain regular developers for a long time.</p>
<p>The lowest level employees are junior developers. Usually a students, they aren&#8217;t ready for working without control and are not interesting for the product-making companies. They aren&#8217;t doing a lot of work, and aren&#8217;t earning significant money. But they study a lot and eventually become regular developers, sustaining the cycle of life.</p>
<p>The advantage of this scheme is very high quality of senior developers, so the project could be analyzed and architectured properly.</p>
<p>The main disadvantages are a lot of required time (due to low qualification of regular and junior developers) and significant possibility of loosing a dismissed developer during the development process.</p>
<p>The companies of this scheme are usually have higher costs than low-quality ones, but they demonstrate great skills during the initial communication.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/07/08/large-companies/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Eliminating offshore risks</title>
		<link>http://www.freelanceconsult.biz/2008/07/02/eliminating-offshore-risks/</link>
		<comments>http://www.freelanceconsult.biz/2008/07/02/eliminating-offshore-risks/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 17:53:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Organize your work]]></category>
		<category><![CDATA[offshore]]></category>
		<category><![CDATA[organization]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=13</guid>
		<description><![CDATA[You want to start an offshore development, but heard about its pitfalls? Let&#8217;s find the smooth way by displaying and eliminating the risks.

Development quality
Problem description: Developers work slow with lots of bugs and are unable to make a research work.
Solution: The problem usually occurs during working with large offshore companies. If you need a top-quality [...]]]></description>
			<content:encoded><![CDATA[<p>You want to start an offshore development, but heard about its pitfalls? Let&#8217;s find the smooth way by displaying and eliminating the risks.<br />
<span id="more-13"></span><br />
<strong>Development quality</strong></p>
<p><em>Problem description</em>: Developers work slow with lots of bugs and are unable to make a research work.<br />
<em>Solution</em>: The problem usually occurs during working with large offshore companies. If you need a top-quality staff, you need to pick them yourself. Or you may hire an independant consultant from the same country to pick them &#8211; the only requirement is direct hiring of the developers. On the other hand, if you need low-qualified workers (for manual text recognition, for example, or creating html pages for your website), offshore companies are preferrable.</p>
<p><strong>Legal issues</strong></p>
<p><em>Problem description</em>: It is much more difficult to charge offshore company for not doing their part of agreement.<br />
<em>Solution</em>: Large companies usually have US and/or Europe representation, so they could be charged and if not, they are too vulnerable in their reputation. So this applyes more to individual developers. To solve the problem (in both cases) you need to split the work into smaller cases and gain all the deliverables at the end of each phase. In this case conflicts will not cost you much and you&#8217;ll be able to continue the work with another team (see: &#8220;<a href="http://www.freelanceconsult.biz/2008/07/02/working-with-fixed-budget/">Working with fixed budget</a>&#8220;). With the individual developers you also have an advantage of changing only part of your team, which is much easier.</p>
<p><strong>Lack of control</strong></p>
<p><em>Problem description</em>: Customer can&#8217;t directly control how many hours developers spend and how much time they really work on the project.<br />
<em>Solution</em>: You need a consultant, which will check the reports. In case of large offshore company, this will be a double work (their project managers do the same), but with individual developers this will be a natural control. In addition, working on fixed price makes this problem less, especially with individual developers, since you pay for work, not hours (for large companies there is still risk of loosing time if the developer will be actually assigned part-time).</p>
<p><strong>Lack of communication</strong></p>
<p><em>Problem description</em>: Customer have a very limited communication with developers, usually through email. Sides may have a language barrier. Communication may be limited by time zone.<br />
<em>Solution</em>: You don&#8217;t need to rely on direct communication. Documentation (preferrably in form of issue-tracking software, in my opinion) works much better than voice chatting. You may also use a consultant (aside, not between you and developers, direct communication is a must) who may generate ideas and solve problems by speaking with developers.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/07/02/eliminating-offshore-risks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Removing the hidden costs</title>
		<link>http://www.freelanceconsult.biz/2008/07/02/removing-the-hidden-costs/</link>
		<comments>http://www.freelanceconsult.biz/2008/07/02/removing-the-hidden-costs/#comments</comments>
		<pubDate>Wed, 02 Jul 2008 16:55:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Organize your work]]></category>
		<category><![CDATA[offshore]]></category>
		<category><![CDATA[organization]]></category>

		<guid isPermaLink="false">http://www.freelanceconsult.biz/?p=12</guid>
		<description><![CDATA[Found an old, but interisting article, named &#8220;The_Hidden_Costs_of_Offshore_Outsourcing&#8220;. Here are my comments to the points mentioned there.

The Cost of Selecting a Vendor
The selection costs include documenting requirements, sending out RFPs and evaluating the responses, and negotiating a contract. A project leader may be working full time on this, with others chipping in, and all of [...]]]></description>
			<content:encoded><![CDATA[<p>Found an old, but interisting article, named &#8220;<a href="http://www.cio.com/article/29654/The_Hidden_Costs_of_Offshore_Outsourcing" onclick="javascript:pageTracker._trackPageview ('/outbound/www.cio.com');">The_Hidden_Costs_of_Offshore_Outsourcing</a>&#8220;. Here are my comments to the points mentioned there.<br />
<span id="more-12"></span></p>
<p><strong>The Cost of Selecting a Vendor</strong></p>
<blockquote><p>The selection costs include documenting requirements, sending out RFPs and evaluating the responses, and negotiating a contract. A project leader may be working full time on this, with others chipping in, and all of this represents an opportunity cost. And then there are the legal fees.</p></blockquote>
<blockquote><p>To top it off, the entire process can take from six months to a year, depending on the nature of the relationship.</p></blockquote>
<blockquote><p>At this stage, travel expenses enter the picture as well.</p></blockquote>
<p>Comment: This point really matters. But only in one case &#8211; you are working with a large company. If you are building a virtual office by hiring individual developers, you have good control over them.</p>
<p>The same applyes to travel expenses &#8211; you don&#8217;t need to visit individual developers to make things work. In most cases you don&#8217;t need to travel even if working with large company, but it&#8217;s a personal preference.</p>
<p><strong>The Cost of Transition</strong></p>
<blockquote><p>The transition period is perhaps the most expensive stage of an offshore endeavor. It takes from three months to a full year to completely hand the work over to an offshore partner. If company executives aren’t aware that there will be no savings—but rather significant expenses—during this period, they are in for a nasty surprise.</p></blockquote>
<p>Comment: This point probably had sence in 2003, but is completely obsolete now. You may demonstrate your application through remote desktop. You could perform videochat with screensharing and a lot of modern things, which make the personal connection completely unnecessary.</p>
<p>The thansition costs exist, but moving to offshore costs the same as moving to a new local developers team. And, of course, this applyes to a new project only.</p>
<p><strong>The Cost of Layoffs</strong></p>
<blockquote><p>Laying off American employees as a result of your offshore contract poses other sometimes unanticipated costs.</p></blockquote>
<p>Comment: It makes sence but only if you are moving your existing project to offshore. If you start a new project, this point doesn&#8217;t matter.</p>
<p><strong>The Cultural Cost</strong></p>
<blockquote><p>One reason for that is the American workers’ comfort level with speaking up and offering suggestions.</p></blockquote>
<blockquote><p>Additionally, offshore vendors often lack developer experience.</p></blockquote>
<p>Comment: This point applyes if you try to move everything to offshore mindlessly. If doing carefully, you may take even more from offshore workers. For example, you could hire a Russian animation character designer, which level is close to level of people working for leading animation studios. The offshore is the only way of hiring such professionals, if you aren&#8217;t Walt Disney. Just don&#8217;t try to use regular software coder as project lead and you&#8217;ll not have any additional costs here.</p>
<p><strong>The Cost of Ramping Up</strong></p>
<blockquote><p>Most of the Indian offshore companies are ISO certified and at Capability Maturity Model (CMM) Level 3 or 5. If your own staff can’t get used to working at that level, you’re going to have a major disconnect.</p></blockquote>
<p>Comment: This couldn&#8217;t be completely considered as an additional cost. Teaching your staff to work according to highest standards, strategically decreases your costs. And anyway, this applyes to working with large companies only.</p>
<p><strong>The Cost of Managing an Offshore Contract</strong></p>
<blockquote><p>There’s a significant amount of work in invoicing, in auditing, in ensuring cost centers are charged correctly, in making sure time is properly recorded.</p></blockquote>
<p>Comment: Yes, this is an additional cost, but again and again it applyes to working with large companies only. Their project managers control their staff and you need to control their project managers, paying for both layers. If you remove the extra tier by working directly with an offshore staff, you&#8217;ll not paying any additional money. <strong><br />
</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.freelanceconsult.biz/2008/07/02/removing-the-hidden-costs/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
