<?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>The Accidental Developer &#187; Process</title>
	<atom:link href="http://osric.com/chris/accidental-developer/category/process/feed/" rel="self" type="application/rss+xml" />
	<link>http://osric.com/chris/accidental-developer</link>
	<description>What if Gregor Samsa awoke a computer programmer?</description>
	<lastBuildDate>Mon, 30 Apr 2012 21:16:57 +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>Joes Goals Runs on Cold Fusion</title>
		<link>http://osric.com/chris/accidental-developer/2008/09/joes-goals-runs-on-cold-fusion/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/09/joes-goals-runs-on-cold-fusion/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 14:30:08 +0000</pubDate>
		<dc:creator>giblfiz</dc:creator>
				<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=72</guid>
		<description><![CDATA[I use a pretty nifty little website called joe&#8217;s goals to track some of the things in my life. It ties in rather nicely with the google personal homepage, and has served me well for more than two years. It&#8217;s crashing today, and from the look of it, it runs on cold fusion. I must [...]]]></description>
			<content:encoded><![CDATA[<p>I use a pretty nifty little website called <a href="http://www.joesgoals.com/">joe&#8217;s goals</a> to track some of the things in my life. It ties in rather nicely with the google personal homepage, and has served me well for more than two years. It&#8217;s crashing today, and from the look of it, it runs on cold fusion. I must admit, I&#8217;m a little surprised. (Not that I have anything against cold fusion, you just don&#8217;t see it that often these days)</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/09/joes-goals-runs-on-cold-fusion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Code Reviews</title>
		<link>http://osric.com/chris/accidental-developer/2008/09/code-reviews/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/09/code-reviews/#comments</comments>
		<pubDate>Fri, 19 Sep 2008 03:18:45 +0000</pubDate>
		<dc:creator>Chris Herdt</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[ColdFusion]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[code reviews]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=70</guid>
		<description><![CDATA[I recently attended a code review at Wharton. We&#8217;ve put together some code reviews at my job, but I know that Wharton has been doing formal code reviews for years and I wanted to check out their process to compare notes. For this particular code review they were looking at a small ColdFusion application developed [...]]]></description>
			<content:encoded><![CDATA[<p>I recently attended a code review at <a href="http://www.wharton.upenn.edu/">Wharton</a>. We&#8217;ve put together some code reviews at my job, but I know that Wharton has been doing formal code reviews for years and I wanted to check out their process to compare notes. For this particular code review they were looking at a small ColdFusion application developed using <a href="http://squidhead.riaforge.org/">Squidhead</a>.<br />
<span id="more-70"></span><br />
I was immediately surprised by how simple they kept it: no projector, no whiz-bang demo, just a handful of well-prepared developers with a stack of notes. Only the developer and a manager brought a laptop (and the second laptop may have been for my benefit, since I had not previously seen the code). The developer gave a brief summary of the application (its goals, functionality) and immediately handed things over to the reviewers.</p>
<p>The reviewers had clearly spent some time with the application, reviewing both the code and the interface. (I asked about this after the review, and one reviewer said he had spent 2-3 hours reviewing what was a relatively short and simple application. It is telling, I think, that attendance was voluntary&#8211;the reviewers in attendance were keen reviewers.) They got down to the level of detail where they brought up the date format (e.g. why did the developer use dd-mmm-yyyy instead of mm/dd/yyyy?).</p>
<p>The review was relatively structured while remaining casual in tone. They discussed CFCs, followed by other ColdFusion code, followed by user interface concerns and SQL. Each suggestion was backed up with a reason, e.g. avoid using evaluate() because it can lead to performance issues, or use mm/dd/yyyy because ~60% of the intended audience is most familiar with that format. In general, the topics covered fell into these categories: security, speed, standards/best practices, readability/maintainability, and user interface concerns.</p>
<p>It really seemed like a useful process to me. True, it added 12-18 developer hours to the project, but that is a small price to pay to avoid a possible security breach or server crash (not that any such vulnerabilities or flaws were found). The key, it seemed to me, was in the preparedness of the reviewers, who each came with comments in hand. Their preparedness, in turn, was helped by having basic guidelines as to what issues to look for.</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/09/code-reviews/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Keeping your inbox empty in gMail</title>
		<link>http://osric.com/chris/accidental-developer/2008/09/keeping-your-inbox-empty-in-gmail/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/09/keeping-your-inbox-empty-in-gmail/#comments</comments>
		<pubDate>Fri, 12 Sep 2008 16:28:17 +0000</pubDate>
		<dc:creator>giblfiz</dc:creator>
				<category><![CDATA[Google]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=67</guid>
		<description><![CDATA[So a friend of mine recently convinced me to try using gmail in a different way. His suggestion was that I try archiving all of the mail that I have that no longer requires direct attention, or has some action I must take hanging on it. I have to admit its a pretty appealing idea, [...]]]></description>
			<content:encoded><![CDATA[<p><img style="max-width: 800px;" src="http://osric.com/chris/accidental-developer/wp-content/uploads/2008/09/gmail.png" align="left" /> So a friend of mine recently convinced me to try using gmail in a different way. His suggestion was that I try archiving all of the mail that I have that no longer requires direct attention, or has some action I must take hanging on it. I have to admit its a pretty appealing idea, since the mail will still show up in searches and whatnot. Shortly following this suggestion I got put on a very high volume mailing list that I also wanted to read many of the emails on. So I decided to give it a try.</p>
<p>I started by setting a group &#8220;instant unarchive&#8221; on the first two-hundred emails that I have. Then I did the select all action, and clicked the link that appears at the top of your email list when you select all to &#8220;select all 70 billion emails&#8221; and archived the bunch. I then clicked on the left the &#8220;instant unarchive&#8221; group, and moved them to my inbox. Ta-Da now I&#8217;m down to my latest 200 emails in my inbox. As some of these are still relevent &amp; outstanding I&#8217;m going to have to archive them by hand.</p>
<p>The concept of having an empty inbox is pretty darned appealing to me. I&#8217;ll give you updates as I go. (oh by the way, the command key to archive an email is &#8220;e&#8221;)</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/09/keeping-your-inbox-empty-in-gmail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Writing A Spec Way Too Late</title>
		<link>http://osric.com/chris/accidental-developer/2008/07/writing-a-spec-way-too-late/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/07/writing-a-spec-way-too-late/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 19:54:01 +0000</pubDate>
		<dc:creator>giblfiz</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=55</guid>
		<description><![CDATA[So what was a wonderful project to start with became a nightmare, but I finally see the light at the end of the tunnel with it. Because this project started off so innocently, and became such a disaster, I feel like I should share some of the mistakes I made along the way, and some [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://osric.com/chris/accidental-developer/wp-content/uploads/2008/07/cimh-angry-boss.gif" style="max-width: 800px" align="right" height="186" width="186" />So what was a wonderful project to start with became a nightmare, but I finally see the light at the end of the tunnel with it. Because this project started off so innocently, and became such a disaster, I feel like I should share some of the mistakes I made along the way, and some of the insights that I have gained in both 1) extracting myself from the problem and 2) not allowing myself to get sucked into issues like this again. So lets start with a little bit of history of the project and the situation and go from there.</p>
<p>The development company, which I will refer to as &#8220;E&#8221; in this post is one that I have worked with for a while. They are good, skillful and friendly, they also do have a history of not generating sufficient (or any) spec&#8217;s for projects before they sign deals. This is a known problem, and something that both developers and designers have been complaining about for a while.</p>
<p><span id="more-55"></span></p>
<hr class="jump" />They brought me a project, which another development group within their company had been working on, and which had gone woefully over time and was now about to go over budget. This project was needed completed in a rush and the original developers had walked away in frustration. I agreed to see what I could do about getting things up and running that weekend, and though the code base was a horror beyond compare, I did, though I will be the first to admit/point out that most of the sight still did not work at all. (at least the core functionality now ran)At this point the client, hereafter called Mr. X, asked &#8220;what will it take to make this right?&#8221; So I talked with the original development team, who provided a unified and consistent answer of &#8220;redo from scratch&#8221;, and I looked at the database carefully, which was a complete disaster, and I looked at the page-flow / usability which was also a complete disaster, and I thought about it. Now I have a long developed standing principal that <a href="http://www.joelonsoftware.com/articles/fog0000000069.html">a complete rewrite is almost never the answer</a>. On the other hand the original development team was saying the same thing, and the code was _really_ bad and crufty, so I thought &#8220;hey, this is probably the case that makes it almost&#8221;. So I returned my answer: I think you need a rewrite, and it will provide you with a working site, it will take 80 &#8211; 120 hours.</p>
<p>This was the single largest block of mistakes, and I&#8217;m going to try to enumerate some of them.<br />
1) Never rewrite from scratch. This was not the exception. I&#8217;m beginning to wonder if there ever actually is one<br />
2) If the original dev team has thrown up their hands and stormed off, its probably for a serious reason, usually either management or the client. I know management here and they are kind, so I should have suspected Mr. X<br />
3) &#8220;Provide you with a working site&#8221; is not a spec. This one is really really bad<br />
4) &#8220;use the old site as a spec&#8221; is actually a very solid spec, but also one you don&#8217;t want to get involved with, particularly if the old site did not work.<br />
5) Don&#8217;t let consensus view make you feel ok about your choices. Just because all the other dev&#8217;s say it needs a rewrite doesn&#8217;t mean it needs a rewrite<br />
6) Lawyers, by and large, are very very detail oriented clients, Any client that you anticipate being detail oriented, such as Mr. X who is a lawyer, should get an *estimate* not a price, and should understand that they are paying time and materials, to go thru as many iterations as they like before launch.</p>
<p>I spent the next two weeks grinding out a complete rewrite of the site. It worked quite well. (in all the time I have spent reviewing it, I have only found 3 significant bugs, as well as a slew of very minor ones &amp; generally weak security, which is pretty damn good for a project on this timeline) I used cake to write it. I fixed the page-flow and usability issues, I did triage some of the extraneous features to get it done in budget and on the new schedule. And I pulled it in at a cool 99 hours. (this was also my first cakePhp project, and I now have an overall positive reaction to cake)</p>
<p>So we take it to get skinned, and the designer puts some templates &amp; CSS on the thing, and shows it to the client. She doesn&#8217;t like the design now, she wants it to look _exactly_ like the old site. This should have been a huge red-flag, and honestly was, but we didn&#8217;t react to it properly. It was noted and nothing was done about it. So the designer pulls out a bunch of HTML from the old site and slaps it into the template files, and I take several hours and reconnect everything. Now there are some bugs, because of all the retro-fitting.</p>
<p>Next the client wants all of the items that got triaged back. They come up one at a time, mixed in with other requests. This, though it sucks hard, is reasonable. I thought Mr. X was on a tight time-table, but apparently he isn&#8217;t and is more than happy let the project be late in order to get all his features. If he had said that in the first place I would have gone ahead and put them in originally. I grumble and do it.</p>
<p>Next comes a slew of 1) minor textual tweaks, 2) minor graphical tweaks, 3) Major user interface tweaks, and 3) minor functionality tweaks. I can&#8217;t really comment on the textual tweaks or the graphical ones, but the UI changes are steadily bringing the UI back to match the first, highly dysfunctional one. It turns out that this was not broken as I had originally thought, but was actually the way that the client wanted things. Well, that was a communication&#8217;s disaster. At this point we are creeping up on a month past the date I gave for completion (so much for the rush) and the code is starting to look pretty manhandled.  Frustration so running very, very, high in the team. The designer gets a &#8220;last list of changes&#8221; from Mr. X, who points out that we are on the home stretch. The last list of changes goes into a spreadsheet and we spend another week cranking them out.</p>
<p>At this point I&#8217;m not billing anymore, I&#8217;m way over estimate, and have resigned myself to just getting things done. I&#8217;m frustrated that we don&#8217;t have anything in writing that says that when we finish this &#8220;last list of changes&#8221; we are done, and so is our designer. Sadly that is something that the client just wasn&#8217;t willing to agree to (apparently)</p>
<p>The last list of changes gets down to two items which need some clarification, mostly because they are UI / biz logic and they make no sense at all. The designer goes back to clarify, and Mr. X keeps repeating at him &#8220;I need everything just like the old site&#8221;, as well as generating more and more additional requests. At this point, the designer breaks (on the inside). He get&#8217;s himself out of the phone conversation with Mr. X politely, and calls us back to say that he can no longer work with Mr. X and that if he ever has to talk to him again he&#8217;s going to flip out and do something violent. To say our designer was agitated is something of an understatement. I have also been working with this designer for over a year, and he has consistently been both levelheaded and laid back in every situation that I have been with him in.</p>
<p>This is the best thing that could have happened. Until this point no one was willing to play hardball, seeing our designer so angry drove home just how out of control this project had become. Like a slowly boiled frog, we were perishing but hadn&#8217;t noticed.</p>
<p>So I call the owner, we talk about what&#8217;s going on, he understands the situation, and then I call the client.  Mr. X starts by apologizing for upsetting our designer, and reiterates that we are in the home stretch. I explain that there was some sort of communication failure with the designer, and ask him if he can walk me through what he talked about. On every page that we touched on Mr. X discovered a few changes that he felt needed to be made. It became readily apparent that he was discovering this as it went. This is the part where I&#8217;m proud of myself.</p>
<p>I stopped the conversation and explained that we needed a definitive list from him of what had to be changed in order for the project to be complete. He said, &#8220;no, I can&#8217;t do that, there are parts that I haven&#8217;t seen yet, and things I need you to change dramatically, I need to see those big changes after they are done to make sure that they match up with expectations&#8221;. This is where I finally stood up for the team and said &#8220;No, we can&#8217;t do any more development until we have an exact point by point list of what needs to be done for this project to be finished&#8221;. Mr. X expressed his dismay at being asked for something written in blood, and pointed out that he might find small formatting / textual changes after the fact, and that those would need to be addressed. I responded that we did need something &#8220;written in blood&#8221; and that the problem was that those small formating changes, while individually not a problem, in aggregate could and had been devastating. After some time discussing how the project got out of control, and what development typically looks like, I finally got Mr. X to agree. He is now working on a spec, written in blood, and though I anticipate it being long and hard, it does mean that the light at the end of the tunnel will be in sight.</p>
<p>The deeper moral of the story is: never work on anything until you have defined what &#8220;done&#8221; looks like. If you don&#8217;t know what success is, you can&#8217;t know when you will get there.</p>
<p>A corollary to this is: Every major player in a project needs to agree about what &#8220;done&#8221; looks like</p>
<p>and a second corollary is: It is never to late in a project to stop, and define what &#8220;done&#8221; will look like.</p>
<p>I hope you all learn from my cautionary tale.</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/07/writing-a-spec-way-too-late/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Time Tracking Software</title>
		<link>http://osric.com/chris/accidental-developer/2008/07/time-tracking-software/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/07/time-tracking-software/#comments</comments>
		<pubDate>Fri, 25 Jul 2008 16:47:36 +0000</pubDate>
		<dc:creator>Chris Herdt</dc:creator>
				<category><![CDATA[Process]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[time tracking]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=52</guid>
		<description><![CDATA[The development team where I work is going to start tracking the time spent working on each project. Although in some ways this feels like a bureaucratic hassle, it will be useful as far as justifying our existence and provide some ammo for why we shouldn&#8217;t tackle every suggestion that crosses our desks (e.g. the [...]]]></description>
			<content:encoded><![CDATA[<p>The development team where I work is going to start tracking the time spent working on each project. Although in some ways this feels like a bureaucratic hassle, it will be useful as far as justifying our existence and provide some ammo for why we shouldn&#8217;t tackle every suggestion that crosses our desks (e.g. the &#8220;trivial tweak&#8221; that actually take 12 hours to implement).<br />
<img src='http://osric.com/chris/accidental-developer/wp-content/uploads/2008/07/chessclock_200x125.jpg' alt='Clock' /><br />
<span id="more-52"></span><br />
I did find a couple of items when I created Project Management tab in <a href="http://www.google.com/ig">iGoogle</a> and selected &#8220;I&#8217;m feeling lucky. Automatically add stuff based on the tab name.&#8221;</p>
<ul>
<li><a href="http://www.googlemodules.com/module/3442/">TimeGadget Project Tracker</a></li>
<li><a href="http://www.screeperzone.com/2007/08/09/activity-tracker-version-01-released/">Activity Tracker</a></li>
</ul>
<p>The former offers an Excel report, the latter a graph.</p>
<p>Since a number of developers will be using it, it would be nice if we had something we could all use and then run reports from one place. Any ideas?</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/07/time-tracking-software/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>The Greater-Than Gator</title>
		<link>http://osric.com/chris/accidental-developer/2008/05/the-greater-than-gator/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/05/the-greater-than-gator/#comments</comments>
		<pubDate>Thu, 29 May 2008 19:12:22 +0000</pubDate>
		<dc:creator>Chris Herdt</dc:creator>
				<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=41</guid>
		<description><![CDATA[I lost a lot of time yesterday thanks to tracking down an alligator in an import utility. There was one itsy-bitsy little function that wreaked big havoc, thanks to a confused gator that didn&#8217;t know which way to look. That&#8217;s right, there was a < when there should have been a >. (Or since it [...]]]></description>
			<content:encoded><![CDATA[<p>I lost a lot of time yesterday thanks to tracking down an alligator in an import utility. There was one itsy-bitsy little function that wreaked big havoc, thanks to a confused gator that didn&#8217;t know which way to look.<br />
<img src='http://osric.com/chris/accidental-developer/wp-content/uploads/2008/05/alligator-greater-than.png' alt='Greater Than Alligator' /><br />
That&#8217;s right, there was a < when there should have been a >. (Or since it was ColdFusion code, there was a LT where there should have been a GT.)</p>
<p>The import utility was developed by a guy with a masters degree in computer science, so it just goes to show you that no amount of expertise can prevent such an error (or, quite possibly in this case, a typo).</p>
<p>It was an easy fix, of course, but fixing all the data that had been incorrectly imported in the past took a bit longer. It cost me a few hours, but that&#8217;s better than <a href="http://www.ft.com/cms/s/0/0c82561a-2697-11dd-9c95-000077b07658.html">causing a credit crisis</a>. Either way, it reinforced in my mind the idea that we could use some unit testing around here. Sure, it might take a little extra time to write the tests, but probably less than the amount of time I spent hunting down the pesky little gator and fixing the mess it left in its wake.</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/05/the-greater-than-gator/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Building your own libraries</title>
		<link>http://osric.com/chris/accidental-developer/2008/04/building-your-own-libraries/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/04/building-your-own-libraries/#comments</comments>
		<pubDate>Wed, 16 Apr 2008 17:40:51 +0000</pubDate>
		<dc:creator>giblfiz</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=33</guid>
		<description><![CDATA[About 4 months ago I finally got the hang of building my own libraries, and having them consistently come out as useful bits of software that I found myself reusing over and over. More than anything else I stumbled across the secret to this simply as the result of some random flailing, but it&#8217;s a [...]]]></description>
			<content:encoded><![CDATA[<p>About 4 months ago I finally got the hang of building my own libraries, and having them consistently come out as useful bits of software that I found myself reusing over and over. More than anything else I stumbled across the secret to this simply as the result of some random flailing, but it&#8217;s a very good principle, and I would like to share it because I think that it&#8217;s easily adaptable.</p>
<p>The secret is: <b>Write sample code first</p>
<p></b>This is not the same thing as writing test cases first, its about figuring out how you want to USE your lib, before you sit down and write the lib. you should write sample code that makes use of your library, and if it&#8217;s ugly, then you should re-write it. Try not to worry about how you are going to actually make the library do what it will have to at all, just think about writing code exactly the way you want to, in your dream scenario, when you apply the library. Go through it, are there Param&#8217;s that can be left out most of the time because 90% of the cases they will always be the same? (set rational defaults)</p>
<p>Now write some more sample code, this time come up with the most absurd, obtuse, edge case applications of your library. Things that it was just not meant to do properly. Write some sample code that is able to do them. Unlike the previous sample code, this does not need to be pretty, you just need to make sure that its possible. I strongly suggest making use of optional <a href="http://en.wikipedia.org/wiki/Closure_%28computer_science%29">closures</a> in order to keep yourself out of boxes. </p>
<p>Now go back over your ideal sample code, polish it even more. You have probably come up with some things that could be made simpler, easier and more obvious after writing the really evil edge cases.</p>
<p>And then finally, start writing the actual library. Figure out how to make it leap through whatever hoops you need to in order to make it fit the sample code that you have written. Try hard not to compromise your original sample code vision. If you must, make sure that you do it in a way that leaves the sample code still graceful. (sometimes it makes sense to change several things if you have to change just one)</p>
<p>I have found that this leaves me with two advantages for actually re-using my libraries later:<br />1) When I want to use them, they tend to work just how I want them to. This is a result of writing them to an ideal use case<br />2) I have two big lumps of sample code so I can remember how the hell I was supposed to use them without re-reading the whole body of code. Often I actually paste the simple sample into what I&#8217;m doing and then just transform it into what I need. </p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/04/building-your-own-libraries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Code refactoring VS feature addition.</title>
		<link>http://osric.com/chris/accidental-developer/2008/03/code-refactoring-vs-feature-addition/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/03/code-refactoring-vs-feature-addition/#comments</comments>
		<pubDate>Fri, 21 Mar 2008 01:20:18 +0000</pubDate>
		<dc:creator>giblfiz</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Process]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=11</guid>
		<description><![CDATA[I&#8217;m currently working on a pretty major overhaul to a custom Content Management System that I wrote for some clients, and I have found that I am both reworking the interface, and doing code refactoring at the same time. I notice that I often end up performing these two tasks simultaneously, partially because its hard [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently working on a pretty major overhaul to a custom Content Management System that I wrote for some clients, and I have found that I am both reworking the interface, and doing code refactoring at the same time. I notice that I often end up performing these two tasks simultaneously, partially because its hard to sell clients on pure code refactoring but it does have to happen, and partly because feature creep is an ever-present evil. </p>
<p>The question is, would I do much better to try to wear these hats one at time? would code refactoring first, without changing any features, followed by a round of feature changes result in a more manageable process? Or am I just deluding myself, thinking that something else looks better because I&#8217;m not elbows deep in it at the moment?</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/03/code-refactoring-vs-feature-addition/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Totally Hosed My Dev Environment</title>
		<link>http://osric.com/chris/accidental-developer/2008/03/totally-hosed-my-dev-environment/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/03/totally-hosed-my-dev-environment/#comments</comments>
		<pubDate>Wed, 19 Mar 2008 16:57:00 +0000</pubDate>
		<dc:creator>giblfiz</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[Workstation]]></category>
		<category><![CDATA[macbook]]></category>
		<category><![CDATA[mamp]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=9</guid>
		<description><![CDATA[So I have been trying to play with the Zend Framework, which by all accounts is pretty cool, and trying to get it set up on the dev environment that I have here on my cute little macbook. Sadly, for some reason the version of os X 10.5 that ships with it doesn&#8217;t have pdo_mysql [...]]]></description>
			<content:encoded><![CDATA[<p>So I have been trying to play with the <a href="http://framework.zend.com/">Zend Framework</a>, which by all accounts is pretty cool, and trying to get it set up on the dev environment that I have here on my cute little macbook. Sadly, for some reason the version of os X 10.5 that ships with it doesn&#8217;t have pdo_mysql support installed (though it has pdo_mysqllite ?? I mean, come on, seriously?) So it&#8217;s off to the recompile mines. Sadly, once you recompile PHP you need to recompile Apache, which wouldn&#8217;t be a big deal at all other than my not knowing about it and it not giving me anything like a coherent error message regarding this. Fine, whatever&#8230;.</p>
<p>Next, I discover that I can&#8217;t user the <a href="http://pear.php.net/">PEAR</a> auto-installer, because it can&#8217;t find the damn modules directory, and neither can I. I have even tried making new ones in every likely place. What&#8217;s worse, I seem to have also lost traditional MySQL support as well.</p>
<p>I&#8217;m getting pretty annoyed with OSX here, It&#8217;s a damn nice client OS, but it&#8217;s driving me nuts on the server side. (Still better than Windows, it&#8217;s just a bit like the <em>The Twilight Zone</em>, things are close enough to where they should be to make you think that you know what&#8217;s going on, but when you try to actually do something&#8230;.)</p>
<p>I guess I&#8217;ll try <a href="http://www.mamp.info/en/index.php">MAMP</a> now. I have been meaning to look at that anyway.</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/03/totally-hosed-my-dev-environment/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Version Control</title>
		<link>http://osric.com/chris/accidental-developer/2008/03/version-control/</link>
		<comments>http://osric.com/chris/accidental-developer/2008/03/version-control/#comments</comments>
		<pubDate>Sat, 01 Mar 2008 13:39:59 +0000</pubDate>
		<dc:creator>Chris Herdt</dc:creator>
				<category><![CDATA[Best Practices]]></category>
		<category><![CDATA[Process]]></category>
		<category><![CDATA[cvs]]></category>
		<category><![CDATA[dreamweaver]]></category>
		<category><![CDATA[version control]]></category>

		<guid isPermaLink="false">http://osric.com/chris/accidental-developer/?p=3</guid>
		<description><![CDATA[As an alternative to a formal version control system, our development and even our production environments are littered with files like index12112006.html or index12202006.html. This is terrible. Although we have had a CVS server set up since at least 2005 (it was there when I started), it is used inconsistently at best.And using a version [...]]]></description>
			<content:encoded><![CDATA[<p>As an alternative to a formal version control system, our development and even our production environments are littered with files like <a href="http://www.google.com/search?q=index12112006.html" title="Google finds a backup page in a production environment">index12112006.html</a> or <a href="http://www.google.com/search?q=index12202006.html" title="Google finds a backup page in a production environment">index12202006.html</a>. This is terrible.</p>
<p>Although we have had a CVS server set up since at least 2005 (it was there when I started), it is used inconsistently at best.<span id="more-3"></span>And using a version control system inconsistently is worse, in some ways, than no version control system at all: you can&#8217;t rely on the repository to have the most recent information, so you have to compare the repository to other likely sources of updated information (the development and production environments).</p>
<p>What are the barriers to adoption for version control? In part, it is unfamiliarity. In part, it is just one more step between the developer and a quick, harmless edit to a file. I&#8217;d group both of those as <em>ease-of-use</em> issues. The other barrier is a lack of understanding about the benefits version control provides.</p>
<p>The ease-of-use issue is exacerbated by a lack of good interface tools. We are using <a href="http://www.tortoisecvs.org/" title="Tortoise CVS">TortoiseCVS</a>, and another developer and I are using the CVS features built in to <a href="http://www.eclipse.org/" title="Eclipse IDE">Eclipse</a>. I think that using Eclipse works well, and I&#8217;ve even created a couple simple <a href="http://ant.apache.org/" title="ANT - Another Neat Tool">ANT</a> scripts to roll files out to the development environment once I&#8217;ve tested them in my sandbox.</p>
<p>The majority of other developers are using Dreamweaver, and tend to work directly in the development environment (rather than a sandbox). It may not seem like a big deal to switch applications for the benefits of CVS, but numerous times a day it could get tedious:</p>
<ol>
<li>Checkout module to sandbox in Windows Explorer using TortoiseCVS.</li>
<li>Switch to Dreamweaver.</li>
<li>Switch to Windows Explorer to Update/Commit.</li>
<li>Copy files from sandbox to development environment.</li>
</ol>
<p>I have been evaluating <a href="http://www.grafxsoftware.com/product.php?id=22" title="A version control extension for Adobe Dreamweaver">CVS for Dreamweaver</a>. Its UI could stand a bit of spit-and-polish, but I think it might work for us. (I am open to suggestions.)</p>
<p>How do I convince the other developers of the benefits of using version control? That might be even trickier. The other developers seem not to experience my frustration because the files they are working with on dev are usually the most current versions. And although the low-tech versioning schema of storing dozens of backup files is messy and risky, it hasn&#8217;t actually presented any problems. A single developer tends to work on a single application, so no one, to my knowledge, has ever overwritten someone else&#8217;s updates. In this environment, do we really need CVS?</p>
<p>I think that we do. Although we haven&#8217;t had any problems with overwriting another developer&#8217;s code, or found out-dated pages with security issues floating around on the production server, why take those risks? Version control can solve those problems for us, as well as providing other benefits (such as accessing any previous version of the code).</p>
<p>I know developers who use version control at home for their personal ego web sites. Overzealous? Not really. I think any shop worth its salt uses a formal version control system.</p>
]]></content:encoded>
			<wfw:commentRss>http://osric.com/chris/accidental-developer/2008/03/version-control/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

