<?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>PHP Web developer, Robert Kern &#187; development</title>
	<atom:link href="http://www.robertkern.com/tags/development/feed" rel="self" type="application/rss+xml" />
	<link>http://www.robertkern.com</link>
	<description>Solid PHP Web Development with SEO and web standards in mind.</description>
	<lastBuildDate>Thu, 18 Mar 2010 20:05:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
<cloud domain='www.robertkern.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Project Management and the Developer</title>
		<link>http://www.robertkern.com/web-development/project-management-and-the-developer.html</link>
		<comments>http://www.robertkern.com/web-development/project-management-and-the-developer.html#comments</comments>
		<pubDate>Thu, 28 Aug 2008 16:13:05 +0000</pubDate>
		<dc:creator>Robert Kern</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[time management]]></category>

		<guid isPermaLink="false">http://www.robertkern.com/?p=149</guid>
		<description><![CDATA[I found this excellent article on project management from the developer&#8217;s point of view: (Originally written by Brandon Ching) Today’s post is on something a bit different but still very much relevant in the web development world: project management. Now, I’m not all that old and I haven’t been a web developer for all that [...]


Related posts:<ol><li><a href='http://www.robertkern.com/web-development/an-engineers-guide-to-bandwidth.html' rel='bookmark' title='Permanent Link: An Engineer&#8217;s guide to Bandwidth'>An Engineer&#8217;s guide to Bandwidth</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I found this excellent article on <a href="http://www.htmlist.com/development/project-management-tips-from-the-developers-point-of-view/" target="_blank">project management from the developer&#8217;s point of view</a>:<br />
(Originally written by Brandon Ching)</p>
<blockquote><p>Today’s post is on something a bit different but still very much relevant in the web development world: project management. Now, I’m not all that old and I haven’t been a web developer for all that long (about 6 years in total, 3 actually getting paid <img src='http://www.robertkern.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  but I have had the opportunity of working for a medium-sized media company with a development team of about 25 developers, a small 5-6 person development company (3 developers), and as an independent contractor.</p></blockquote>
<p><span id="more-149"></span></p>
<blockquote><p>When I began my career at the medium sized company, I initially saw my project managers as a pain in the ass. All I was interested in doing was coding. I had my own ideas of how the project or feature was going to be done and I thought that I could handle deadlines and project requirements better than they could. Was it really necessary to ask me multiple times a day what I was doing and what percentage of the project was still left to be done? PM’s gave new meaning to the phrase “avoid like the plague.” In all honesty, I wondered why in the hell these people were even hired to begin with. I just could not see the role of a project manager as being all that important.</p>
<p>Of course, after a bit of development work and experience doing projects with and without them, I found myself having moments of… “OMFG…where is my project manager?” As developers, void of project managers, we often get carried away with the art that is code. We plan for one thing but, weeks post-deadline, end up creating something entirely different. Does it work? Usually. Is it beautiful? Maybe. Is it what was promised to the customer? Well, no.</p>
<p>I’m not just talking about instances where a simple login feature ballooned into a grand hierarchical authentication scheme. I’m also talking about those projects, that for some reason or another, we just despise working on and push off completion; sometimes even writing substandard code just to get it over with. And don’t forget those projects that are just so complex that we’re not even sure if we are starting at the right place, much less dedicated to a deadline of any sort.</p>
<p>It seems that the problem here is not one of competence—most of us could, if we really tried to, stick within initial specs and scope. To me the problem lies in the fact that without the role of the project manager on the team, we lack the time and task management designed to keep us on track. We are trained in how to solve problems of logic through good coding principals and design. We are artists. Our canvas is digital and we sometimes let our creativity and desire for compounding beauty interfere with the job we were hired to do. We are not trained in restraint; the project manager is, at least in theory.</p>
<p>Depending on your experience, I suppose this next statement may be gospel or blasphemy, but to me, it is gospel all the way. The successful completion of any project hinges upon a solid development methodology based in clearly defined project goals, block specifications, complete use cases, and the division and distribution of task level development. A good project manager will be able to take high level design specs and goals from a product manager or customer contact and break them out into clearly defined and manageable building blocks. Each block can then be broken down into feature/requirement sets which can finally be tasked out to the developer/s for completion. This is the job of the project manager, not the developer. Developers should only be given spec’d out tasks with detailed use cases and an explanation of <em>exactly </em>what should be done. It is then up to the developer to determine how the task will be done.</p>
<p>Now, this is not to say that developers are not to be involved in planning or design phases of projects; by nature, they have to be. However, design and planning meetings involving developers should be focused on the technical goals of the project or block, not on management and product/customer level concerns. These meetings must be narrow in focus and should have a clearly defined result. For instance, determining the database schema for the project or settling on a development framework. The layer of abstraction here is critical in keeping the project within scope and to prevent developers from expanding on or reducing the project deliverables. Once the meeting objectives have been met, project managers should then be able to chunk and task out the technical specs to the team of developers.</p>
<p>Now, up until a little while ago, I hated the word “task.” Every morning I would check my email and see, “You have been assigned a new task from…” after which my head would sink low and I would seriously contemplate my career path yet again. I would constantly wonder why everything had to be a task: a task to change a misspelled word, a task to add 5 pixels of spacing to the end of the page. Wouldn’t it just be easier to send me an email or IM or for goodness sake, just turn around and tell me? Surely this couldn’t be the Zen that is programming? However, recent experience has taught me that, by God, we all need tasks just like we all need competent project managers!</p>
<p>Task assignment, and by extension, a good task management system (note that a task/project management system is very different from a strict bug tracking system) is an absolute necessity for project management. Proper task etiquette enabled by a solid and complete project management system serves many purposes. First and foremost to developers, it serves as our grocery list. It tell us EXACTLY what we have to do, when it needs to be done by, and contains a history of the problem or feature (most PM system tasks have comments/histories and file attachment capabilities). From the management side of things, a PM system will track the number of hours developers spend on each task which can then be used for billing or other performance metrics. It also can serve as a yardstick in determining the level of project completion by showing a variety of statistics based on ticket assignment, time used, percentage of tasks complete for a given project, and developer performance.</p>
<p>Not to sound too preachy (or take too much of an aside), but I have come across a number of good techniques gathered from the various project managers and lead developers I have worked with in the past that I would like to share and recommend that people use.</p>
<h3 id="toc-quote-tasks">Quote Tasks</h3>
<p>Make use of quote tasks. It may take a little more time and to some it may seem really useless, but in the end it will serve as a good measure of your time estimation abilities and speak to the thoroughness of your work. The way it works is that for every task you are assigned, unless fixing the problem will take less than 10 min., in the comments section you should list the files and line numbers that you will need to make changes to in addition to a brief one liner explaining the expected change. You then assign the ticket back to your project manager to quickly review. If your time estimate falls within the allowable project time, then you will get the task back and no matter how many days or weeks may pass, you will know immediately what needs to be fixed and where.</p>
<h3 id="toc-notate-completed-tasks">Notate Completed Tasks</h3>
<p>When tasks are complete, you should list each file and line number range that you made modifications to and provide a one or two sentence description of changes (in addition your regular brief outlining the totality of changes). This makes tracking changes easier for those who may follow you and serves as a written history in a developers words of exactly what was done for the task.</p>
<h3 id="toc-the-six-hour-work-day">The Six-Hour Work Day</h3>
<p>One small tip on time management and allocation I learned from my last PM was to only allot 6 hours of estimated work in a day. He said that the remaining 2 hours are spent on bathroom breaks, water cooler conversations, task switching ramp up, nerf fights, etc. At first I thought this was strange. Could bathroom breaks really take up 2 hours of my working day? But as I was tasked on this schedule, it seemed to work out pretty well. While I didn’t exactly lose 2 hours doing random things, what did happen was that I was rarely under pressure to squeeze out tasks leaving me less stressed and able to produce better quality and more thoroughly tested code and documentation. Funny thing, comparing a “6 hour” work day with the regular, “get as much work done in the 8 hours you are here” approach, I felt more productive and competent under the 6 hour routine. Give it a try, you may be surprised.</p>
<h3 id="toc-developers-as-project-managers-warning">Developers as Project Managers: Warning</h3>
<p>Developers should never be placed in the role of a project manager; creating and managing their own tasks. However, sometimes there is little choice (little company resources, sole operation, etc). If this is the case, expect that as a developer you will be spending probably 1/4-1/3 of your day planning and managing tasks; <em>not</em> working on them. Be sure your boss knows this if they are not willing or able to task out projects properly to begin with. This is really for your sanity and for the thoroughness that comes with being a competent developer. Now, in the rare case where you as the developer are tasked with actually taking customer specs and being told to simply get it done, placing the entire development life cycle on you or your team’s shoulders, I strongly suggest that you ask management to hire a project manager. If that is not possible then maybe you should be dusting off that resume because project specking, chunking, and higher level project management duties like those are not your job. There is a good reason developers are not PM’s and PM’s are not developers.</p>
<h3 id="toc-the-devils-in-the-details">The Devil’s in the Details</h3>
<p>Nag, nag, nag. If you get assigned tasks that are too general in scope and you have any questions about exactly what it is that your PM or boss is asking for, send the ticket back and ask for further explanation. It usually only takes a few times doing this for your boss to get the idea of what information you need to get your work done right. Remember, training goes both ways; you learn from your boss as much as your boss learns from you. It’s better to take the time upfront and get accurate and detailed specs than for you to guess and have to go back and rewrite something down the road.</p>
<p>All that being said, there are a number of development methodologies out there to help you and your team develop software in an efficient and smart manner. Now, as I’ve made crystal clear, I’m not a PM so I don’t claim to be an expert on any development methodology, but I take particular affinity to <a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank">Agile</a> development methods like <a href="http://en.wikipedia.org/wiki/SCRUM" target="_blank">Scrum</a>. Any methodology where you as a developer are protected from business processes (changes in specs/customer expectations, etc) external to your core job function is a winner in my book. Avoid the traditional <a href="http://en.wikipedia.org/wiki/Waterfall_model" target="_blank">waterfall</a> and <a href="http://en.wikipedia.org/wiki/Cowboy_coding" target="_blank">cowboy</a> coding approaches as they are highly inflexible and in the former case, plain stupid as a development methodology for any business.</p>
<p>So there! I hope I’ve been able to give a little personal experience to you developers out there (and you managers) who may be a little too code-centric. Don’t ignore the management side of your business. It can save your sanity and make you a better developer in the process!</p></blockquote>
<p>Its important to note that this article was not written by me.</p>


<p>Related posts:<ol><li><a href='http://www.robertkern.com/web-development/an-engineers-guide-to-bandwidth.html' rel='bookmark' title='Permanent Link: An Engineer&#8217;s guide to Bandwidth'>An Engineer&#8217;s guide to Bandwidth</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertkern.com/web-development/project-management-and-the-developer.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Using Microsoft Visio 2007 for database diagrams</title>
		<link>http://www.robertkern.com/web-development/using-microsoft-visio-2007-for-database-diagrams.html</link>
		<comments>http://www.robertkern.com/web-development/using-microsoft-visio-2007-for-database-diagrams.html#comments</comments>
		<pubDate>Mon, 11 Feb 2008 19:14:08 +0000</pubDate>
		<dc:creator>Robert Kern</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[visio]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.robertkern.com/databases/using-microsoft-visio-2007-for-database-diagrams.html</guid>
		<description><![CDATA[Have you ever tried using Microsoft Visio for creating database diagrams? Im using it at the moment for a large web application project and I&#8217;ve got to say, I hope there&#8217;s a better solution out there. I understand that Visio is design for lots of different uses and not just database diagrams, but it really [...]


No related posts.]]></description>
			<content:encoded><![CDATA[<p>Have you ever tried using Microsoft Visio for creating database diagrams?  Im using it at the moment for a large web application project and I&#8217;ve got to say, I hope there&#8217;s a better solution out there.  I understand that Visio is design for lots of different uses and not just database diagrams, but it really is difficult to get a useful database diagram out of the software.<br />
<span id="more-42"></span><br />
One thing that frustrates me is that when i define relationships between particular fields in two different tables, the lines dont match with the fields&#8230; they only match with the tables.  Maybe there is something I&#8217;m missing with that, but there is no obvious way to make the lines match up to the fields.</p>
<p>Also, adding notes to a table is very difficult.  If I add a speech-bubble type object with a note and then want to move the table to somewhere else on the page, the speech bubble (even though it is supposedly connected to the table) doesn&#8217;t move with it.</p>
<p>I normally use a Mac for web development (and am even now, but am running VMware with Vista for various applications), so would prefer a Mac style diagram application.  I&#8217;ll be on the lookout.</p>


<p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://www.robertkern.com/web-development/using-microsoft-visio-2007-for-database-diagrams.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Subversion repository layouts</title>
		<link>http://www.robertkern.com/how-to/subversion-repository-layouts.html</link>
		<comments>http://www.robertkern.com/how-to/subversion-repository-layouts.html#comments</comments>
		<pubDate>Sun, 06 Jan 2008 07:32:36 +0000</pubDate>
		<dc:creator>Robert Kern</dc:creator>
				<category><![CDATA[How to]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[SVN]]></category>

		<guid isPermaLink="false">http://www.robertkern.com/svn/subversion-repository-layouts.html</guid>
		<description><![CDATA[I have been looking into the Subversion system this weekend. I had never used it myself but have recently been looking for a solution to the problem of collaberation on website projects (eg. two people making a change to a website, one overwriting the changes of the other&#8230; oh my goodness thats annoying). Since looking [...]


Related posts:<ol><li><a href='http://www.robertkern.com/subversion/mac-subversion-app-cornerstone-vs-versions.html' rel='bookmark' title='Permanent Link: Mac subversion apps &#8211; Cornerstone vs Versions'>Mac subversion apps &#8211; Cornerstone vs Versions</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>I have been looking into the Subversion system this weekend.  I had never used it myself but have recently been looking for a solution to the problem of collaberation on website projects (eg. two people making a change to a website, one overwriting the changes of the other&#8230; oh my goodness thats annoying).  Since looking into Subversion, I have installed it on my internal server (Windows SBS 2003) using <a href="http://svn1clicksetup.tigris.org" target="_blank">http://svn1clicksetup.tigris.org</a> and am using <a href="http://tortoisesvn.tigris.org" target="_blank">TortoiseSVN</a> as the client&#8230; <strong>I am impressed!</strong> I have moved some of my projects over to Subversion and plan to add all new projects from now on.  Read on for the repository layout article.</p>
<p><span id="more-18"></span>I was a little confused by the naming conventions of Subversion (trunks, branches and tags) and came across this excellent article that explains the reason behind this folder layout.  The article can be read at <a href="http://blogs.open.collab.net/svn/2007/04/subversion_repo.html" target="_blank">http://blogs.open.collab.net/svn/2007/04/subversion_repo.html</a></p>
<p class="entry-body">
<h2>Article</h2>
<p>I see a lot of questions asked about &#8220;What is the recommended repository layout?&#8221;, &#8220;What does trunk mean?&#8221;, or: &#8220;What is the significance of trunk?&#8221;. This post will try to answer those questions and more.</p>
<p>A Subversion repository implements the metaphor of a versioned filesystem. The repository is just a filesystem with folders and files. It so happens that modifications to this filesystem are versioned and there are implementation enhancements like &#8220;cheap&#8221; copies that make certain operations less expensive than they are in a traditional filesystem, but the repository itself still behaves like a filesystem: there are no special folders or names and Subversion itself has no knowledge of trunk or branches, they are just folders within the filesystem. It is up to you as the user to give those folders names and structure that are meaningful to you.</p>
<p>That said, there are several common layouts that have been adopted by the community as best practices and therefore one could think of these as recommendations. If your repository is accessible to the public, following these conventions might make it easier for users that have accessed other Subversion repositories to find what they are looking for.</p>
<p>There are two commonly used layouts:</p>
<pre>trunk
branches
tags</pre>
<p>This first layout is the best option for a repository that contains a single project or a set of projects that are tightly related to each other. This layout is useful because it is simple to branch or tag the entire project or a set of projects with a single command:</p>
<p><code>svn copy url://repos/trunk url://repos/tags/tagname -m "Create tagname"</code></p>
<p>This is probably the most commonly used repository layout and is used by many open source projects, like Subversion itself and Subclipse. This is the layout that most hosting sites like Tigris.org, SourceForge.net and Google Code follow as each project at these sites is given its own repository.</p>
<p>The next layout is the best option for a repository that contains unrelated or loosely related projects.</p>
<pre>ProjectA
   trunk
   branches
   tags
ProjectB
   trunk
   branches
   tags</pre>
<p>In this layout, each project receives a top-level folder and then the trunk/branches/tags folders are created beneath it. This is really the same layout as the first layout, it is just that instead of putting each project in its own repository, they are all in a single repository. The Apache Software Foundation uses this layout for their repository which contains all of their projects in one single repository.</p>
<p>With this layout, each project has its own branches and tags and it is easy to create them for the files in that project using one command, similar to the one previously shown:</p>
<p><code>svn copy url://repos/ProjectA/trunk url://repos/ProjectA/tags/tagname -m "Create tagname"</code></p>
<p>What you cannot easily do in this layout is create a branch or tag that contains files from both ProjectA and ProjectB.  You can still do it, but it requires multiple commands and you also have to decide if you are going to make a special folder for the branches and tags that involve multiple projects. If you are going to need to do this a lot, you might want to consider the first layout.</p>
<p>As for the names of the folders within the repository, again: they are just a convention. They have no special meaning to Subversion.</p>
<p>&#8220;trunk&#8221; is supposed to signify the main development line for the project. You could call this &#8220;main&#8221; or &#8220;mainline&#8221; or &#8220;production&#8221; or whatever you like.</p>
<p>&#8220;branches&#8221; is obviously supposed to be a place to create branches. People use branches for a lot of purposes. You might want to separate your release or maintenance branches from your feature branches or your customer modification branches etc. In this case, you could create a layer of folders beneath branches, or just create multiple branch folders at the top-level.</p>
<p>&#8220;tags&#8221; are not treated as special by Subversion either. They are a convention, perhaps enforced by hook script or authz rules, that indicate you are creating a point in time snapshot. Typically the difference between tags and branches is that the former are not modified once they are created. You might call your tag folders &#8220;releases&#8221; or &#8220;snapshots&#8221; or &#8220;baselines&#8221; or whatever term you prefer.</p>
<p>Remember, the significance of the name is for your benefit, not for Subversion. Finally, the architecture of Subversion, with its global revision number can often make the need for tags unnecessary. I do not think there is any reason to create tags just for the sake of creating them. If you find a need to recreate the software at a specific point in time, you can always do so by using svn log to determine the relevant revision number. Tags are best when there are &#8220;external&#8221; consumers of the repository. Maybe it is a QA/Release team that needs to perform builds, maybe it is an internal development team that wants to use releases of your code in another product, or maybe it is literally external users or customers who need to grab release snapshots from your repository. In these scenarios, creating tags is both a convenient way to be sure they get the right code, as well as a good communication mechanism to indicate the presence of release snapshots.</p>
<p>Hopefully this post clarifies some of these issues for you and makes it easier for you to understand how Subversion works.</p>
<p>I would like to finish by pointing out that a Subversion repository layout can be changed. You can always reorganize and restructure your layout after the fact. At worst, it just might create some short term pain as users adjust their working copies. It is not like you need to start over though. Just change names, move folders or do whatever to get the filesystem looking the way you want it.</p>


<p>Related posts:<ol><li><a href='http://www.robertkern.com/subversion/mac-subversion-app-cornerstone-vs-versions.html' rel='bookmark' title='Permanent Link: Mac subversion apps &#8211; Cornerstone vs Versions'>Mac subversion apps &#8211; Cornerstone vs Versions</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.robertkern.com/how-to/subversion-repository-layouts.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
