<?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>Edward Yarnold &#187; Project Management</title>
	<atom:link href="http://www.edwardyarnold.co.uk/blog/category/project-management/feed" rel="self" type="application/rss+xml" />
	<link>http://www.edwardyarnold.co.uk/blog</link>
	<description>PHP &#38; MySQL Web Developer</description>
	<lastBuildDate>Mon, 12 Dec 2011 18:12:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Discouraging the accumulation of Technical Debt</title>
		<link>http://www.edwardyarnold.co.uk/blog/discouraging-the-accumulation-of-technical-debt</link>
		<comments>http://www.edwardyarnold.co.uk/blog/discouraging-the-accumulation-of-technical-debt#comments</comments>
		<pubDate>Mon, 12 Dec 2011 18:12:23 +0000</pubDate>
		<dc:creator>Ed Yarnold</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.edwardyarnold.co.uk/blog/?p=215</guid>
		<description><![CDATA[I&#8217;m nearly four years on from starting with my current employer. This is quite an interesting phase of my employment, in that sites that I worked on when I first started are all reaching the stage where they&#8217;re being refreshed, upgraded or completely rewritten.  What this seems to be doing is highlighting to me that [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m nearly four years on from starting with my current employer. This is quite an interesting phase of my employment, in that sites that I worked on when I first started are all reaching the stage where they&#8217;re being refreshed, upgraded or completely rewritten.  What this seems to be doing is highlighting to me that there really is such a thing as <a href="http://en.wikipedia.org/wiki/Technical_debt">Technical Debt</a> and it really can be as evil as people say it can.</p>
<p><span id="more-215"></span>As developers, we are often rewarded with praise (or more) for turning new features around quickly.  If your company estimates that a particular feature will take eight hours to write, and you take only four, the company&#8217;s making a tidy profit, you can move to the next item in your schedule more quickly and everyone is happy.  This is all very well, so long as that feature has been written properly and in accordance with your company&#8217;s general approach; everything ranging from naming conventions right through to the organisation of the filesystem.  If it hasn&#8217;t been written properly, then you have incurred technical debt, and at a point in the future either you or another developer maintaining your code may need to spend more time writing a feature or changing your feature than anticipated.</p>
<p>This can cause all manner of problems.  When you come to develop on from your last feature, you might estimate that another bit of functionality will take 8 hours to write.  However, when trying to hook in to the existing feature, you discover your technical debt, and end up having to refactor the existing code to allow you to do what you wish.  This might take another 4 hours.  This might not seem to be a disaster; after all, you were 4 hours up on the first feature, and we&#8217;re just back where we should be now, right? Wrong! It is important to remember that managing our time isn&#8217;t  just about managing the absolute amount of time taken, but keeping to schedules.  The 4 hours it takes to sort out the mess in this second round of development delays the next item in your project schedule, which might result in a disappointed client.</p>
<p>In my opinion it would have been better to take the full scheduled 8 hours in the first round of development and avoid the unexpected hold-up during the second round of development.  The 4 hours in the first instance are less expensive than the 4 hours in the second, as they&#8217;ve less of an effect on surrounding projects &amp; priorities.</p>
<p>The trouble is, at the time the new feature is written, it can be difficult for someone non-technical to tell the difference between it having been done quickly and it having been done properly.  In fact, from an end-user&#8217;s point of view, the system can look absolutely identical.   So, given two developers, one who can turn the feature around in 4 hours, and another who takes twice as long at 8 hours, which will the project manager or client be more happy with? My money would nearly always be on the 4 hour guy. But long term, the 8 hour guy is actually going to be less expensive to run, or will at least facilitate more accurate estimates and quotes on the same system in the future.  The problem is, as developers, we need to resist the temptation to be the 4 hour guy. The short term praise can be addictive and it&#8217;s understandable why it seems easier and more tempting to do things as quickly as possible and worry about the consequences later.</p>
<p>What I&#8217;m noticing is, in 2008 I WAS the 4 hour guy. I was turning around features faster than other people had in the past, and grew a reputation for being quicker.  While I was quicker at the time, now, 4 years on, when I&#8217;m revisiting those sites and starting to improve or extend them, I&#8217;m paying off my technical debt with &#8216;expensive&#8217; rewriting and refactoring.  So now I&#8217;m in the position where I am expecting the implementation of a change request to take a given amount of time, but on loading up the project and seeing the way it was written in the first place, the implementation is taking much longer.  This extra development time is difficult to explain and to justify to those responsible for project scheduling, and is something that I&#8217;m going to really strive to avoid in the future, even if it does seem to take me slightly longer to develop new features than before.</p>
<p>It seems sensible to finish this post with one of the more famous quotes about computer programming. I&#8217;m sure you&#8217;ll have <a href="http://c2.com/cgi/wiki?CodeForTheMaintainer">read it before</a>&#8230;</p>
<blockquote><p>Always code as if the person who ends up maintaining your code is a violent psychopath who knows where you live</p></blockquote>
<p>Trust me, it&#8217;s bad enough even if it&#8217;s YOU that ends up maintaining your code!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edwardyarnold.co.uk/blog/discouraging-the-accumulation-of-technical-debt/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collective Ownership of Code: Anyone should be able to fix anything that is broken!</title>
		<link>http://www.edwardyarnold.co.uk/blog/collective-ownership-of-code-anyone-should-be-able-to-fix-anything-that-is-broken</link>
		<comments>http://www.edwardyarnold.co.uk/blog/collective-ownership-of-code-anyone-should-be-able-to-fix-anything-that-is-broken#comments</comments>
		<pubDate>Fri, 07 May 2010 18:23:58 +0000</pubDate>
		<dc:creator>Ed Yarnold</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.edwardyarnold.co.uk/blog/?p=115</guid>
		<description><![CDATA[In reading up on programming practices and ideals, I have stumbled across a concept called &#8220;Collective Code Ownership&#8221;.  This essentially means that *any developer* can fix bugs or write any new feature in *any project*.  Bug fixing and project development should not be limited to the person that wrote the code in the first place.   [...]]]></description>
			<content:encoded><![CDATA[<p>In reading up on programming practices and ideals, I have stumbled across a concept called &#8220;Collective Code Ownership&#8221;.  This essentially means that *any developer* can fix bugs or write any new feature in *any project*.  Bug fixing and project development should not be limited to the person that wrote the code in the first place.   This introduces both advantages and disadvantages in to project management.</p>
<p><span id="more-115"></span></p>
<h3>The Concept</h3>
<p>The concept behind this is simple.  Every developer can be responsible for the code in any project.  As mentioned above, this means that bug fixes can be made by any developer, and new features can be developed by any developer.  Here&#8217;s wikipedia&#8217;s current take on the matter:</p>
<blockquote><p>Collective code ownership means that everyone is responsible for all the  code; this, in turn, means that everybody is allowed to change any part  of the code.</p></blockquote>
<h3>The Advantages</h3>
<p>In my opinion this introduces the following advantages.</p>
<ul>
<li>If a member of your development team is immersed in an important project and needs to be allowed to &#8220;get in the zone&#8221; and work <a href="http://bigthink.com/ideas/18522">interruption free</a>, then if code they have written is deemed to be broken, any other member of the development team can fix the problem.</li>
<li>This increases exposure of application code.  The more developers that have seen code and got their head around the way it works, the better!  When the developer that wrote the code leaves, it would be helpful to have other people who have at least seen the code and knows that it exists!</li>
<li>Fresh pairs of eyes can foresee other problems with the code.  Imagine constructing a delete query using a function called constructInClause, which is passed an array.  This will return an SQL IN() clause statement.  &#8220;Hang on a minute, what if the function constructInClause returns an empty string? Won&#8217;t that delete everything from the database?&#8221; &#8211; better to spot this before rather than after the bug is exposed.</li>
</ul>
<h3>The Disadvantages</h3>
<p>With every new approach comes disadvantages alongside the advantages.  Unfortunately, I do see a couple with this one:</p>
<ul>
<li>Allowing other developers to fix bugs and modify code can mean that they will not necessarily bear in mind the full knock on effects of a change.  Dependencies on code working a certain way are commonplace &#8211; even if not ideal &#8211; in web based applications.  (Note: Unit Testing could probably avoid this situation!)</li>
<li>There is a danger of one person in the office becoming the &#8220;bug fix person&#8221;.  Not many developers enjoy fixing bugs all day, so in my view it would be important to try to make sure that responsibility for fixing bugs is shared equally between the development team.</li>
</ul>
<h3>Will I be encouraging the company I work for to encourage collective code ownership?</h3>
<p>Probably, yes!  It seems like a very sensible idea, especially considering that at times interruption to fix bugs is really quite infuriating!  If the bug fixing could be assigned to the &#8220;most interruptable&#8221; developer at any one time, I&#8217;m sure that productivity <strong>and</strong> developer mood would both be improved.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edwardyarnold.co.uk/blog/collective-ownership-of-code-anyone-should-be-able-to-fix-anything-that-is-broken/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Simple steps towards accurate project estimates</title>
		<link>http://www.edwardyarnold.co.uk/blog/accurate-project-estimates</link>
		<comments>http://www.edwardyarnold.co.uk/blog/accurate-project-estimates#comments</comments>
		<pubDate>Wed, 05 May 2010 17:12:50 +0000</pubDate>
		<dc:creator>Ed Yarnold</dc:creator>
				<category><![CDATA[Best Practice]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Tips]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://www.edwardyarnold.co.uk/blog/?p=104</guid>
		<description><![CDATA[A mistake that many developers (including myself) have made in the past is to over-promise and under-deliver in terms of the absolute deadline or the number of hours taken on a project.  Getting to the &#8220;missing the deadline&#8221; or &#8220;being over budget&#8221; stage can be especially demotivating &#8211; you&#8217;re costing yourself (or your company) time, [...]]]></description>
			<content:encoded><![CDATA[<p>A mistake that many developers (including myself) have made in the past is to over-promise and under-deliver in terms of the absolute deadline or the number of hours taken on a project.  Getting to the &#8220;missing the deadline&#8221; or &#8220;being over budget&#8221; stage can be especially demotivating &#8211; you&#8217;re costing yourself (or your company) time, which is valuable, and also the client is likely to be getting slightly irritated (if you are late).  The steps or methods to reduce the chances of this happening in the first place are simple, and easy to use.<br />
<span id="more-104"></span></p>
<h3>1. Make sure you understand the problem in full.</h3>
<p>Generally, when we are presented with a problem by either a client, or a project manager, the problem has been simplified somewhat.  A 15 minute phone conversation or meeting is condensed in to a three sentence paragraph asking you the best way around a problem.  In my eyes, there are a couple of approaches to avoid this.</p>
<ol>
<li><strong>Be involved in the meeting, or the phone conversation</strong>.  This is not always possible &#8211; not every developer wants to be interrupted every 30 minutes by client questions, and not every developer is necessarily comfortable talking to a client.  But listening in on (and not participating in) a conversation could always be an option!  This means that you get to hear everything that the client has said about the problem.  It&#8217;s to be expected that the person relaying the message will miss out minor (but not necessarily insignificant) details.  After all, repeating every phone conversation in full could get a bit tiresome, you&#8217;d imagine!</li>
<li><strong>Know to ask the right questions.</strong> A client asks to make their delivery fee increase with every product added.  Let&#8217;s say, increase the delivery fee by 30% for every additional product that needs delivering.  This is simple enough, until you consider that the delivery fee could easily escalate way out of control.  A £10 standard delivery fee could soon escalate to around £50 if someone bought a large amount of products.  This could discourage a purchase.  So should a limit be introduced for the maximum delivery fee?  Remember, the client probably hasn&#8217;t thought around this issue.  Asking the question and getting an answer before work starts could save you from having to rewrite a chunk of code.</li>
</ol>
<h3>2. If dealing with unfamiliar technology&#8230; allow some research time!</h3>
<p>If you&#8217;ve been asked to implement an unfamiliar technology, take 10 or 15 minutes to research how it all works.  15 minutes spent now could stop you from estimating that something will take 5 hours when it might take 20, or from estimating 20 hours when it might take 5!   Additionally, when estimating how long the work will take, remember that you will probably spend a fair chunk of time reading documentation and not actually writing code.  In many places this would be considered billable time &#8211; and it should certainly be taken in to account when working out how soon you could deliver the work.</p>
<h3>3.  Remember to allow time for testing and bug fixing.</h3>
<p>Not everyone does this, but in my opinion it is essential.  Allow some time for proper testing and the time it&#8217;ll take to fix bugs (this can only be estimated) as well as the time taken to write the code in the first place.</p>
<h3>4. If dealing with third party services, you can&#8217;t accurately promise a deadline.</h3>
<p>A lot of the work I do involves integration with third party services &#8211; payment gateway services, SMS services, etc.  These all involve an account application and signup process, and sometimes this process depends on the client completing a form, or submitting payment for the service.   I have found that it is almost impossible to accurately estimate a &#8220;go live&#8221; date when an aspect of your application depends on a third party service being ready for use.  If you do provide an estimated go live date, it could be worth putting in a note that it depends on the client&#8217;s service X application being complete by date Y.</p>
<h3>5. If you feel out of your depth, don&#8217;t be afraid to say!</h3>
<p>This is a very important point.  If you are not confident about working with and fully understanding the technology that you will be using, <strong>tell your manager or your client! </strong>It&#8217;s better to say at this stage than to blindly assume that you will be able to work something out during the work.  They will be a darn sight happier this way around than if you go out of your depth and then the project is late or massively over budget.  Saying now typically will have one of three results:</p>
<ol>
<li><strong>Your company will turn the work away</strong> to avoid a problem (or, your client will go elsewhere).</li>
<li><strong>Measures will be put in place to avoid the issue.</strong> Billing by the hour, or using another developer, for instance.</li>
<li><strong>The project will be quoted anyway at an estimated rate, and your company will take a risk.</strong> In this case, you at least said something at the start &#8211; the risk taken was by someone above you.</li>
</ol>
<p>These are only very basic steps that can be taken to avoid a problem.  But one thing is for certain.  It is typically better to <strong>under promise and over deliver</strong> rather than the other way around.  You just have to be careful that you don&#8217;t fall in to the habit of *massively* over-quoting projects, because this can have a detrimental effect in terms of reducing the percentage of accepted quotations.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.edwardyarnold.co.uk/blog/accurate-project-estimates/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

