<?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>Snipe.Net &#187; Web Development</title>
	<atom:link href="http://www.snipe.net/tags/web-development/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.snipe.net</link>
	<description>Bitterness never tasted so sweet</description>
	<lastBuildDate>Thu, 29 Jul 2010 05:03:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Sexy, Cheap and Easy: Not Your Mom, Your Wireframes</title>
		<link>http://www.snipe.net/2010/02/wireframes/</link>
		<comments>http://www.snipe.net/2010/02/wireframes/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 20:51:22 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[Adobe AIR]]></category>
		<category><![CDATA[application development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[iplotz]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[prototyping]]></category>
		<category><![CDATA[wireframes]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=2867</guid>
		<description><![CDATA[I&#8217;m a planning whore. It&#8217;s true. I&#8217;m one of those weirdos that really enjoys creating data flows, use cases, wireframes, and functional requirements documents. My bizarre predalictions aside, wireframes are a critical part of planning any website or web based application. Spending the time to plan your project out well at the very beginning may [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.snipe.net%2F2010%2F02%2Fwireframes%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.snipe.net%2F2010%2F02%2Fwireframes%2F&amp;source=snipeyhead&amp;style=normal&amp;service=bit.ly&amp;service_api=R_92bd97f4f8b9fa8a40675b36ea291223" height="61" width="50" /><br />
			</a>
		</div>
<p>I&#8217;m a planning whore. It&#8217;s true. I&#8217;m one of those weirdos that really enjoys creating data flows, use cases, wireframes, and functional requirements documents. My bizarre predalictions aside, wireframes are a critical part of planning any website or web based application.<br />
<span id="more-2867"></span></p>
<p>Spending the time to plan your project out well at the very beginning may seem like a luxury your timeline and budget can&#8217;t allow, but most people realize pretty quickly that failing to do so often ends up costing exponentially more time and money towards the end of the project, when you have exactly <em>none</em> of either to spare.</p>
<p>Scope starts to creep, or features and interface challenges that hadn&#8217;t been thought through before are suddenly at the center of a series of critical and rushed decisions that have to be made. This means that you (and/or your crew) are stressed, and because you&#8217;ve run out of time and money, you end up having to cobble something together that works as a compromise, but doesn&#8217;t stand up to the caliber of work you pride yourself on creating.</p>
<p>For those of you who have been reading this blog for many years, you&#8217;ll recognize the tune I&#8217;m singing. I constantly harp about planning and documenting. My love affair with planning and documentation isn&#8217;t just because of that head injury I suffered as a kid &#8211; its because I&#8217;ve been fucked over so many times and on such a grand scale in the past when I (or my client/manager) have decided to cut corners and just &#8220;crank it out&#8221;. While the &#8220;crank it out&#8221; method may work sometimes, the times that it fails, it fails hard, at the expense of time, money, quality and developer sanity.</p>
<p>Okay, I&#8217;ll get off my soapbox. For now. &lt;/rant&gt;</p>
<p>So, wireframes. I&#8217;ve done them in just about every application you can imagine. Visio, Smartdraw, Omnigraffle, even hand-drawn &#8211; you name it, I&#8217;ve probably tried it. I&#8217;ve been on the eternal quest for the perfect wireframing solution,  but I&#8217;ve always been left wanting.</p>
<h3>But What ARE Wireframes?</h3>
<p><strong>Wireframes are a graphical representation of a website or application that help illustrate the user interface without the clutter of stylized design elements. </strong>If you skip the wireframe process and go right to Photoshop comps, the client can often get so hung up on the fact that they want that button to be blue with rounded corners instead of green with a square corners that critical elements in the UI can be forgotten altogether. Wireframes let you plan through the user interface elements that are required for each screen in a barebones, no-frills manner.</p>
<p><img class="aligncenter size-full wp-image-2872" title="sketchy" src="http://www.snipe.net/wp-content/uploads/2010/02/sketchy.gif" alt="" width="525" height="413" /></p>
<p><strong>I&#8217;m a big fan of sketchy wireframes, especially in the beginning of a project.</strong> I find that if you go to a client with something too polished, they perceive it as a structure that has been decided upon, even when that&#8217;s the furthest thing from the truth. The sketchy styled wireframes have a hand-drawn, loose feel to them that seems to better communicate that it&#8217;s a <em>discussion</em>, not a <em>decision</em>. By avoiding a polished, rigid wireframe, I have found that clients are more able to understand that what they&#8217;re looking at isn&#8217;t meant to represent the finished design.</p>
<p>I used to hand-draw my wireframes &#8211; but the obvious challenges there is that if a change is made to an element that appears on many pages of the site, you now have to re-do all of those drawings. Another disadvantage to pen and paper wireframes is that you have to write a crapload of code if you want to extend the drawing into an interactive format where the client can actually click on elements and see how they behave.</p>
<h3>Evolution: Easy Prototyping</h3>
<p><strong>More recently, I had found a few apps that were a lot closer to what I was looking for. <a href="http://www.balsamiq.com/products/mockups" target="_blank">Balsamiq Mockups</a></strong> is a great application that has a gorgeous sketchy style and a <a href="http://mockupstogo.net/" target="_blank">great library of user-contributed downloadable interface elements</a>, so just about every imaginable interface element is available for free download once you&#8217;ve purchased the product. More interestingly, <strong><a href="http://www.napkee.com/" target="_blank">Napkee</a></strong> is a commercial addon for Balsamiq that allows you to export your wireframes into HTML (with jQuery) or a Flex file, turning static wireframes into a prototyping tool with very little additional work. Neat!</p>
<p><strong>Unfortunately, Napkee ended up being a little buggy sometimes, and perhaps more importantly, Balsamiq doesn&#8217;t natively support Master templates yet.</strong> So once again, when a change was made to the main site navigation, I&#8217;d have to go in and edit 30 files instead of being able to update a Master template and have those changes reflected across the boards.</p>
<p><strong>Another drawback is that Balsamiq does not support the ability to switch back and forth from sketchy style to straight lines. </strong>In my workflow process, what I wanted was to be able to do the rough sketchy style wireframes in the beginning, update them as needed, and then be able to click a button and convert them into a more polished, final-looking set of wireframes that I could hand over to the graphic designers with a client sign-off.</p>
<p>A later contender, <strong><a href="http://www.flairbuilder.com/home/viewer/" target="_blank">Flairbuilder</a></strong>, looked like it might be the answer. It does support the ability to toggle back and forth between sketchy and regular line styles, however the sketchy-style lines somehow didn&#8217;t look as nice as Balsamiq&#8217;s, and (<em>this is the big one</em>) in order to show the client a working prototype that was created with the desktop version, you had to export the file and then <em>ask them to download a proprietary viewer</em>. Fuck that noise. Half my clients are still on IE6 for chrissakes. I&#8217;m not asking them to download anything. So back to Balsamiq I went. Until now.</p>
<h3>The Next Generation</h3>
<p>Enter <strong><a href="http://iplotz.com/" target="_blank">iPlotz</a></strong>. I like it already because the name makes me think of a pixelated rabbi pitching a fit. What are their next product lines going to be, the <em>iKibitz</em> and the <em>iSchmaltz</em>? HAH! I&#8217;m hilarious. But probably more importantly, it fills in the gaps that Balsamiq+Napkee and Flairbuilder couldn&#8217;t &#8211; and even adds some great project organization, management and collaboration tools in to boot.</p>
<p>The interface is pretty intuitive, and they have a nice library of elements from which to choose &#8211; plus, like Balsamiq, they have a <a href="http://iplotz.com/projects.php" target="_blank">public repository of snippets and projects</a> available for download to fill in the gaps. Like Balsamiq, iPlotz has both a web-based version and a desktop version. The desktop version is a must-have for me, since I spend a hideous amount of time (4.5 hours a day) commuting through mountains where I have no connectivity.</p>
<h3>What&#8217;s Awesome</h3>
<ul>
<li>Works on PC, Mac and Linux. (I normally despise AIR applications &#8211; but it works here. Nicely executed.)</li>
<li>Support for Master template files. If our main app nav or layout changes, change it once and it automagically updates on all the pages using that Master. HUGE time saver.</li>
<li>Send work you created in desktop client to your web account, so you can do a lot of the work wherever you want and then upload it  when you&#8217;re ready to use the collaboration tools.</li>
<li>Toggle between sketchy-style, Mac skin and PC skin, great for rough mockups and then converting to polished final versions with just a click.</li>
<li>Export PDF list with thumbnail of annotated elements an annotations, perfect for an organized breakdown of more specific details on each element. LOVE this &#8211; didn&#8217;t know I wanted this feature until I found it here.</li>
<li>Online collaboration with others, allowing clients and co-workers to add notes and comments right into the file.</li>
<li>Detailed version history.</li>
<li>Built-in task management system with milestone, great for organizing work on large projects where tasks can get lost.</li>
<li>Export wireframe pages as PNG.</li>
<li>Share the HTML prototype on their server, or export to ZIP file and upload it to your own.</li>
<li>One-click grid overlay.</li>
<li>Easily embed the prototype in your own websites.</li>
<li>Easily create or import additional UI elements from user contributed snippets.</li>
<li>Properties menu lets you specify exact pixel dimensions for every element if needed.</li>
<li>Separate menu of iPhone UI elements (Android coming soon).</li>
<li>Automatic site map generation.</li>
</ul>
<h3>What Needs Work</h3>
<p>Of course nothing is going to be perfect, and iPlotz is no exception. Here are a few of the things that bug me, <em>none</em> of which are even close to being deal-breakers in my world.</p>
<ul>
<li>Hotkey mapping is a little wonky in some browsers, but that is more an artifact of AIR/Flash than it is iPlotz, I think.</li>
<li>Some elements do not maintain the same sketch style. For example, the module-style widget has rounded corners, which is inconsistent with the rest of the sketchy style&#8217;s squared corners. I also feel it is introduces a level of graphic design that I specifically wish to avoid by using sketchy frames. I have only noticed this on a handful of elements, however, and I spoke to iPlotz founder Mark Vernon today and he assures me that properties like that will be customizable in the near future. </li>
<li>Element library isn&#8217;t as extensive as Balsamiq, but user-contributed snippets seem to be on the rise</li>
<li>I didn&#8217;t see any way to save a frequently used imported snippet to your element library so you can get to the easily for future projects. <strong>UPDATE: </strong>Mark informed me that they&#8217;re going to be pushing out this functionality in one of their next releases. I&#8217;ll be checking it out on their staging server.</li>
</ul>
<h3>My Demo</h3>
<p>In order to give it a fair review, I decided to whip up a small set of mockups, both to give me an idea of what the UI is like, and to be able to show you some &#8220;finished&#8221; products. </p>
<p>Below is the embeddable widget that I could easily stick into a branded HTML page to show my client. Click around in it, and you&#8217;ll see it&#8217;s fully functional. The size was dictated by my blog size, not a iPlotz limitation. You can display it at whatever size you&#8217;d like in your own sire.</p>
<div style="text-align: center; padding-bottom: 15px;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="550" height="450" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="true" /><param name="src" value="http://iplotz.com/app/viewer.swf?k=bb21379aab442e40608a3121ab798e97&amp;project_name=Snipe test&amp;project_id=31845&amp;page_id=31845_7&amp;e=1&amp;a=19791" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="550" height="450" src="http://iplotz.com/app/viewer.swf?k=bb21379aab442e40608a3121ab798e97&amp;project_name=Snipe test&amp;project_id=31845&amp;page_id=31845_7&amp;e=1&amp;a=19791" allowfullscreen="true" allowscriptaccess="always"></embed></object></div>
<p>Check out my <strong><a href="http://iplotz.com/app/viewer.php?k=9ec5982af4082394ffc8070e86bd4f3b&#038;pr=31845&#038;pg=31845_10&#038;a=19791&#038;sitemap=true#">sitemap demo version here</a></strong>. You can set your wireframes to public or private &#8211; I&#8217;ve got mine set to public so that you can see them, but I probably would keep them private and just assign roles to team members on a real project.</p>
<p>Take a few minutes and click around in the protoype. The nav menus, homepage accordian box, contact form, etc all work, and it required no extra work on my part other than to specify a link in the element&#8217;s properties. (If you&#8217;ve used Balsamiq+Napkee before, the process is basically identical.)</p>
<p>For client deliverables, in addition to the fancy shmancy working protoype, I can easily export single wireframes (using the sketchy style, the Mac OS style or the PC style):</p>
<p><a href="http://www.snipe.net/wp-content/uploads/2010/02/homepage.png"><img src="http://www.snipe.net/wp-content/uploads/2010/02/homepage-560x471.png" alt="" title="homepage" width="560" height="471" class="aligncenter size-large wp-image-2883" /></a></p>
<p><a href="http://www.snipe.net/wp-content/uploads/2010/02/contact.png"><img src="http://www.snipe.net/wp-content/uploads/2010/02/contact-560x471.png" alt="" title="contact" width="560" height="471" class="aligncenter size-large wp-image-2884" /></a></p>
<p>Or I can export them all into one PDF [<a href="http://www.snipe.net/wp-content/uploads/2010/02/mockups.pdf">PDF link</a>]. And this is my favorite part &#8211; the bit I didn&#8217;t realize I needed until I had it &#8211; I can generate a PDF that contains only the elements in the pages that have annotations [<a href="http://www.snipe.net/wp-content/uploads/2010/02/annotations.pdf">PDF link</a>]. This is fantastic because it allows me to explain any special considerations around specific elements in great detail without cluttering up the wireframe itself. I normally have to manually create this documentation, so <strong>this feature alone has just saved me <em>hours</em> of repetitive work</strong>.</p>
<h3>Another Potential Option. Sorta.</h3>
<p><strong>Another interesting contender is <a href="http://www.protoshare.com/" target="_blank">ProtoShare</a></strong>. It looks to have a lot of the same functionality as iPlotz, with online collaboration, version history, project management elements and easy prototyping, however their product is web-only, which I&#8217;m not crazy about, and their free demo required a credit card, which I can&#8217;t stand on principle. </p>
<p><strong><em>Protip: </em></strong>The free trial is supposed to woo new clients and get them on-board and buying as quickly as possible &#8211; asking for a credit card number just so someone can try out your software is a little sleazy, as if you&#8217;re hoping I&#8217;m going to forget to cancel and you can suck me for at least a few bucks before I get around to it. If your product is good and brings value, I will buy it. Don&#8217;t force me. Dick.</p>
<p>For me, web collaboration might work fine for my personal web clients,  but some of the clients we have at the agency I work for have strict  rules about online collaboration in apps that do not live on our server  or theirs, so my particular circumstance might limit the times I can use the collaboration in a practical situation.</p>
<p><strong>The price points on ProtoShare is also a little higher.</strong> iPlotz starts at exactly free, albeit with a very limited plan, only 1 project, max 5 pages. The next plan is $15 a month (although the best value seems to be the yearly plan of $99 which comes with a license for the desktop version), whereas ProtoShare starts at $29/month with restrictions on how many people can review/collaborate. Who knows &#8211; it might be worth the extra scratch, but I <em>hate</em> using web-only tools, and I&#8217;m not going to give them my credit card information just to try out a demo. You can compare their prices in more detail here: <a href="http://www.protoshare.com/cgi-bin/WebObjects/Protoshare.woa/3/nobkmark/pRKey5fwWtE3SvtVvtychM/18.0" target="_blank">ProtoShare</a> vs <a href="http://iplotz.com/price.php" target="_blank">iPlotz</a>. When they come out with a desktop version, I might be willing to check it out. I don&#8217;t see any option for the sketchy-style mockups in ProtoShare either though, which is another negative in their column.</p>
<p>But hey, don&#8217;t take my word for it &#8211; check out the video demos on both sites and download iPlotz. I&#8217;m curious to know what you think.</p>
<p><strong>Note:</strong> The title of this article refers to &#8220;cheap&#8221;. While to many people, &#8220;cheap&#8221; might mean &#8220;free&#8221;, I consider ~$99 a year a reasonable price for such a flexible tool that is such an important part of my job, especially since Balsamiq is $79 and Napkee is $49, so you&#8217;re spending that much even if you go the &#8220;cheaper&#8221; route. Seriously, you spend more than $100 on Starbucks (or whatever corporate coffee swill you&#8217;re into) a month, and I spend more than that on hookers and blow in a single week. You can also buy the iPlotz software outright without the web collaboration, which ends up being about $80 for a one-time purchase. </p>
<p>So that&#8217;s iPlotz. I&#8217;m a now paid member, and I&#8217;m very happy with what they provide. Plus, in talking to Mark today, it sounds like they&#8217;ve got more very cool features coming down the line soon.</p>
<p>What prototyping/wireframing tool do you use? Let me know in the comments!</p>


<p>Possibly related posts:<ol><li><a href='http://www.snipe.net/2009/01/cheap-or-free-website-status-monitoring/' rel='bookmark' title='Permanent Link: Cheap or Free Website Status Monitoring'>Cheap or Free Website Status Monitoring</a> <small>Its a call you never, ever want to get. &#8220;My...</small></li>
<li><a href='http://www.snipe.net/2008/07/generate-lists-of-banned-words-for-forums-and-other-applications/' rel='bookmark' title='Permanent Link: Generate lists of banned words for forums and other applications'>Generate lists of banned words for forums and other applications</a> <small>If you develop software for a living, or if you...</small></li>
<li><a href='http://www.snipe.net/2009/10/mini-site-facebook-static-fbml/' rel='bookmark' title='Permanent Link: Extending Facebook Static FBML Tabs with Dynamic Content'>Extending Facebook Static FBML Tabs with Dynamic Content</a> <small>This tutorial walks you through how to use DynamicFBML to...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2010/02/wireframes/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Microsoft Web Developer&#8217;s Summit 2009</title>
		<link>http://www.snipe.net/2009/12/mswds09/</link>
		<comments>http://www.snipe.net/2009/12/mswds09/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 03:20:31 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[PHP/mySQL]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[mswds]]></category>
		<category><![CDATA[open source]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[webdev]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=2557</guid>
		<description><![CDATA[I had the opportunity this week to go out to Redmond, Washington to attend the Microsoft Web Developer&#8217;s Summit at the MS headquarters. For this summit, about 25 leaders in the PHP (and PHP project) community were invited out to sit down with members of the MS product development teams and provide critical, honest feedback [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F12%2Fmswds09%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F12%2Fmswds09%2F&amp;source=snipeyhead&amp;style=normal&amp;service=bit.ly&amp;service_api=R_92bd97f4f8b9fa8a40675b36ea291223" height="61" width="50" /><br />
			</a>
		</div>
<p>I had the opportunity this week to go out to Redmond, Washington to attend the Microsoft Web Developer&#8217;s Summit at the MS headquarters. For this summit, about 25 leaders in the PHP (and PHP project) community were invited out to sit down with members of the MS product development teams and provide critical, honest feedback about Microsoft.<br />
<span id="more-2557"></span></p>
<h3>Background</h3>
<p>The MSWDS is one of only four significant annual events within the PHP community (others include tek, DPC and ZendCon), and this summit is a bit harder to get invited to. Unlike most other conferences, where all you need is the cash to pony up for a conference pass and a hotel room to crash in, invites are very limited and attendees are selected because they have had some interaction with the folks at Microsoft, and are believed to be leaders and influencers within the open source community. To be blunt, these summits cost Microsoft a lot of money, so they need to make sure they&#8217;re getting the best bang for their buck.</p>
<p><img src="http://www.snipe.net/wp-content/uploads/2009/12/IMG_0065-sm.jpg" alt="IMG_0065-sm" title="IMG_0065-sm" width="200" height="126" class="alignright size-full wp-image-2577" />Keeping that in mind, it would be easy to assume that we were being brought out there so that Microsoft could pitch us on the latest and greatest Microsoft products, trying to get the movers and shakers of open source to drink the corporate kool-aid and switch to Microsoft products. While more acceptance of Microsoft products within the open source community is obviously a goal, they are making a concerted effort to learn from us &#8211; what we need, where they are falling short, and how we can move forward together.</p>
<h3>Discussions and Format</h3>
<p>The summit itself was a total of three days, with the last day being optional for those open source developers who were willing to sign an NDA to discuss some of Microsoft&#8217;s emerging technology. During the three days, different representatives from Microsoft&#8217;s product teams sat down with us and asked for our comments, thoughts and ideas about where they&#8217;re at, and where we think they should be going. We met with folks from the <a href="http://microsoft.com/web/">IIS Web Platform</a> team, the <a href="http://www.microsoft.com/sqlserver/2008/en/us/default.aspx">SQL server</a> team, as well as some representatives from <a href="http://www.codeplex.com/">Codeplex</a>, <a href="http://silverlight.net/">Silverlight</a>, <a href="http://technet.microsoft.com/en-us/library/bb978526.aspx">Powershell</a>, <a href="http://www.asp.net/%28S%28waglea45zymnbmbli4vgme45%29%29/ajax/">ASP.NET Ajax</a> (which is not exclusive to ASP.NET, despite the name), and <a href="http://www.bing.com/maps/explore/">Bing maps</a>. </p>
<p>We had a chance to air grievances, which was cathartic in some ways, but I think it was more important to us to be able to sit down with the actual teams who are working on this technology at Microsoft, and really get into the specific challenges we face. The approach was not generally pitchy, and with very few exceptions, a great deal of effort was put into making all of us from the open source community feel like respected authorities in our field whose opinions really matter. </p>
<p>Something they did this year which was apparently not done last year was to include representatives from well-known PHP-based projects who are not normally parts of the PHP community. I honestly hadn&#8217;t realized that the many of the folks over Joomla, WordPress and Drupal often don&#8217;t consider themselves as part of the greater PHP community, and getting a chance to discuss that with them brought up some interesting perspectives. I don&#8217;t think the guys representing these projects were there in an official capacity, but their point of view was one that had honestly not occurred to me before, so that was a really interesting and unexpected benefit. There was some debate on whether or not these types of projects should be a more involved part of the PHP community, with good points on both sides, but I think most walked away with some ideas on how to move forward in making those lines of communication more accessible and open.</p>
<h3>My Perspective</h3>
<p>Of course the ultimate question from Microsoft was &#8220;What would it take for you to switch to Microsoft products for your clients?&#8221; My smartass remark was, of course &#8220;A fucking miracle.&#8221; But everyone in the room knew I was joking. I hope. If we weren&#8217;t willing to work with Microsoft on improving their products to work with open source better, we wouldn&#8217;t have been there. </p>
<p>As often as Microsoft has been an easy target in the past, and as much bad blood as there may have been in the past, there <em>are</em> people at Microsoft that care about working with the open source community, and who are making progress to get there. It is our job as technology professionals to fairly evaluate technology and make recommendations based on what makes the most sense technologically and financially. It is NOT our job to make religious decisions based on zealotry. </p>
<p>That means that if and when Microsoft can meet my needs and/or the needs of my clients, it can and should be part of that evaluation or I&#8217;m not doing my job. Does that mean I&#8217;m ready to switch back? No. Not yet, anyway. But I believe they are listening, and I saw some things during this summit that make me far more likely to start including some parts of Microsoft&#8217;s products into the technology I suggest as being potentially viable for client projects, which is a far cry closer than I was last week. Specifically, some of the stuff I learned about Silverlight, Bing&#8217;s geolocation products and Windows Azure (Microsoft&#8217;s cloud hosting platform) was pretty impressive. As I get to play with these products a little more, I&#8217;ll be blogging about them with my fair evaluation of pros and cons, so stay tuned.</p>
<p>I&#8217;m also excited to see where the <a href="http://www.microsoft.com/web/Downloads/platform.aspx">Microsoft Web Platform Installer product</a> heads. Right now, the WebPI product is a very easy to use, slick solution for the less techy individual who wants to, for example, deploy a WordPress blog in 5 minutes or less and may not have the savvy to do the install themselves &#8211; basically a MS version of Cpanel/Fantastico, which we have had available to us as web administrators for over a decade. That product is less interesting to me right now, but some of the directions they could go in for more advanced users like us hold real potential. We had some suggestions that were well-received, and if they are actually implemented in the way I envision them, it could honestly turn the table and make some of the Microsoft web server products something that I could consider recommending, or even using myself. (I should also mention that Cpanel is the most horrific, insecure, hack-prone web control panel I&#8217;ve ever used, and I am NOT endorsing it as a solution.)</p>
<p>The reality is that competition inspires innovation, and Microsoft getting better means progress for everyone. I saw a post on Twitter that basically implied that open source representatives attending this conference were traitors or sellouts. I don&#8217;t see it that way at all. We have amazing open source products like Firefox because the open source community worked together to create a better product, and Microsoft responded by making vast improvements to Internet Explorer, building in more security and standards compliance. <strong>When we work together to innovate, everybody wins.</strong></p>
<p>Another transition I&#8217;ve been seeing in Microsoft which was really made more obvious by this summit is that there is a less omnipresent feeling of &#8220;all or nothing&#8221; within many Microsoft departments. As open source advocates, we enjoy having choices. Previously with Microsoft, you&#8217;d get the most benefit from their products by committing to an entirely Microsoft development process (&#8220;drinking <em>all</em> of the kool-aid, since the best stuff is the sugary goop at the bottom&#8221;), with benefits sharply falling off if you opted to pick and choose. This philosophy has always been distinctly in opposition with the open source philosophy, and I believe was likely the cause for some of the distrust coming from the open source community. Seeing this transition into a paradigm of being able to cherry-pick what we like for some things and sticking with open source solutions we like better for others is a step in the right direction, in my opinion. </p>
<p>An additional unexpected benefit to sitting down with all these MS product people was that I got a chance to better understand some of the legal/licensing challenges Microsoft faces. I&#8217;m not making excuses for them, but I hadn&#8217;t considered some of the obstacles in the way of people at MS who care about working with us. Microsoft is a big target with deep pockets, and they have to cover their own asses. I was quicker to dismiss some of the corporate decisions as being &#8220;evil&#8221; prior to sitting down with some of them and understanding why they do what they do. Don&#8217;t get me wrong &#8211; some of their decisions (*cough*sudo*cough*) still don&#8217;t make sense to me and I believe they are wrong, but I think I have a better understanding of where they sit than I did before</p>
<h3>Wrapping Up</h3>
<p>Overall, I would consider this summit a great success, and I hope I get to participate again in the future. There are several people who really deserve a shout-out for all of the hard work that went into this and are directly responsible for it&#8217;s success. From the PHP community, <a href="http://blog.calevans.com/">Cal Evans</a> was a co-host and an absolute rock star, always quick to make sure things ran smoothly and kick-start conversations and redirect us back when we went off on tangents. From Microsoft, Karri Dunn, Tonya Young, Josh Holmes, Peter Laudati, Lauren Cooney, and others were amazing. I may be forgetting a few &#8211; I am still a little wiped from the week and the traveling.</p>
<p>Was this an instant fix? Certainly not. Do we all have a lot more work to do before we&#8217;re &#8220;there&#8221;? Absolutely. But as Cal Evans put it on his own blog roundup, &#8220;The more people I get to know at Microsoft, the less I’m able to despise the company.&#8221; They took the time to find out what we think, even when it may not have been what they wanted to hear. Time will tell whether or not they actually act on it. </p>
<h3>Other PHP Representatives Blog Post Roundups</h3>
<p>I&#8217;ll be updating this list as more people finish their blog post roundups, so you can get take their on the summit. Many of them are far smarter than I am, so it&#8217;s worth reading what they have to say.</p>
<ul>
<li><a href="http://blog.calevans.com/2009/12/05/mswds09/">Cal Evans</a> (<a href="http://twitter.com/CalEvans">@CalEvans</a>)</li>
<li><a href="http://blog.phpdeveloper.org/?p=246">Chris Cornutt</a> (<a href="http://twitter.com/enygma">@enygma</a>)</li>
<li><a href="http://blog.maartenballiauw.be/post/2009/12/07/Microsoft-Web-Development-Summit-2009.aspx">Maarten Balliauw</a> (<a href="http://twitter.com/maartenballiauw">@maartenballiauw</a>)</li>
<li><a href="http://www.rafaeldohms.com.br/2009/12/04/microsoft-web-developer-summit-2009-in-review/en/">Rafael Dohms</a> (<a href="http://twitter.com/rdohms">@rdohms</a>)</li>
<li><a href="http://blueparabola.com/blog/microsoft-web-developer-summit-2009">Keith Casey</a> (<a href="http://twitter.com/CaseySoftware">@CaseySoftware</a>)</li>
<li><a href="http://blog.wampserver.com/index.php/2009/12/05/microsoft-web-development-summit-2009/">Romain Bourdon</a> (in French) (<a href="http://twitter.com/le_vrai_roms">@le_vrai_roms</a>)</li>
<li><a href="http://blog.tabini.ca/2009/12/09/microsoft-is-and-microsoft-does/">Marco Tabini</a> (<a href="http://twitter.com/mtabini">@mtabini</a>)</li>
<li><a href="http://community.joomla.org/blogs/community/1088-slowing-back-down-mswds-and-jdc09-reflection.html">Sam Moffatt</a> (<a href="http://twitter.com/Pasamio">@Pasamio</a>)</li>
<li><a href="http://blog.echolibre.com/2009/12/microsoft-web-developer-summit/">Helgi Þormar Þorbjörnsson</a> (<a href="http://twitter.com/h">@h</a>)</li>
</ul>
<h3>MS Representative Blogs</h3>
<p>If you&#8217;d like to see more about the fabulous people at MS who are working hard to move the company forward in a way that works with open source, check out their blogs. I&#8217;m proud to call these guys friends, and as long as we continue to have people like this working for Microsoft, I think the lines of communication and cooperation between both sides of the aisle will keep moving forward.</p>
<ul>
<li><a href="http://www.davebost.com/blog/">Dave Bost</a> (<a href="http://twitter.com/DaveBost">@DaveBost</a>)  &#8211; Developer Evangelist</li>
<li><a href="http://www.joshholmes.com/blog/">Josh Holmes</a> (<a href="http://twitter.com/JoshHolmes">@JoshHolmes</a>) &#8211; UX Architect Evangelist</li>
<li><a href="http://blogs.iis.net/tobintitus/">Tobin Titus</a> (<a href="http://twitter.com/tobint">@tobint</a>) &#8211; MSDN Site Manager</li>
<li><a href="http://blogs.msdn.com/peterlau/">Peter Laudati</a> (<a href="http://twitter.com/jrzyshr">@jrzyshr</a>) &#8211; Developer Evangelist</li>
<li><a href="http://blogs.msdn.com/markbrown/">Mark Brown</a> (<a href="http://twitter.com/markjbrown">@MarkJBrown</a>) &#8211; Product Manager for Microsoft Web Platform</li>
<li>William Coleman (<a href="http://twitter.com/will_coleman">@will_coleman</a>) &#8211; Developer Evangelist</li>
<li>Lauren Cooney (<a href="http://twitter.com/lcooney ">@lcooney</a>) &#8211; GPM for Web Platforms at Microsoft</li>
<li>Jas Sandhu (<a href="http://twitter.com/jassand">@jassand</a>) &#8211; Interop Strategy Evangelist</li>
<li><a href="http://ruslany.net/">Ruslan Yakushev</a> (<a href="http://twitter.com/ruslany">@ruslany</a>) &#8211; Program Manager on IIS team in charge of FastCGI and PHP support</li>
<li><a href="http://hanselman.com">Scott Hanselman</a> (<a href="http://twitter.com/shanselman">@shanselman</a>)  &#8211; Principal Program Manager Lead</li>
</ul>
<p>Funnily, as I&#8217;m writing this, <em>Futurama: Into the Wild Green Yonder</em> has been on television, and the scene that just played is the one where Calculon says &#8220;I&#8217;d like to thank the academy, my agent, and most of all my operating system &#8211; Windows 7, for everything it &#8211;&#8221; at which point his OS locks up. Windows 7 is actually a great product, and I run it on my Mac using Bootcamp and VM Fusion, but I thought the timing was amusing.</p>
<p><em>Kool-aid photo taken in <a href="http://www.snipe.net/2009/02/getting-to-know-belize/">Belize</a> by me &#8211; just thought it was funny. Lead post image by <a href="http://eliw.com/">Eli White</a>.</em></p>


<p>Possibly related posts:<ol><li><a href='http://www.snipe.net/2009/12/final-fail-of-the-year/' rel='bookmark' title='Permanent Link: Final Fail of the Year'>Final Fail of the Year</a> <small>This is just a quickie to let you know that...</small></li>
<li><a href='http://www.snipe.net/2009/01/trying-out-facebook-connect/' rel='bookmark' title='Permanent Link: Trying out Facebook Connect'>Trying out Facebook Connect</a> <small>After much deliberation, I have decided to give Facebook Connect...</small></li>
<li><a href='http://www.snipe.net/2008/07/identify-and-fix-sql-injection-vulnerabilities-in-web-applications/' rel='bookmark' title='Permanent Link: Identify and Fix SQL Injection Vulnerabilities in Web Applications'>Identify and Fix SQL Injection Vulnerabilities in Web Applications</a> <small>Scrawlr is a free software for scanning SQL injection vulnerabilities...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/12/mswds09/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SVN Working Copies and Repository Locations</title>
		<link>http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/</link>
		<comments>http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 09:11:35 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1641</guid>
		<description><![CDATA[In part one of this series, you learned what Subversion is and how it can help you, in addition to the terms you&#8217;ll need to become familiar with in order to use Subversion in your development process. Part two of this series goes into more specific detail about potential development environments that may work for [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F03%2Fgetting-started-with-subversion-part-two%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F03%2Fgetting-started-with-subversion-part-two%2F&amp;source=snipeyhead&amp;style=normal&amp;service=bit.ly&amp;service_api=R_92bd97f4f8b9fa8a40675b36ea291223" height="61" width="50" /><br />
			</a>
		</div>
<p>In part one of this series, you learned what Subversion is and how it can help you, in addition to the terms you&#8217;ll need to become familiar with in order to use Subversion in your development process. Part two of this series goes into more specific detail about potential development environments that may work for you.<span id="more-1641"></span></p>
<p><strong>Subversion creates a bunch of hidden files and folders inside of every directory in your Working Copy that&#8217;s checked into SVN. </strong>If your Working Copy is on your local computer, you&#8217;ll see these as .svn directories if your system preferences allow you to see hidden files and folders. You don&#8217;t need to worry about these, and you never really need to look at them, but as a result, it is not recommended that your Working Copy be on your live production box. If you decide not to listen to me, you should at least consider <a href="http://claudio.cicali.name/post/2005/08/protecting-svn-entries/" target="_blank">adding a few lines to your .htaccess</a> to deny prying eyes access to your .svn directories.</p>
<h2>Working Copy &amp; Repository on your local machine</h2>
<p><strong>Create a Working Copy on your local machine, create the Repository on your local machine, and FTP/SFTP the files once they&#8217;re committed.</strong> This will really only work if you are the only developer, or your local machine is the only machine changing files. (Okay, that&#8217;s not entirely true &#8211; you can set up the Repository on a network drive and have multiple developers Check Out their own Working Copies to their own computers, but I have run into issues running Subversion over a network.)</p>
<p><img class="aligncenter" style="margin: auto;" title="config1" src="http://www.snipe.net/wp-content/uploads/2009/03/config1.png" alt="config1" width="334" height="491" /></p>
<p>If you&#8217;re running OSX on your local machine, see this <strong><a href="http://www.wikihow.com/Install-Subversion-on-Mac-OS-X" target="_blank">tutorial on WikiHow on how to set up Subversion locally</a></strong>. If you&#8217;re running Windows, there is <strong><a href="http://www.thewebsqueeze.com/web-design-articles/an-introduction-to-subversion.html" target="_blank">an exceptional walkthrough on The WebSqueeze</a></strong> written by Christopher Hyne that is a must-read. Setting up Subversion on Mac or PC is really quite painless, and this is a perfectly valid way to go.</p>
<p><strong>Pros:</strong> Easy, local setup. No external services to set up, your workflow doesn&#8217;t change that much, and you don&#8217;t need an internet connection to commit things to your repository.</p>
<p><strong>Cons:</strong> Possible challenges with running Subversion over a network, you still have to upload your files manually, and you don&#8217;t get the benefit of a slick gui with which to view revision history, as you would using <a href="http://www.beanstalkapp.com" target="_blank">Beanstalk</a> or <a href="http://www.unfuddle.com" target="_blank">Unfuddle</a> for hosted solutions, or by setting up <a href="http://trac.edgewall.org/" target="_blank">Trac</a> (a gui reporting interface/wiki/ticket system) on your server. You can set up Trac on your local machine with Python and some extra work, but that&#8217;s always been too much trouble for me. Just MHO though &#8211; it works great for some people.</p>
<h2>Working Copy on your local machine, remote Repository</h2>
<p><strong>For my personal stuff, since I use <a href="http://www.snipe.net/series/moving-to-mosso/" target="_blank">Mosso</a> as my web host, which does not currently provide Subversion (though I hear they&#8217;re working on it), I use a third party Subversion host, like <a href="http://www.beanstalkapp.com" target="_blank">Beanstalk</a> or <a href="http://www.unfuddle.com" target="_blank">Unfuddle</a>.</strong> I create my Repository on Beanstalk or Unfuddle, Import whatever files I may have created for the project already, Check Out a Working Copy to my laptop, and I&#8217;m all set. I work on files on my laptop, test them on my local installation of Apache/PHP using <a href="http://www.apachefriends.org/en/xampp.html" target="_blank">XAMPP</a>, Commit them to Beanstalk or Unfuddle (depending which service I&#8217;m using to host my Repository), and upload them via FTP/SFTP to the development server area.</p>
<p>The result is a little extra work &#8211; I have to deal with SVN on top of FTP/SFTP, but the security of knowing my ass is covered and I have a detailed revision history makes it entirely worth it to me.</p>
<p><strong>One benefit to using a third-party SVN host, such as <a href="http://www.beanstalkapp.com" target="_blank">Beanstalk</a> or <a href="http://www.unfuddle.com" target="_blank">Unfuddle</a> (besides the fact that it gives you SVN capabilities if your server doesn&#8217;t support it) is that you get a shmancy web interface with which to view your revisions.</strong> Below is a screenshot of the Unfuddle web interface. You can see that it gives me a nice, organized view of all of the history, including revisions messages, numbers and person committing. (This is a project for JPM Morgan that I worked on with my friend <a href="http://www.phpcult.com/blog/" target="_blank">Vidyut Luther</a>.)</p>
<p><img class="aligncenter" style="margin: auto;" title="picture-5" src="http://www.snipe.net/wp-content/uploads/2009/03/picture-5-560x354.png" alt="picture-5" width="560" height="354" /></p>
<p>In getting Vidyut&#8217;s blog url, I see his latest blog posts states that he can, in fact, use Subversion on Mosso, by using Expandrive. I haven&#8217;t tried it yet, and he has, so if you&#8217;re interested in exploring that as an option, <a href="http://www.phpcult.com/blog/using-subversion-with-mosso/" target="_blank">check out his blog post about it</a>. I may give it a shot at some point, but I do like the simplicity of working with a third-party SVN host. I don&#8217;t have to administer anything, just create the Repository and go.</p>
<h2>Remote Branches on dev, remote Repository, rsync to live</h2>
<p>One way of handling your development environment is to set up a Repository on the remote server, Check Out a Working Copy on a dev area on the remote server, such as dev.example.com, and set up individual <em>Branches</em> for each developer. An SVN Branch is simply a copy of the filesystem separate from the main version, called the <em>Trunk</em>. Using Branches allows you to save your half-broken work frequently without interfering with others, yet you can still selectively share information with your collaborators.</p>
<p><a href="http://www.snipe.net/wp-content/uploads/2009/03/config4.png"><img class="aligncenter size-full wp-image-1679" title="config4" src="http://www.snipe.net/wp-content/uploads/2009/03/config4.png" alt="config4" width="550" height="600" /></a></p>
<p><strong>In this scenario, no one ever touches the live files directly, ever. Ever ever.</strong> Everything gets pushed to dev for review, and once it&#8217;s approved, you run the rsync script and rsync is the <em>only</em> utility that ever moves stuff over to live.  It may sound confusing, but <a href="http://www.robsearles.co.uk/2008/12/05/want-to-svn-but-cant-rsync-to-the-rescue/" target="_blank">check out this simple blog post that explains how it can be done</a>.</p>
<p>This can be daunting to set up, since there will be directories on live you may want to skip during the rsync (uploaded images, cache files, etc), but once it&#8217;s set up, it generally works like a charm, and it insures that no one ever screws up the live server, since no one is ever touching the live server.</p>
<p>Creating Branches is incredibly easy &#8211; check out the section on Branches in the free <em><a href="http://svnbook.red-bean.com/en/1.0/ch04s02.html" target="_blank">Version Control with Subversion book</a></em>. They cover this concept and process very well. To give you an idea of what Branches look like, we&#8217;ll use their example structure, with a project named <em>calc</em><em></em>. This is what the original directory structure looks like:</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-1683" title="svn-struct" src="http://www.snipe.net/wp-content/uploads/2009/03/svn-struct.png" alt="svn-struct" width="258" height="232" /></p>
<p>You can see in this example, the &#8216;branches&#8217; directory is currently empty, since we haven&#8217;t created any branches yet. The three file icons represent the total files in the project, which live in the Trunk.</p>
<p>Once we create a Branch, named &#8216;my calc branch&#8217; (since it&#8217;s a Branch within the &#8216;calc&#8217; project), you can see that a new directory is shown in the &#8216;branches&#8217; directory, and a copy of the files from the Trunk live there:</p>
<p><img class="aligncenter size-full wp-image-1684" title="svn-struct-branches" src="http://www.snipe.net/wp-content/uploads/2009/03/svn-struct-branches.png" alt="svn-struct-branches" width="323" height="340" /></p>
<p>Parts of each Branch can be selectively merged into the Trunk, so each developer can work on their tasks within their own Branch, break (and hopefully fix) as many things as they need to, Committing their work as they go, without affecting the main Trunk until the revisions are merged.</p>
<p><strong>If you didn&#8217;t want to use Branches, you could add a staging server in this process. </strong>At a place I used to work, we had a development version that was actively worked on, a staging server, and a live server. We would Commit changes to the development server, rsync over to the staging server, and the staging server would automagically rsync every 10 minutes to live. Nothing was synced to staging unless we had kicked the tires and done QA on it on the development box, and if we couldn&#8217;t wait the 10 minutes, we could do a manual push to live by running the rsync script directly from the command line.</p>
<p>These are just a few of the possibilities. How are you using Subversion? Leave your configuration in the comments! And keep your eyes out for the next section that deals with the basic Subversion commands you&#8217;ll need to get started and optional gui applications you can use to make your Subversion experience easier.</p>


<p>Possibly related posts:<ol><li><a href='http://www.snipe.net/2009/03/getting-started-with-subversion/' rel='bookmark' title='Permanent Link: Getting Started with Subversion'>Getting Started with Subversion</a> <small>As a web developer, hopefully you&#8217;re already using subversion, and...</small></li>
<li><a href='http://www.snipe.net/2008/07/dropbox-versus-foldershare-for-syncing-files-between-computers/' rel='bookmark' title='Permanent Link: Dropbox versus FolderShare for Syncing Files Between Computers'>Dropbox versus FolderShare for Syncing Files Between Computers</a> <small>In my eternal quest to sync up all of the...</small></li>
<li><a href='http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/' rel='bookmark' title='Permanent Link: Questions to Ask Before Starting a Project'>Questions to Ask Before Starting a Project</a> <small>We&#8217;re all human, and we all make mistakes and overlook...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Getting Started with Subversion</title>
		<link>http://www.snipe.net/2009/03/getting-started-with-subversion/</link>
		<comments>http://www.snipe.net/2009/03/getting-started-with-subversion/#comments</comments>
		<pubDate>Tue, 10 Mar 2009 08:14:09 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[subversion]]></category>
		<category><![CDATA[svn]]></category>
		<category><![CDATA[version control]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1620</guid>
		<description><![CDATA[As a web developer, hopefully you&#8217;re already using subversion, and this tutorial is utterly useless to you. If so, good job, and carry on! If you&#8217;re a web developer (or web designer, or web programmer, or are in any way creating files that display or do something on the internet) and you&#8217;re not using subversion [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F03%2Fgetting-started-with-subversion%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F03%2Fgetting-started-with-subversion%2F&amp;source=snipeyhead&amp;style=normal&amp;service=bit.ly&amp;service_api=R_92bd97f4f8b9fa8a40675b36ea291223" height="61" width="50" /><br />
			</a>
		</div>
<p>As a web developer, hopefully you&#8217;re already using subversion, and this tutorial is utterly useless to you. If so, good job, and carry on! If you&#8217;re a web developer (or web designer, or web programmer, or are in any way creating files that display or do something on the internet) and you&#8217;re not using subversion (or any other version control), this tutorial is for you.<span id="more-1620"></span></p>
<p>Since this is a question that comes up a lot, I&#8217;ve scoured the web for a really basic subversion primer, and although many come close (including the outstanding free online book, <em><a href="http://svnbook.red-bean.com" target="_blank">Version Control with Subversion</a></em>), some people may feel overwhelmed at such an immense amount of information. Truly, I believe the only flaw in the <em>Version Control with Subversion</em> book is that they don&#8217;t include any real life set-up examples when discussing the <a href="http://svnbook.red-bean.com/en/1.1/ch01s04.html" target="_blank">Subversion Architecture</a>.</p>
<p>There are many different ways you can set up your development environment, so I can understand why they would be hesitant to give specific examples, however some people learn best by seeing examples that relate to their lives, so that&#8217;s what I&#8217;m going to attempt to do.</p>
<p>The example set-up we&#8217;ll be looking at is one in which the developer is currently working either locally or remotely, and using FTP/SFTP to move files to the remote development environment webserver. For example, you either:</p>
<ul>
<li>Have a copy of Apache running on your desktop/laptop computer. You store and work on the files on your desktop/laptop, test them locally, and then upload them to your server  -<em> or you</em> -</li>
<li>Make changes to the files locally on your desktop/laptop and test directly in the development space of the webserver (no local webserver) -<em> or you</em> -</li>
<li>Use a text editor that allows you to pull files from FTP directly. You open them from FTP, make your changes, and save to FTP (no local copy stored at all)</li>
</ul>
<p><strong>I should mention that the third option here is absolutely the least recommended, especially since you&#8217;re not using version control.</strong> If your FTP process konks out mid-way through and the file isn&#8217;t saved completely, closing your application could mean losing that file forever. (Yeah, I&#8217;m looking at you, UltraEdit.) Regardless, if you&#8217;re using any of the above scenarios, or something fairly similar, this is aimed at you.</p>
<p>Because the <em>Version Control with Subversion</em> book is so good at explaining so much of this, I&#8217;ll be linking to it liberally, and just filing in the blanks where some people may get a little lost.</p>
<p><strong>Disclaimer: </strong>This article is a <em>very basic</em> overview of subversion. There are many ways you might have your system and repository set up, and I won&#8217;t try to list them all, or even most. I&#8217;m going to use what many web developers would consider a &#8220;real world&#8221; example. You will not walk away from this a subversion guru, or able to deftly administer a subversion server. You will hopefully walk away knowing how to set up a simple repository, connect to it, and begin using svn in your day to day development. If you fuck something up, it is not my fault. Start on a test environment until you get your svn legs and feel pretty comfortable with basic commands.</p>
<p>This article is not a replacement for <em>Version Control with Subversion</em> &#8211; more of a supplement for newbies. <strong>As you begin to delve further into using subversion, that book will become your bible.</strong></p>
<h2>What is Subversion?</h2>
<p>According to the <em>Version Control with Subversion</em> book:</p>
<blockquote><p>Subversion (SVN) is a free/open-source version control system.       That is, Subversion manages files and directories, and the       changes made to them, over time.  This allows you to recover       older versions of your data, or examine the history of how your       data changed.</p>
<p>Subversion can operate across networks, which allows it to       be used by people on different computers.  At some level, the       ability for various people to modify and manage the same set of       data from their respective locations fosters collaboration.       Progress can occur more quickly without a single conduit through       which all modifications must occur.  And because the work is       versioned, you need not fear that quality is the trade-off for       losing that conduit—if some incorrect change is made to       the data, just undo that change. (<a href="http://svnbook.red-bean.com/en/1.4/svn.intro.whatis.html" target="_blank">more</a>)</p></blockquote>
<p>This is a pretty good explanation of what it is, but it can be hard to imagine what that actually looks like or how you&#8217;d use it in practical terms.</p>
<h2>So what can Subversion actually do for <em>you</em>?</h2>
<p><strong>It means you can have multiple developers working on a project without fear of one overwriting the other one&#8217;s work.</strong> Have you ever worked on a project with multiple developers, where everyone is working on the same codebase?</p>
<blockquote><p>&#8220;Hey Bob &#8211; I&#8217;m working on index.php &#8211; don&#8217;t touch it for now. I&#8217;ll let you know when I&#8217;m done, okay?&#8221;</p></blockquote>
<p>or how about</p>
<blockquote><p>&#8220;CRAP! Did you make changes to view.php? You blew out my work! I spent half a day working on that frakking function!&#8221;</p></blockquote>
<p>All of that goes away. Each developer can have their own version of the application or website (called <em>branches</em>), where the changes they make will not impact the other developers, and the changes can then be selectively merged into the main development area, or <em>trunk</em>.</p>
<p><strong>It also means that you have a method by which to track all of the changes you&#8217;ve made to any given file.</strong> Each time you commit changes to the file, subversion assigns that change a unique revision number. This means that if you ever need to roll a file back to a specific revision, you can easily do so with a simple command.</p>
<p><strong>A good example of where you might need to do this is where you&#8217;ve &#8220;fixed&#8221; a bug that broke something else on the site</strong> (and really, who hasn&#8217;t done that?). If you know the now-broken functionality was working before, you can roll back to a previous version of the changed file (or any version before that, if needed) to the point where the functionality wasn&#8217;t broken.</p>
<p><strong>You can also compare revisions side by side, so if you don&#8217;t want to do a full rollback, you can see what changed from one revision to the next </strong>to figure out what you (or they) did to break it so you can undo just that part or find a new solution. Plus, since each developer has their own subversion username, you can see who did what (so you know who to fire/berate/pummel/defenestrate).</p>
<p><strong>In short &#8211; whether you&#8217;re flying solo or working with a team, Subversion can help keep you sane, and bail your ass out when you need it most.</strong></p>
<h2>Sounds awesome, right? Let&#8217;s get started!</h2>
<p>Before we go any further, there are some terms that you&#8217;ll need to understand in order to grok Subversion. Don&#8217;t worry too much if they are hard to remember &#8211; we&#8217;ll be using them a lot, and they&#8217;ll become second nature to you.</p>
<blockquote><p><strong>Repository </strong>- this is the central location where Subversion keeps all of the information about your files, folders, and revisions. The repository can live on the same server as your development environment if your hosting setup has Subversion installed, or it can live somewhere completely separate.</p>
<p>If your hosting company does not have Subversion installed, you can even use a third-party Subversion host like Beanstalk or Unfuddle, whose sole purpose is to store your repository, and only your repository. Your local files are still on your hard drive, and your development files are still on your webserver.</p>
<p><strong>Working Copy </strong>- this is the set of files you work with to make changes to your code, build your application, etc. The working copy usually lives on your hard drive, and would replace the directory you upload from and download to if you were using FTP. Simply put, this is the <em>copy</em> of the files you are meant to be <em>working</em> with. You can have multiple working copies of a site for any single repository, and in fact, you would have multiple versions if you have multiple developers. Each developer would have their own working copy.</p>
<p><strong>Import</strong> &#8211; Importing in Subversion allows you to pull your existing files into a new repository. So, for example, if you have a site that&#8217;s already halfway built before you have the epiphany to use version control, you&#8217;d import your existing stuff into the repository.</p>
<p><strong>Check Out</strong> &#8211; If you already have files in a repository and need to create a new Working Copy, you&#8217;d use Check Out.</p>
<p><strong>Update </strong>- Using the Update command pulls the most recent version from the repository. If you had multiple developers working on the same files, or if you&#8217;re working from multiple computers, you&#8217;d want to make sure you update before you start making any edits to the files. If you fail to update before you make changes, you risk running into a Conflict when you Commit. (see below)</p>
<p><strong>Commit</strong> &#8211; When you&#8217;ve made changes to a file or files in your Working Copy and you&#8217;re ready to push those changes into the repository, you Commit them.</p>
<p><strong>Conflict</strong> &#8211; A Conflict occurs when there are changes on both your local version (Working Copy) of a file and the Repository of that file. For example, Sally makes changes to the file         <tt class="filename">sandwich.txt</tt> in the repository.  Harry has         just changed the file in his working copy and commits it.         Sally doesn&#8217;t update her working copy before committing it and she gets         a conflict (since Harry committed his version <em>after</em> Sally&#8217;s last Update, and Subversion therefore sees Sally&#8217;s version as out of date). More on predicting and resolving conflicts later.</p>
<p><strong>Trunk </strong>- the location within your Working Copy where your main project files live.</p>
<p><strong>Branches</strong> &#8211; individual copies of the project that allow each developer to have their own working version. Changes can be Committed without breaking the Trunk, and are then merged into the Trunk when they are deemed worthy. (More on this in the bonus section of <a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/" target="_blank">part two</a>.)</p></blockquote>
<p>The image below gives a very high level view of how Subversion works.</p>
<p><img class="aligncenter size-full wp-image-1653" title="svn" src="http://www.snipe.net/wp-content/uploads/2009/03/svn.png" alt="svn" width="550" height="500" /></p>
<p>The Repository is your gatekeeper. It is the part of Subversion that makes sure files don&#8217;t get over-written with outdated versions, and allows you to work in tandem with other developers without risking stepping on each others toes. Other than through the command line (to execute import, update, commit, and status commands) or through whatever gui application you prefer using, you never access the Repository directly.</p>
<h2>How often to Commit?</h2>
<p>This is largely a matter of preference. Some developers wait until entire classes or functions are added/edited/etc before committing a file. I personally tend to commit more often, since it gives me a more granular way of seeing what broke something else and rolling it back, etc &#8211; but <strong>the only wrong way to Commit is to not Commit at all</strong>. You do not need to commit every time you change every tiny thing, though. For example, if I had to do some copy changes, I wouldn&#8217;t Commit after changing each word. The revisions would be so broken down, it would be hard to find important changes in the sea of revisions.</p>
<p>You (and your team, if you&#8217;re working in a group) will find a Commit frequency that works for you, as you become more comfortable using Subversion, so don&#8217;t sweat it too much in the beginning.</p>
<p>Now that you know the lingo and what it <em>does</em>, you need to decide how you&#8217;re going to set up your subversion workflow. <strong><a href="http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/">Check out the second part in this series</a></strong>!</p>


<p>Possibly related posts:<ol><li><a href='http://www.snipe.net/2009/03/getting-started-with-subversion-part-two/' rel='bookmark' title='Permanent Link: SVN Working Copies and Repository Locations'>SVN Working Copies and Repository Locations</a> <small>In part one of this series, you learned what Subversion...</small></li>
<li><a href='http://www.snipe.net/2010/07/introducing-fbmhell-com/' rel='bookmark' title='Permanent Link: Introducing FBMHell.Com'>Introducing FBMHell.Com</a> <small>Good news, everyone! My compulsive need to make websites and...</small></li>
<li><a href='http://www.snipe.net/2008/07/dropbox-versus-foldershare-for-syncing-files-between-computers/' rel='bookmark' title='Permanent Link: Dropbox versus FolderShare for Syncing Files Between Computers'>Dropbox versus FolderShare for Syncing Files Between Computers</a> <small>In my eternal quest to sync up all of the...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/03/getting-started-with-subversion/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Questions to Ask Before Starting a Project</title>
		<link>http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/</link>
		<comments>http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 18:30:40 +0000</pubDate>
		<dc:creator>snipe</dc:creator>
				<category><![CDATA[Featured]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[planning]]></category>
		<category><![CDATA[project management]]></category>
		<category><![CDATA[webdev]]></category>

		<guid isPermaLink="false">http://www.snipe.net/?p=1518</guid>
		<description><![CDATA[We&#8217;re all human, and we all make mistakes and overlook important details sometimes &#8211; but the thing I can&#8217;t stand is making the same mistake twice. To prevent making the same mistakes twice, I have an ever-evolving list of questions that I use to create the tech brief for new projects. In the hopes that [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: left; margin-right: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F02%2Fquestions-to-ask-before-starting-a-project%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.snipe.net%2F2009%2F02%2Fquestions-to-ask-before-starting-a-project%2F&amp;source=snipeyhead&amp;style=normal&amp;service=bit.ly&amp;service_api=R_92bd97f4f8b9fa8a40675b36ea291223" height="61" width="50" /><br />
			</a>
		</div>
<p>We&#8217;re all human, and we all make mistakes and overlook important details sometimes &#8211; but the thing I can&#8217;t stand is making the same mistake twice. To prevent making the same mistakes twice, I have an ever-evolving list of questions that I use to create the tech brief for new projects.</p>
<p><span id="more-1518"></span>In the hopes that this saves you some of the headaches I&#8217;ve had to suffer through, I&#8217;m making my list available to you. Some of these questions don&#8217;t have yes-or-no answers, and require additional discussion &#8211; but that&#8217;s okay. The point is that they were asked in the first place, and you&#8217;re including them in your plan.</p>
<p>Every time I start a new project, I run through this list of questions with the project managers or client, one by one, until I have all the answers I need &#8211; and after every project, I revisit this list of questions to see if there is anything I should have asked up-front that would have made the project go more smoothly.</p>
<p>Yes, this is long. But better to spend the time asking questions now and save yourself days or weeks worth of work later. Also, there may be whole sections you can skip entirely if they don&#8217;t pertain to your project &#8211; just be sure they really and truly don&#8217;t before you give them the brush-off.</p>
<p><span style="color: #db2c0f;"><strong>I will be out of the country for a week in <a href="http://www.snipe.net/2009/02/getting-to-know-belize/">Belize</a> starting oh-my-god-o&#8217;clock tomorrow morning, so this post is my gift to all of you who are stuck working on projects while I&#8217;m on a beach in Belize sipping Mai Tais. Enjoy!</strong></span></p>
<h2>Basics:</h2>
<p><strong>What is the main purpose of this website? </strong> General overview, specifically addressing goals the website or application hopes to accomplish.  Online sales, brand reinforcement, etc. This answer doesn&#8217;t have to be long, but I find it helpful to include them here so that the tech process always compliments and enhances achieving those goals.</p>
<p><strong>How “big” is this project? </strong>This is a generalized question and doesn&#8217;t require specifics most of the time &#8211; is it a 4 page site, a 40 page site, or a 400 page site. This helps to understand the basic scope. The answers to this question should include:</p>
<ol>
<li>Approximate number of screens/pages in the website/application</li>
<li>What are the basic functions of the site? i.e.Registration, Game, Ecommerce, Search, catalog, photo upload, discussion boards, voting, etc</li>
</ol>
<p><strong>What data will be stored/accessed locally?</strong> Will the website/application require a database? You don&#8217;t need to make a concrete decision about what kind of database at this stage &#8211; just knowing there needs to be one is enough.</p>
<p><strong>How will the site be updated?</strong></p>
<ol>
<li>Will it require a CMS?</li>
<li>What content is dynamic vs static?</li>
<li>How frequently is the data updated (hourly, daily, weekly, monthly, periodically)?</li>
<li>Where will the data come from? (client or administration back-end of any kind)</li>
<li>Who is responsible for updating the data?</li>
</ol>
<p><strong>What are the reporting needs?</strong></p>
<ol>
<li>Basic site traffic?</li>
<li>Will it require content‐specific reporting? (i.e.  how many new users signed up between specific dates, etc.)</li>
</ol>
<p><strong>Will there be a mobile/WAP component?</strong> The answer to this question is usually &#8220;no&#8221; for the projects I work on, but it&#8217;s important to know in advance. Phone browsers these days are so similar to desktop web browsers that creating a WAP version of a site is far less trouble than it used to be, when you had to take black-and-white screens into consideration, etc.</p>
<p><strong>What operating systems, browsers and browser versions are we targeting? </strong>Do we care about IE6 or other older browsers (pleasesaynopleasesaynopleasesayno)?</p>
<p><strong>Are there additional considerations such as printer‐friendly versions, BOBBY/ADA‐compliance, age verification or other that we need to be aware of?</strong> Make sure you&#8217;re familiar with the <a href="http://www.coppa.org/comply.htm" target="_blank">COPPA-compliance</a> guidelines before you create a site or application that asks for user information and doesn&#8217;t screen for the user&#8217;s age.</p>
<h2>Domain Name &amp; Hosting:</h2>
<p>Where will this application/website be developed? If it will be developed on a different machine than its final hosting situation, we must provide time for file transfers, additional QA once the site is moved, etc.</p>
<p><strong>Where will this application/website be hosted?</strong> If we are hosting, will it require a dedicated host, or virtual hosting environment?</p>
<p><strong>If the client is hosting, have we confirmed that their server supports the technology we intend to use? </strong>This is a key point, but one that is often overlooked. If you&#8217;re expecting PHP on a Linux server and the client has an IIS box without PHP or MySQL, you need to know that up-front, so you can decide how to handle it. Maybe the client installs PHP and MySQL, or maybe you do the application in ASP &#8211; either way, the answer here has a huge impact on how you proceed, before even a line of code has been created, so you need to know that right away.</p>
<p><strong>Also, if possible, try to obtain access to the hosting server as soon as possible, so you can run some basic configuration tests.</strong> One follower on Twitter remarked that the client confirmed that they had PHP and MySQL (on IIS), but the environment was not set up to allow PHP to talk to MySQL. Not something that&#8217;s impossible to fix, but if you&#8217;re pushing it close on your deadline, you want to know that right away so you can have the hosting company make whatever changes you need with plenty of time to spare. A simple phpinfo() would have spit out everything you needed to know (not to rub anything in, <a href="http://twitter.com/derekobrien">@derekobrien</a>!). To be fair, I might have just assumed the same way he did, so it&#8217;s important to remind ourselves to check <em>everything</em> up front.</p>
<p>I would imagine <em>that</em> hosting blunder (and that was a blunder &#8211; who sets up PHP and MySQL but forgets to allow them to talk to each other?) is hopefully uncommon, but if you&#8217;re using libraries or modules like PEAR, cURL, imagemagik, the GD library, and so on, you&#8217;d best confirm that everything is all set up before you move forward.</p>
<p>In @derekobrien&#8217;s case, they weren&#8217;t granted server access until last minute, so he was caught off-guard by this. One way to protect yourself against issues like this is to <strong>set clear milestones in the tech brief or feature scope</strong> that you create based on these questions (which the client signs), <strong>with the caveat that if the client doesn&#8217;t provide server access by xyz date, the launch date can and will be pushed back, and additional budget may be required</strong> to get things up to snuff.</p>
<p>@derekobrien also included a clause in the fine print that says &#8220;<span class="status-body"><span class="entry-content">If your server admin is a fool we reserve right to point and laugh at you.&#8221; I generally consider that implied, but it&#8217;s just as good in writing <img src='http://www.snipe.net/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /><br />
</span></span></p>
<p><strong>Will it require its own domain name?</strong></p>
<ol>
<li>If yes, will the client provide, or will we?</li>
<li>If yes, we must allow time for propagation</li>
<li>If no, at what url will this live?  (sub‐domain of noise, sub‐domain of primary client domain, etc)</li>
<li>If sub‐domain of client, we must provide time to work with the client’s IT dept to configure DNS settings</li>
</ol>
<p><strong>Will we need to manage any email accounts for the project?</strong> If so, what are the account names, and are they pop3, IMAP or forwarding accounts? Who will be checking them?</p>
<p><strong>Will this project be migrated to the final hosting location from an existing location?</strong> If so, a migration plan (including e‐mail address, DNS, content, database, etc migration should be created.)</p>
<p><strong>Is this project ongoing, or for a limited time?</strong> If for a limited time:</p>
<ol>
<li>What ongoing service or support will be required? Webmaster support email? Unsubscribe administration?</li>
<li>What is the plan for the domain name and/or website once the project is over? Do we keep hosting the project? Do we let the domain name expire, or simply redirect it to the main client site?</li>
</ol>
<p><strong>If the project is hosted on a server we are managing, server setup should include:</strong></p>
<ol>
<li>Realistic bandwidth estimate. We should confirm with the hosting company we select that if we surpass anticipated bandwidth, there will be no interruption in services. (Extra charges will apply, but service should NOT be suspended for bandwidth issues.)</li>
<li>Maximum throughput configuration available. There is generally an insignificant additional monthly charge for this.</li>
<li>If the project relies heavily on mySQL, we should consider making adjustments to the my.conf file to tune the database configuration for optimal settings.  (I.e. if the database queries are largely SELECTs, optimize for SELECTS, etc.)</li>
<li>Fine‐tune the apache httpd.conf file to allow for maximum concurrent connections</li>
</ol>
<p><strong>Backup and Restore</strong> &#8211; if we are hosting the project on a server we manage, dedicated or virtual, some level of backup must be implemented for every account.Backup should include files, user data, and applicable databases &#8211; and a restoration plan should be created, should catastrophic system failure occur.  The backup process MUST be tested during non-emergency circumstances. An untested backup is no better than no backup at all.</p>
<h2>Flash/Video:</h2>
<p><strong>Will there be substantial flash or video aspects to this project? </strong> If yes, we should consider hosting arrangements and ensure we have the bandwidth available and ensure the throughput is set up to handle maximum traffic.</p>
<p><strong>If the primary site or application content is Flash‐based, we must budget time to create an SEO‐optimized version of the page in plain text.</strong> Copy will need to be obtained from the client, and MUST accurately reflect the true content of the Flash. Attempts to keyword bomb or deceive search engines will result in being blocked from the search engine altogether.</p>
<h2>Email:</h2>
<p>Will the application or website be communicating with users via email or text messages? If so, we may wish to consider outsourcing email/text messaging for ease of management and to circumvent potential SPAM blacklisting issues. This decision needs to be made on a case‐by‐case basis.</p>
<h2>Integration:</h2>
<p><strong>Will the application or website be required to interface (push or pull) with a third party system or service?</strong> If yes, documentation on the integration should be obtained at the beginning of the development planning so any potential obstacles can be addressed.</p>
<h2>User and Content Filtering:</h2>
<p>In projects where users will be contributing or creating content using the tools we develop, is there a need to build in support for:</p>
<ol>
<li>Banning or blocking specific users by username or IP address?</li>
<li>Moderating content before it is displayed publicly or at least the ability for and administrator to delete to unapproved content to remove it.</li>
</ol>
<p><strong>If yes, by what method will offensive material be flagged as offensive? </strong>Does the application require a “report this content” function, and if so, what needs to happen when content is flagged? Who is notified, and what actions do they take? Should the system automatically unapprove content that is flagged many times?</p>
<p><strong>Scrubbing or filtering bad words. </strong>If yes, what action should be taken if an offensive word is found? (i.e. is the offensive word replaced with ****, is it rejected by the system, etc.)</p>
<h2>Pre‐Existing &amp; New Content:</h2>
<p><strong>Does this project require us to import existing client data or content into the application?</strong> If so, in what format will the client be providing this data? (Excel, csv, Word, etc.) Adequate time must be allowed to scrub the data and create custom import scripts, and then to QA the imported data.</p>
<p><strong>If content being provided runs on a timeline</strong> (such a daily quiz, where a new question is presented every day), do we need to set up an alert system that notifies an administrator if content is about to or has already run out?</p>
<p><strong>Will there be ongoing new content that would be appropriate for use in an RSS feed? </strong>(Events, articles, blog content, etc.)</p>
<h2>User Support:</h2>
<p><strong>What options does the user have if they have experiencing a problem with the application or website?</strong> Is there a Help/Tech FAQ page, a contact page, or some other way that they can reach out to us for assistance? What email address should be used for replies?</p>
<p>If we are going to be sending the user emails or text messages, we should outline the nature and frequency of this communication very clearly on a page available to the user.</p>
<p>A privacy policy should be built into the site or application whenever we are collecting any information from the user.</p>
<p><strong>How does the user opt out? </strong>We should make it very easy for a user to globally opt out of our communications. Where applicable, on the opt‐out form, we should ask the user why they chose to opt out so we can better tailor future communications. Any email or text communication should require a double‐opt‐in confirmation.</p>
<h2>Statistics &amp; Reporting:</h2>
<p><strong>What aggregate statistical reporting needs to be done on this website/application?</strong> (Omniture, Google Analytics, Refresh Analytics for FB apps)</p>
<p>Do we plan on implementing click heatmap technology and/or multiple page versions for conversion rate evaluations?</p>
<h2>Marketing and Promotion:</h2>
<ol>
<li>What media is driving traffic to this site? Online/Offline?</li>
<li>What is the schedule for that media?</li>
<li>What is the total exposure?</li>
<li>Are there any specific activities that would drive spikes in traffic?  Superbowl Ad, etc.</li>
</ol>
<div class="wp-caption alignright" style="width: 56px"><a href="http://www.snipe.net/wp-content/uploads/2009/02/tech_questionnaire.pdf"><img src="http://www.snipe.net/wp-includes/images/crystal/document.png" alt="Download the PDF" width="46" height="60" /></a><p class="wp-caption-text">PDF</p></div>
<p>So, that&#8217;s my list. After all of the questions are answered (which usually doesn&#8217;t happen all at once &#8211; it very often requires a bit of back and forth with the client and project managers), I create a tech brief or feature scope document based on the answers I from this questionnaire.</p>
<p>If the client doesn&#8217;t know the answers to some of the questions (&#8220;are you running linux or Microsoft?&#8221;), I do my best to find out who does. If the client can&#8217;t decide on something &#8220;do you need a content management system?&#8221;), I advise my project managers that we have to be given authority to make that decision for them. NO development will be done until the tech brief is done. Period.</p>
<p>I then get the client to SIGN the scope/brief so that they agree, in writing, to everything we&#8217;ve decided &#8211; and more importantly, what I expect from them, <em>when</em> I expect it, and what <em>they</em> can expect if I don&#8217;t get it on time &#8211; that way when they don&#8217;t deliver server access or copy/creative assets on time, there are no surprises when I tell them that we are not going to make their deadline.</p>
<p><strong>The tech brief is written to protect both parties, the client and the service provider. </strong>When done properly, it helps manage client expectations, and protects you from being expected to deliver something that was not in the scope. Everyone knows what happens next, how much it will cost, and what the final product is supposed to do.</p>
<p>I&#8217;ll be updating this as new screw-ups happen and we (hopefully) continue to learn from them.</p>
<p>Leave your own in the comments, and feel free to download the (slightly longer) PDF version if it will help you do battle with middle management that doesn&#8217;t understand why you have to take so much time to plan your projects. <img src='http://www.snipe.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>


<p>Possibly related posts:<ol><li><a href='http://www.snipe.net/2008/07/gui-planning-made-easy-with-the-pencil-project/' rel='bookmark' title='Permanent Link: GUI Planning Made Easy with the Pencil Project'>GUI Planning Made Easy with the Pencil Project</a> <small>Designing a good GUI is arguably one of the most...</small></li>
<li><a href='http://www.snipe.net/2009/10/funky-characters-in-html-mail-using-phpmailer/' rel='bookmark' title='Permanent Link: Funky characters in HTML mail using PHPMailer'>Funky characters in HTML mail using PHPMailer</a> <small>While working on a client project, I ended up having...</small></li>
<li><a href='http://www.snipe.net/2009/01/cheap-or-free-website-status-monitoring/' rel='bookmark' title='Permanent Link: Cheap or Free Website Status Monitoring'>Cheap or Free Website Status Monitoring</a> <small>Its a call you never, ever want to get. &#8220;My...</small></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://www.snipe.net/2009/02/questions-to-ask-before-starting-a-project/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
