<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Missing Features</title>
	
	<link>http://www.missingfeatures.com</link>
	<description>Web sites, web apps, software, and usability</description>
	<lastBuildDate>Mon, 06 Feb 2012 17:10:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/missingfeatures" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="missingfeatures" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Inside the Zujava.com Drupal stack</title>
		<link>http://www.missingfeatures.com/2012/02/05/inside-the-zujava-com-drupal-stack/</link>
		<comments>http://www.missingfeatures.com/2012/02/05/inside-the-zujava-com-drupal-stack/#comments</comments>
		<pubDate>Sun, 05 Feb 2012 20:13:59 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[zujava]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=527</guid>
		<description><![CDATA[For the last few months I have been working on a Drupal project. The site just launched last month and is called Zujava. I posted a technical overview of the site over at the Zujava blog, but wanted to go into a bit more detail on the Drupal stack here. Zujava.com is built using Drupal 7, and [...]]]></description>
			<content:encoded><![CDATA[<p>For the last few months I have been working on a <a href="http://drupal.org/start">Drupal</a> project. The site just launched last month and is called <a href="http://www.zujava.com/">Zujava</a>. I posted a <a title="Inside Zujava: A Technical Overview" href="http://www.zujava.com/blog/2012/02/05/inside-zujavacom-a-technical-overview">technical overview of the site</a> over at the <a title="Zujava blog" href="http://www.zujava.com/blog/">Zujava blog</a>, but wanted to go into a bit more detail on the Drupal stack here.</p>
<p>Zujava.com is built using Drupal 7, and makes heavy use of fields/entities. The main feature of the site is creating an article. An article can be made up of any number of sections. We have different section types available (like free text, a link list, Amazon products, eBay, etc.). To create an article you give it a title and an introduction and then add, order, and customize any number of sections  you want.</p>
<p>Each section is a <a href="http://drupal.org/project/field_collection">field collection</a> of custom fields added to the content types. I used custom code to build up the article display, section controls (adding, editing, ordering, etc), and blocks for the site. The home page is a collection of blocks and the article side bar are still more blocks. Nearly all of the blocks are created at the code level and I use custom logic to effect their display.</p>
<p>When possible I am creating content with <a href="http://drupal.org/node/930760">render arrays</a>, but this is probably only 15% of the time. I found the lack of documentation on render arrays a challenge when starting development.</p>
<p>We had two priorities for the site during development:</p>
<ol>
<li>Make is really fast.</li>
<li>Make it faster.</li>
</ol>
<p><strong>The dirty little secret of Drupal performance is you have to use less modules</strong>. They don&#8217;t tell you this in Drupal school. I took a rather militant approach to module selection during development and refused to add any module to the site unless absolutely necessary. It&#8217;s very easy to handle placement and appearance logic in Drupal 7, so I don&#8217;t use <a href="http://drupal.org/project/panels">Panels</a> or <a href="http://drupal.org/project/context">Context</a>. The only page that needed <a href="http://drupal.org/project/views">Views</a> was the <a href="http://www.zujava.com/blog">blog list page</a>, so I wrote a few custom lines of code for that. I will hold out against Views as long as possible. (They are all great modules, it&#8217;s just the code bases are huge.)</p>
<p>For simple tasks like adding the Google Analytics tracking code I just used custom logic. The site makes heavy use of hook_cron for the billing system and the integration with Google Analytics (to download traffic data for individual pages to show to page authors). At some point, I will need to upgrade to better batch/job handling. The fantastic <a href="http://drupal.org/project/amazon">Amazon Module</a> made Amazon integration a breeze.</p>
<p>Making search engine sitemaps work well is hard, so I had to use the <a href="http://drupal.org/project/xmlsitemap">XML sitemap</a> module. For spam I&#8217;m using <a href="http://drupal.org/project/captcha">CAPTCHA</a>, though I expect that will need an upgrade to <a href="http://www.mollom.com">Mollon</a> at some point.</p>
<p>The site runs on <a href="http://getpantheon.com">Pantheon&#8217;s</a> multi-tenant V2.0 platform.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2012/02/05/inside-the-zujava-com-drupal-stack/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Migrating Droptopia to Pantheon</title>
		<link>http://www.missingfeatures.com/2011/06/19/migrating-droptopia-to-pantheon/</link>
		<comments>http://www.missingfeatures.com/2011/06/19/migrating-droptopia-to-pantheon/#comments</comments>
		<pubDate>Sun, 19 Jun 2011 21:41:29 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[droptopia]]></category>
		<category><![CDATA[pantheon]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=504</guid>
		<description><![CDATA[Droptopia is a visual portfolio of the best Drupal shops anywhere. (More on Droptopia.) It&#8217;s a really easy way to find a great Drupal shop by budget (say over $50,000) and location (say for Chicago). We have lots of cities listed. I wanted to move Droptopia to better hosting at about the same time I [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.droptopia.com/">Droptopia</a> is a visual portfolio of the best Drupal shops anywhere. (<a href="http://www.missingfeatures.com/2011/05/25/finding-drupal-shops-with-droptopia/">More</a> on Droptopia.) It&#8217;s a really easy way to find a great Drupal shop by budget (say <a href="http://www.droptopia.com/over-50000">over $50,000</a>) and location (say for <a href="http://www.droptopia.com/chicago">Chicago</a>). We have lots of <a href="http://www.droptopia.com/cities">cities listed</a>.</p>
<p>I wanted to move Droptopia to better hosting at about the same time I found out about <a href="http://getpantheon.com/">Pantheon</a> Drupal. Pantheon isn&#8217;t Drupal hosting, it&#8217;s a <em>platform </em>for Drupal. Baked into its service is a load of developer goodies like <a href="http://www.varnish-cache.org/">Varnish</a>, <a href="http://memcached.org/">Memcached</a>, <a href="http://lucene.apache.org/solr/">Apache Solr</a>, and <a href="http://jenkins-ci.org/">Jenkins</a>. Code is managed in a hosted Git repository and you get three sites for each Drupal site &#8212; dev, stage, and production &#8212; complete with 1-click deployment scripts you run from the web dashboard to manage releases.</p>
<p>Migrating to Pantheon was dead-simple. The first step was to tar up a dump of the database and the web root. Then I used the Pantheon import wizard and pointed it to the tar file:</p>
<div id="attachment_505" class="wp-caption alignnone" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/06/import-screen-start.png"><img class="size-medium wp-image-505" title="The Pantheon wizard for importing a new site" src="http://www.missingfeatures.com/wp-content/uploads/2011/06/import-screen-start-300x216.png" alt="The Pantheon wizard for importing a new site" width="300" height="216" /></a><p class="wp-caption-text">The Pantheon wizard for importing a new site</p></div>
<p>Once you hit the &#8220;Confirm&#8221; button you get taken to a cool log screen that shows you the progress of the import in real-time. The Droptopia export was over 300 MB and Pantheon had the site completely set up in less than four minutes.</p>
<p>The best part was Pantheon noticed during the import that my site was running Drupal 6.20 core and <strong>did the Drupal core upgrade for me while the site was being imported</strong>. That is ridiculously slick.</p>
<p>I&#8217;ve pushed a few minor code updates using the deployment workflow. So far everything is easy and the site is running great. Drupal just got a lot less painful.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/06/19/migrating-droptopia-to-pantheon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding Drupal shops with Droptopia</title>
		<link>http://www.missingfeatures.com/2011/05/25/finding-drupal-shops-with-droptopia/</link>
		<comments>http://www.missingfeatures.com/2011/05/25/finding-drupal-shops-with-droptopia/#comments</comments>
		<pubDate>Thu, 26 May 2011 02:47:55 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Software Industry]]></category>
		<category><![CDATA[droptopia]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=493</guid>
		<description><![CDATA[I really like the web designer visual portfolio site Sortfolio by 37 Signals. As expected it&#8217;s a great concept executed brilliantly. It is laser focused on what a person cares about when they are finding a web studio to work with: how much do I want to spend and where am I? The problem with [...]]]></description>
			<content:encoded><![CDATA[<p>I really like the web designer visual portfolio site <a href="http://sortfolio.com/">Sortfolio</a> by 37 Signals. As expected it&#8217;s a great concept executed brilliantly. It is laser focused on what a person cares about when they are finding a web studio to work with: how much do I want to spend and where am I?</p>
<p>The problem with using Drupal is you get so intoxicated with the modular architecture it provides that you start seeing any web site as a Drupal implementation waiting to happen. I was bored one weekend when I thought, <em>hey, I can build a Sortfolio in Drupal</em>.</p>
<p>I got to work building the site and populating it with Drupal shops. I found a great design studio called <a href="http://www.statik.be/">Statik</a> that took pity on my poor design skills and provided an excellent theme for the site.</p>
<p><a href="http://www.droptopia.com/">Droptopia</a> was born:</p>
<div id="attachment_494" class="wp-caption alignnone" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/20110504-droptopia-home-page-filter-exposed.png"><img class="size-medium wp-image-494" title="Droptopia: Find the perfect Drupal shop for your next project" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/20110504-droptopia-home-page-filter-exposed-300x262.png" alt="Droptopia: Find the perfect Drupal shop for your next project" width="300" height="262" /></a><p class="wp-caption-text">Droptopia: Find the perfect Drupal shop for your next project</p></div>
<p>As of this writing Droptopia lists over <strong>100 amazing Drupal shops</strong> specializing in everything from <a href="http://www.droptopia.com/shop/mustardseed-media-inc">churches</a> to the <a href="http://www.droptopia.com/shop/development-geeks">Omega theme</a> to <a href="http://www.droptopia.com/shop/achieve-internet">Enterprise Drupal</a>. Know a great shop we don&#8217;t have? <a href="http://www.droptopia.com/suggest">Let us know</a>. Work at a great shop we don&#8217;t list? <a href="http://www.droptopia.com/add">Create a portfolio for free</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/25/finding-drupal-shops-with-droptopia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A better Drupal content list</title>
		<link>http://www.missingfeatures.com/2011/05/25/a-better-drupal-content-list/</link>
		<comments>http://www.missingfeatures.com/2011/05/25/a-better-drupal-content-list/#comments</comments>
		<pubDate>Thu, 26 May 2011 02:20:10 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[drupal module]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=487</guid>
		<description><![CDATA[The built-in Drupal content list is pretty simple. You get two filters &#8212; one for node type and the other for status &#8212; and a handy bulk update control. When we show a client new to Drupal the content list they quickly come to realize this page isn&#8217;t very friendly. There really isn&#8217;t much you [...]]]></description>
			<content:encoded><![CDATA[<p>The built-in Drupal content list is pretty simple. You get two filters &#8212; one for node type and the other for status &#8212; and a handy bulk update control.</p>
<p>When we show a client new to Drupal the content list they quickly come to realize this page isn&#8217;t very friendly. There really isn&#8217;t much you can do to enhance this page. Take it or leave it.</p>
<p>There are several alternatives, like the excellent <a href="http://drupal.org/project/cmf">Content Management Filter</a> module. You get loads of helpful filters and you can set the total number of rows to view in the results set:</p>
<div id="attachment_489" class="wp-caption alignnone" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/cmf.png"><img class="size-medium wp-image-489" title="The Content Management Filter Drupal module" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/cmf-300x262.png" alt="The Content Management Filter Drupal module" width="300" height="262" /></a><p class="wp-caption-text">The Content Management Filter Drupal module</p></div>
<p>You can also setup the <a href="http://drupal.org/project/views">Views</a> and <a href="http://drupal.org/project/views_bulk_operations">Views Bulk Operations</a> modules to add in the bulk control from the content list to content listings you create as views. It&#8217;s pretty flexible.</p>
<p>But I wanted a drop-in solution that was a bit sexier than the Content Management Filter &#8212; complex filters are <em>so 1999</em> &#8212; and easier to install and setup. So I created the <a href="http://drupal.org/project/contentfinder">Content Finder module</a>:</p>
<div id="attachment_490" class="wp-caption alignnone" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/content-list-full.png"><img class="size-medium wp-image-490 " title="The Drupal Content Finder module" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/content-list-full-300x261.png" alt="The Drupal Content Finder module" width="300" height="261" /></a><p class="wp-caption-text">The Drupal Content Finder module</p></div>
<p>The module is designed to be dead simple. You get just a single text box. That is it. For ease of  use, the module always remembers the last sort and search you did. The content list will look <em>exactly</em> the way you left it when you return, be that five minutes later or five days.</p>
<p>You can also use specific filters in the search box &#8212; each called an &#8220;axis&#8221; &#8212; for <strong>type, status, created, createdafter, and createdbefore</strong>. Examples:</p>
<ul>
<li>A search for <strong>at</strong> returns all nodes with &#8220;at&#8221; in the title.</li>
<li>A search for <strong>type:page</strong> returns all nodes of type &#8220;page&#8221;.</li>
<li>A search for <strong>status:published at</strong> returns all published nodes with &#8220;at&#8221; in the title.</li>
<li>A search for <strong>createdafter:4/8/2011</strong> returns all nodes created after April 8th, 2011.</li>
<li>A search for <strong>status:published createdafter:4/8/2011 at</strong> returns all published nodes with &#8220;at&#8221; in the title related after April 8th, 2011.</li>
</ul>
<p>Content Finder is by no means as good as the Content Management Filter module. But it&#8217;s a start. We already have a great <a href="http://drupal.org/node/1164668">patch in the queue</a> for adding in auto-suggest for search axes as you type, and more enhancements are on their way.</p>
<p><a href="http://drupal.org/project/contentfinder">Check it out</a> and let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/25/a-better-drupal-content-list/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In which I build something that doesn’t make much money (Act 3)</title>
		<link>http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-that-doesnt-make-much-money/</link>
		<comments>http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-that-doesnt-make-much-money/#comments</comments>
		<pubDate>Wed, 11 May 2011 16:31:07 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software Industry]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[web apps]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=445</guid>
		<description><![CDATA[Note: This is part three of a three part series about the single founder startup I have been working on over the last two years. Check out part 1 and part 2. At this point I had one project fail I didn’t control and one project fail I did control. Once I had decided to [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: This is part three of a three part series about the single founder startup I have been working on over the last two years. Check out </em><em></em><em><a title="Act 1" href="http://www.missingfeatures.com/2011/05/my-startup-failure-in-three-acts">part 1</a></em><em> and </em><em><a title="Act 2" href="http://www.missingfeatures.com/2011/05/in-which-i-build-something-i-dont-use">part 2</a></em><em>.</em></p>
<p>At this point I had one project fail I didn’t control and one project fail I did control. Once I had decided to abandon that project I was frustrated and aimless. In these times I tend to do two things: drink beer and write code (not necessarily in that order). I didn’t know what to do next.</p>
<p><strong>And then there was Drupal</strong></p>
<p>The projects for the firm I work with part time – Urban Insight – were increasingly based on <a href="http://drupal.org/">Drupal</a>. Drupal is a powerful, modular, and popular framework for developing a web site (less a framework for developing a web app). The community supporting Drupal is probably its greatest asset, quickly followed by the massive number of modules available for free to extend functionality, and the sheer beauty, power, and massive pain of the chaotic hook system architecture.</p>
<p>Drupal was surging ahead in popularity and within a very short time Urban Insight had a pile of Drupal-powered client sites that we maintained. <strong>I believe in being a zealous steward of technology for my clients</strong>. In Drupal, this means ensuring the Drupal configuration remains secure and tuned, and that security patches are installed quickly.</p>
<p>With Drupal’s power comes complexity, and this complexity can be hard to manage. When you have dozens of Drupal sites it’s hard to keep track of the core version, module list, and configuration of each one, and keep it accurate at all times.</p>
<p>So I had this thought. If I built a little web app dashboard to track all of our Drupal sites it would give us a single place to monitor the live configuration of every site we had. I threw together some mock-ups and on the (as I later learned) wise advice of <a title="Read it" href="http://37signals.com/rework/">Rework</a> I tore out features that would take too long or were too hard (<strong>which really translated into hard to use</strong>, as I later discovered), and focused on what I could build in three months.</p>
<p>I got an alpha working and showed it to our CEO. He said he saw its value and committed to being the first customer, when it was ready to launch. I was excited. When I started to build this I honestly didn’t think it had potential as a business. I was just building it to make my life easier at Urban Insight.</p>
<p><strong>Go marketing young man</strong></p>
<p>I wasn’t going to make the same mistakes I made with my <a href="http://www.missingfeatures.com/2011/05/in-which-i-build-something-i-dont-use/">previous effort</a>, so I tried to focus on marketing. I did learn how important the marketing was, but I had not learned <em>how to market</em>.</p>
<p>I remembered some advice I read previously about design: all designers start by ripping something off. So I ripped something off. For the home page, I found one I really liked (<a title="As of this writing" href="http://pulseapp.com/">Pulseapp</a> for the curious) and started my design by ripping of theirs. You aren’t doing anything unsavory in starting by copying because in the course of adapting it to your needs it becomes your own.</p>
<p>The other neat thing that happened in the process of copying is that as you replicate specific components of a design you start to understand <strong>why they did this little thing in this certain way</strong> and you have this nice <em>aha </em>moment or clarity. <strong>I am a lousy designer but starting by copying helped me design one order of magnitude less lousy</strong>.</p>
<p>I used this technique for the home page (thank you Pulseapp!), the tour page (thank you 37 Signals!), and the tips page (thank you again 37 Signals).</p>
<p><strong>Do only what is important, or less really is less</strong></p>
<p>I didn’t build payment integration until after the beta. I lied really. I launched the beta, said you could sign up for a paid place once we left beta but with no intention of building it unless people used the damn thing. I wasn’t wasting time.</p>
<p>I also resisted the urge to build an administrative app. You always need to build some kind of for admins to look at logs, see account information, and do various account management tasks. But these admin apps can be a real boondoggle. Giant charts and graphs are cool to look at, but do they actually help me get stuff done faster?</p>
<p>Using some advice I got (yet again) from Rework I decided to let need define development of the admin app. When a support request came in I forced myself to build an admin feature that would speed up troubleshooting the issue the <em>next </em>time it happened. This meant it took slightly longer to address a support issue the first time around, but we are talking only hours, not days or weeks.</p>
<p>With this pure need-driven approach to development the time it took to handle troubleshooting dropped tremendously. When an issue came in, I had a screen or a link that helped me identify the issue in a few seconds, instead of a few minutes of manual database hunting and pecking. It also led me to bake in as much self-help as possible into the app when things went wrong. When the tool encountered a specific issue with a user I was now able to have it return specific steps to address the issue. The most common issues really addressed 80%+ of the issues being encountered.</p>
<p>I had little support to triage, and when I did, it was easy to handle.</p>
<p><strong>Droptor is born</strong></p>
<div id="attachment_446" class="wp-caption alignright" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/droptor.png"><img class="size-medium wp-image-446" title="The Droptor home page" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/droptor-300x274.png" alt="The Droptor home page" width="300" height="274" /></a><p class="wp-caption-text">The Droptor home page</p></div>
<p>I finally had it. A tool I needed, a tool I used, a tool others found useful, and a design that didn’t suck (too much). I launched the beast in beta, released the <a href="http://drupal.org/project/droptor">module on Drupal.org</a>, got some users, and planned for launch.</p>
<p>I baked in payment processing, planned for launch day marketing, and ran a promotion for my current beta users to sign up before launch for a steep, lifetime discount. Several users took advantage of the offer.</p>
<p>Droptor <a href="http://www.droptor.com/releasenotes">launched</a> on July 17, 2010.  I released three major upgrades over the course of the next five months, culminating in a Droptor 3.0 release on January 2, 2011.</p>
<p><strong>The product needs to scale in revenue</strong></p>
<p>I imagined the Droptor customer base as being in two distinct groups that I would reach one after the other. The first group would be firms like Urban Insight, Chapter Three, and Phase 2 that do a lot of Drupal work and have many Drupal sites they need to maintain and support on behalf of their clients. There are easily <a title="The easiest way to find a Drupal shop by budget and location" href="http://www.droptopia.com">more than 100</a> of these kinds of customers.</p>
<p>The second group of users would be organizations – like a university or a large company – where Drupal has grown like an infection from being used on a little project they had to put together quickly two years ago to conquering the home page. I’ve personally spoken to these IT departments and heard this story over and over again.</p>
<p>When I decided to open up Droptor to other users, I thought I had a clear idea of the customer base and the potential size of that base. I thought it was large enough to be a first step to build a small business.</p>
<p>But my assumption that a firm would have many Drupal sites to support on behalf of their clients proved incorrect. It now appears far more common that a firm will hand over a finished project to a client-side IT department. My plan was to use the revenue from the first customer group to reach the far harder second group was not working.</p>
<p><strong>Marketing is hard</strong></p>
<p>Yet again, I found marketing very hard. I ran a Google Adwords campaign for months that did drive traffic to the site. This kept a steady pace of free sign ups coming in, but after some time it was clear these were the wrong users. These folks were going to Google to figure out how to setup a Drupal site, and were using Droptor to help them figure that out.</p>
<p>I certainly don’t have any issues with these folks using Droptor for this purpose, and I would never stop them. But they aren’t the users who are ever going to set up a paid plan and track dozens on Drupal sites for their work. It wasn’t worth paying for customers that wouldn’t increase revenue. I stopped the Google Adwords campaign.</p>
<p>Being part of the Drupal community was probably the most valuable marketing I could do. Just posting the module on the Drupal.org site was valuable in getting attention. I also used Twitter to put a public face towards users and was able to respond quickly when users reported issues (and win public praise).</p>
<p>I also spent money on putting a glossy handout in the swag bag of every conference attendee for the 2011 <a href="http://chicago2011.drupal.org/">DrupalCon conference in Chicago</a>. This is <strong>the</strong> Drupal event of the year. A majority of everyone in attendance is a potential customer so I thought this would be a perfect marketing opportunity.</p>
<p>Sadly the ad had essentially no impact. The problem must lie with the product, the ad, or the marketing method. I had budget constraints so I had to design the ad myself. But even with that, it must be an issue with the product.</p>
<div id="attachment_447" class="wp-caption alignright" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/drupalcon-ad.png"><img class="size-medium wp-image-447" title="The DrupalCon Chicago Droptor ad" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/drupalcon-ad-300x165.png" alt="The DrupalCon Chicago Droptor ad" width="300" height="165" /></a><p class="wp-caption-text">The DrupalCon Chicago Droptor ad</p></div>
<p>But <strong>the most disheartening moment </strong>with marketing came when I spoke with several people at DrupalCon Chicago 2011 who had the exact problem managing Drupal sites that Droptor was meant to solve, and stared at me blankly when I said “I have a tool that solves this problem.” For whatever reason, Droptor didn’t resonate. I really don’t know why.</p>
<p>I feel like I did two simple marketing things right. First, I setup Google alerts for “drupal monitoring” and “droptor”, an easy and well-known method to track conversations and opportunities to talk about your product. Second, I carefully tracked whenever praise came in – be it email, Twitter, or a support ticket. This made preparing marketing materials much easier.</p>
<p><strong>The payment plans were wrong</strong></p>
<p>In retrospect, I think another problem was the payment model of Droptor. The pricing module was $2 per Drupal site scanned per month. I came up with this model to make it easy for consultants to bill the cost of Droptor back to the individual clients they were supporting (assuming they had a fleet of Drupal sites for many different clients). What I didn’t realize is the cost was so trivial that passing along the cost didn’t matter.</p>
<p>I should have used a traditional billing model where there was a free plan and several paid plans for larger number of sites (with additional features made premium). This pricing structure would have made the tool seem more professional, and I believe the additional cost would have added credibility.</p>
<p><strong>What I’m proud of</strong></p>
<p>I’m happy with how two things came out: providing customer support and building a product. I made customer support the top priority above all other tasks and responded to issues quickly and completely. <strong>Nothing disarms a frustrated user faster than a rapid response, honesty, and an “I’m sorry.”</strong></p>
<p>I am also proud of the fact that I built a real product, maintained that product, upgraded that product, supported that product, and got a (few) people to pay for that product. <strong>The feeling of getting paid for an act of pure creation is amazing</strong>.</p>
<p><strong>Where Droptor is today</strong></p>
<p>I am averaging a little less than one free sign up a day (during the week), and very few paid sign ups. As of this writing, we are syncing over 450 Drupal sites for over 400 users. We have about 25 paying customers. Droptor revenue is very modest, but does cover our expenses (other than time) of hosting, backup, and payment processing.</p>
<p>Revenue isn’t growing, and I am no longer convinced that revenue can scale. It’s decision time. Refocus and continue to work on Droptor or discontinue it and move on.</p>
<p><strong>Major lessons learned</strong></p>
<p>Most or all of what I’ve learned is already out there, but these lessons are all personal to me so I want to share them here clearly. The lessons are:</p>
<ul>
<li>Build something you will use</li>
<li>Google Adwords will get you traffic in exchange for money. The critical question to answer is, “Is it the right traffic?”</li>
<li>Use a standard pricing model, with plans based on size and extras for the higher plans</li>
<li>In design, copy something good. If unsure, find a similar work you like and start by copying it</li>
<li>Use a Twitter account to provide easy communication to users</li>
<li>Spend almost as much time building the marketing material for a feature as you do to build the feature</li>
<li>Communicate value to potential users, not features</li>
<li>Have a guaranteed first user. Fuck, have five</li>
<li>Let necessity drive development, not wish list</li>
<li>Let pain points guide your efforts</li>
<li><strong>Hard to make features are probably hard to use</strong></li>
<li><strong>Easy is hard, so focus on that instead of hard-to-build features</strong></li>
<li>Track testimonials and current clients for use in marketing</li>
</ul>
<p><strong>What is next?</strong></p>
<p>I have no idea.</p>
<p>The failures have been incredibly frustrating for me on a personal level, though very educational. I would love to work with a larger team on a new project. I really don’t know why, but I can’t wait to try, try, try again.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-that-doesnt-make-much-money/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>In which I build something I don’t use (Act 2)</title>
		<link>http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-i-dont-use/</link>
		<comments>http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-i-dont-use/#comments</comments>
		<pubDate>Wed, 11 May 2011 16:30:01 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Industry]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[web apps]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=439</guid>
		<description><![CDATA[Note: This is part two of a three part series about the single founder startup I have been working on over the last two years. Check out part 1 and part 3. Why I’m doing this. Before I dive and talk about the next app I launched, I want to be clear on what my [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: This is part two of a three part series about the single founder startup I have been working on over the last two years. Check out <a title="Act 1" href="http://www.missingfeatures.com/2011/05/my-startup-failure-in-three-acts">part 1</a> and <a href="http://www.missingfeatures.com/2001/05/in-which-i-build-something-that-doesnt-make-much-money/">part 3</a>.</em></p>
<p><strong>Why I’m doing this.</strong></p>
<p>Before I dive and talk about the next app I launched, I want to be clear on what my goals are in starting a web business:</p>
<ul>
<li>I like building stuff on the web. I have been coding and using computers all of my life.</li>
<li>I want to build permanent support for the work/life balance that I have found is most productive for my output.</li>
<li>I want to be in charge.</li>
<li>I want to be business for 30 years, not three.</li>
</ul>
<p>Now, in terms of my goals for money I really, truly am not doing this to get rich. I am doing this to make money, though. But money to me means slowly growing a company over time and making it profitable on day one. I’m not interested in selling a business to Google or Facebook, and I am not setting out to build something I think they would want to buy.</p>
<p>I’m interested in profits, margins, and value. My business heroes are Warren Buffet, Jason Fried, and Joel Spolsky. I don’t care about social networks or photo sharing apps. I don’t want a $10 million dollar funding round. I don’t want an audience before I have revenue. I want to run a business that makes profits and does cool stuff, building a team of like-minded people over time.</p>
<p><strong>The idea</strong></p>
<div id="attachment_442" class="wp-caption alignright" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/prospectorapp.png"><img class="size-medium wp-image-442" title="Prospector App home page" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/prospectorapp-300x287.png" alt="Prospector App home page" width="300" height="287" /></a><p class="wp-caption-text">The home page of Prospector App</p></div>
<p>I designed and led the team that built several internal web applications for the higher education market. One of these was essentially a customized CRM for admissions recruiting. <em>Perfect</em>, I thought. The value of a CRM in an organization is proven – look at Salesforce – so organizations will want them. I could combine my domain knowledge of higher education admissions with having <a title="Screen shots and more detail" href="http://www.justinemond.com/portfolio/prospectorapp.html">already built a web CRM for recruitment</a>.<em> Sweet.</em></p>
<p>So I started coding. And coding. And coding. And designing (poorly). I took the premise of what I had learned building an internal .NET app for recruitment, took out the stuff I didn’t think made sense (the peril of services), and rebuilt it as a multi-account web app with the excellent <a title="PHP is fun again!" href="http://cakephp.org/">CakePHP framework</a>.</p>
<p>Development wasn’t hard, except for the payment integration. I don’t know what it is with payment gateway vendors, but the APIs are usually painful (Authorize.NET, I’m looking at you) or the multitude of plans is very mind-boggling (read: Paypal Propayments Flopro Webmasters Elite). Integration is a pain, testing is a pain, and handling all of the edge cases is a huge pain.</p>
<p>I wanted people to be able to upgrade, downgrade, and cancel in the application, without having to contact support. This took more time than I wanted to allocate. In retrospect, I should have launched a <strong>free beta</strong> <strong>and waited to build payment integration if people signed up</strong>. This is a valuable lesson I didn’t fully learn until this happened <em>and </em>I read <a title="A great book" href="http://37signals.com/rework/">Rework by 37 Signals</a> (an excellent book, highly recommended). <strong>Solve real pain points, not anticipated ones</strong>.</p>
<p><strong>My Three Major Mistakes</strong></p>
<p>I finished the thing. I had my head deep underwater, coding for several months, happily working away. Then I actually finished it and I had <em>no idea what to do with it</em>. I didn’t need to use it myself, I didn’t know how to market it, and I didn’t have any good connections to the community of potential users (higher-education admissions professionals). I had this big <em>thing</em>, and I had no idea what to do with it.</p>
<p>Of course I had read about the danger of building something you didn’t use, but I didn’t really understand why it was so bad until I experienced firsthand. If I had a co-founder who had connections or access to the admissions community, it would have been a far different experience. But I didn’t, I just myself, my code, and my time. Once the <em>thing </em>was done I had no idea what to do with it.</p>
<p>Another major mistake was not caring about the design of the public pages for the application. I didn’t spend much time thinking about how to market the product on the web site itself, or even how to market it generally. The design sucked and I had no idea what to do next.</p>
<p>I think the mistake with marketing came down to the fact that I didn’t start thinking about marketing on day one. In retrospect, I should have kept this in the back of my mind during development. When I finished a feature, I should have adding it to a tour page, or a FAQ, or something. But I didn’t. I just put marketing off to a later stage. <em>I will worry about that later</em>, I thought.</p>
<p>The final major mistake was that <strong>I didn’t have a guaranteed first customer</strong>. A guaranteed first customer is a friend or a colleague who both needs the thing and would be happy to try it in production and give you feedback. I didn’t have anyone who I knew for certain would be the first user. This should have been a major red flag, but I missed it completely.</p>
<p>To summarize, I made loads of mistakes on this project, including:</p>
<ul>
<li>Spent too much time on payment integration before the product was proven</li>
<li>Built something I didn’t need or would even use</li>
<li>Didn’t have a connection to the community of potential users</li>
<li>Put marketing off to the end instead of making it part of the process from day one</li>
<li>Didn’t have a guaranteed first customer</li>
</ul>
<p>The project stalled on completion. The technology was finished, the <a title="The code is up" href="https://github.com/jemond/Prospector-App">code was complete</a>, but so was the project. I moved on to <a href="http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-that-doesnt-make-much-money/">Act 3</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/11/in-which-i-build-something-i-dont-use/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My startup failure in three acts (Act 1)</title>
		<link>http://www.missingfeatures.com/2011/05/11/my-startup-failure-in-three-acts/</link>
		<comments>http://www.missingfeatures.com/2011/05/11/my-startup-failure-in-three-acts/#comments</comments>
		<pubDate>Wed, 11 May 2011 16:29:57 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Industry]]></category>
		<category><![CDATA[startups]]></category>
		<category><![CDATA[web apps]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=436</guid>
		<description><![CDATA[Note: This is part one of a three part series about the single founder startup I have been working on over the last two years. Check out part 2 and part 3. I don’t like failure. I really don’t. I get why you shouldn’t be afraid of it. I totally agree that there is loads [...]]]></description>
			<content:encoded><![CDATA[<p><em>Note: This is part one of a three part series about the single founder startup I have been working on over the last two years. Check out <a title="Act 2" href="http://www.missingfeatures.com/2011/05/in-which-i-build-something-i-dont-use">part 2</a> and </em><em><a href="http://www.missingfeatures.com/2001/05/in-which-i-build-something-that-doesnt-make-much-money/">part 3</a></em><em>.</em></p>
<p>I don’t like failure. I really don’t. I get why you shouldn’t be afraid of it. I totally agree that there is loads to learn from it (read on, I know this first hand!). But I don’t like talking, sharing, or thinking about failure. I don’t even really talk about my startup work to my family, save for my partner. I mean, who doesn’t like winning?</p>
<p>I’m generally a private person, and don’t want to share something until it’s been a success. But I’m at this transition point where I have been doing my startup for more than two years, it hasn’t worked, I am unbelievably frustrated, and I need to make some important decisions on what to do next. I am forcing myself to write this post as an exercise to improve the thinking I can do about the experience, learn more, and hopefully get some outside advice.</p>
<p><strong>Chatting on the web</strong></p>
<div id="attachment_437" class="wp-caption alignright" style="width: 310px"><a href="http://www.missingfeatures.com/wp-content/uploads/2011/05/webchat.png"><img class="size-medium wp-image-437" title="A chat in action" src="http://www.missingfeatures.com/wp-content/uploads/2011/05/webchat-300x217.png" alt="A chat in action" width="300" height="217" /></a><p class="wp-caption-text">A web chat in action</p></div>
<p>My dive into boot-strapped web apps started four years ago when the <a title="Web development tech consulting, Drupal" href="http://www.urbaninsight.com/">firm I worked</a> at wanted to develop a web-based tool for admissions teams to chat with students. The tool was called <a title="Screen shots and more info" href="http://www.justinemond.com/portfolio/webchat.html">University Web Chat</a>, and later was renamed to Milo Web Chat.</p>
<p>There were other great chat systems available at the time (like Campfire), but none that supported the use-case we were trying to provide to teams of admissions recruiters. That is, the ability to host a chat with a small recruitment team (known, registered) for a larger student audience (unknown, unregistered). We focused on ease of use, simple custom branding, and serving the admissions market exclusively.</p>
<p>I was the lead architect and developer of the first working version of the tool, though several other Urban Insight developers helped with development throughout the lifespan of the app. It worked, was easy to use, and scaled to chats with 70+ people participating. As the developer, it was very satisfying to have people use something I built.</p>
<p>We used a basic freemium pricing model where the basic account of up to 4 chatters at once was free and a premium plan where the limit was lifted to 100 chatters cost money. We struggled to find the right pricing model, and I never felt like we had it right.</p>
<p>Account growth – both paid and free – was slow. Two years after launch the leadership decided to wind-down Web Chat. I was bummed, but unsurprised.</p>
<p><strong>So what went wrong?</strong></p>
<p>I looked to my own frustration. It was a very challenging product management experience for me because as a services organization we always had to give client work first priority. This meant that we could only sporadically give Web Chat attention. There wasn’t a consistent allocation of hours for development or marketing allocated over time. With uneven spurts of time to work on the project, we spent more time getting into the groove then we did actually getting good work done. Looking back, I think the project was doomed to fail from the beginning with this approach.</p>
<p>While I felt (and feel) the lack of consistent attention was the biggest cause of failure, we also struggled with messaging. Despite all the great advice online contrary to this approach, I focused on features. Features make sense to me. A careful evaluation of features is how I buy a product.</p>
<p>I assumed this must be how everyone else makes a purchase. I thought, <em>just show the amazing features, clearly, and people will go gangbusters for how awesome our product is</em>! Boy was I wrong. I didn’t start to understand how critical this was until the end of the project.</p>
<p>Still, a key strength we brought to the product was a focus on a niche area (higher-education admissions) where we had real experience. There are a lot of admissions professionals out there – complete with their own conference – so I don’t think the market was too small for Web Chat to be a moderate success.</p>
<p>Web Chat didn’t work out, but I learned some valuable lessons:</p>
<ul>
<li>You need to be able to give you product consistent attention.</li>
<li>Don’t focus on features, focus on value</li>
<li>Even simple is hard for a user</li>
<li><strong>Users don’t think like you ever</strong></li>
</ul>
<p><strong>Next steps</strong></p>
<p>Web Chat was doomed, I was frustrated, but I was also blown away by the potential of a business built around a web application. You never have to install your app on client hardware, you only have to upgrade one system when new releases came out, it’s a no cost business to start (only my time is expensive), and since childhood <strong>web coding has pure fun</strong>. I also wanted to be in control so I could make (what I thought) were the right decisions.</p>
<p>Luckily, my employer was very supportive and very flexible and I was able to go part time so I could focus half my week on my own product. At last, time! At last, control! At last, web apps!</p>
<p>Sadly, I was not all out of failure. The brain dump continues in <em><a title="Act 2" href="http://www.missingfeatures.com/2011/05/in-which-i-build-something-i-dont-use">Act 2</a></em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/11/my-startup-failure-in-three-acts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Drupal InnoDB performance troubleshooting checklist</title>
		<link>http://www.missingfeatures.com/2011/05/04/drupal-innodb-performance-troubleshooting-checklist/</link>
		<comments>http://www.missingfeatures.com/2011/05/04/drupal-innodb-performance-troubleshooting-checklist/#comments</comments>
		<pubDate>Wed, 04 May 2011 22:39:18 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Checklists]]></category>
		<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=423</guid>
		<description><![CDATA[We recently completed a number of optimization refinements for a client running a high-traffic and complex Drupal site in order to help the site accommodate post-launch growth. One of the changes we made was converting all of the MySQL database tables from MyISAM to InnoDB. The conversion didn&#8217;t create any immediate problems with site performance, [...]]]></description>
			<content:encoded><![CDATA[<p>We recently completed a number of optimization refinements for a client running a high-traffic and complex Drupal site in order to help the site accommodate post-launch growth. One of the changes we made was converting all of the MySQL database tables from MyISAM to InnoDB.</p>
<p>The conversion didn&#8217;t create any immediate problems with site performance, but we did start to see delays for certain tasks that used to be speedy with MyISAM, such as imports from a dump file. To make it easy to replicate the issue we created a simple script that looped through 25 node IDs and called noad_load() and noad_save() for each one. The script ran fast on a MyISAM copy of the database, but was dog slow on InnoDB (2 seconds compared to 14 seconds).</p>
<p>Our assumption was this was an InnoDB configuration issue so we made a variety of basic InnoDB settings refinements. But these didn&#8217;t help. I wanted the team to have a clear direction on how to proceed with troubleshooting and make sure we were covering all the bases. The solution? A checklist!</p>
<p>Here is the checklist we created:</p>
<ol>
<li>Post the problem to <a href="http://drupal.stackexchange.com">Drupal Stack Exchange</a> for ideas</li>
<li>Try <a href="http://stackoverflow.com/questions/2222861/why-do-mysql-innodb-inserts-updates-on-large-tables-get-very-slow-when-there-ar/2223062#2223062">profiling the table</a></li>
<li>Run load tests on other hardware to verify issue is is not hardware related</li>
<li>Identify a the slowest query in the node_load()/node_save() calls and use <a href="http://dev.mysql.com/doc/refman/5.0/en/explain.html">explain</a> to review it</li>
<li>Identify the total index sizes for each table</li>
<li>Determine if we need to allocate more ram to InnoDB</li>
<li>Make sure we don&#8217;t have hard drive fragmentation</li>
<li>Try adjusting the InnoDB log settings on the stage server</li>
</ol>
<p>Now, we had been <em>assuming </em>this must be an InnoDB configuration issue because we don&#8217;t use MyISAM all that much, and that was the only thing that changed. But I thought, <em>what the hell</em>, <em>let&#8217;s check some random stuff too.</em></p>
<p>Turns out this issue had nothing to do with InnoDB configuration<em>. </em>Once we hit item four we quickly traced the problem to a single SELECT query taking up more than 90% of the execution time of our load test. After adding an index to the table in question we reduced the load test time from 14 seconds to under 2.<em></em> Beer time!</p>
<p>As a developer on my team said afterwards: &#8220;I am going to remember three things in database tuning: index, index, and index.&#8221;<em><br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/04/drupal-innodb-performance-troubleshooting-checklist/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The new Urban Insight blog</title>
		<link>http://www.missingfeatures.com/2011/05/01/the-new-urban-insight-blog/</link>
		<comments>http://www.missingfeatures.com/2011/05/01/the-new-urban-insight-blog/#comments</comments>
		<pubDate>Sun, 01 May 2011 19:00:41 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Drupal]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Design]]></category>
		<category><![CDATA[urban insight]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=357</guid>
		<description><![CDATA[A few months ago we decided to get our hands dirty with Drupal 7, and used that as an excuse to start blogging. We setup the UI Team Blog, and haven&#8217;t looked back since. The team blogs about the stuff we use for our work, like Drupal, jQuery, SEO, and security. We are just getting [...]]]></description>
			<content:encoded><![CDATA[<p>A few months ago we decided to get our hands dirty with Drupal 7, and used that as an excuse to start blogging. We setup the <a title="The Urban Insight team blog" href="http://blog.urbaninsight.com/tag/drupal">UI Team Blog</a>, and haven&#8217;t looked back since.</p>
<p>The team blogs about the stuff we use for our work, like <a href="http://blog.urbaninsight.com/tag/drupal">Drupal</a>, <a href="http://blog.urbaninsight.com/tag/jquery">jQuery</a>, <a href="http://blog.urbaninsight.com/tag/drupal-seo">SEO</a>, and <a href="http://blog.urbaninsight.com/tag/security">security</a>. We are just getting started, but we are posting about once per week.</p>
<p>If you are interested, <a href="http://blog.urbaninsight.com/blogs/justin-emond">this page</a> lists my posts.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/01/the-new-urban-insight-blog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Why I trust but always verify</title>
		<link>http://www.missingfeatures.com/2011/05/01/why-i-trust-but-always-verify/</link>
		<comments>http://www.missingfeatures.com/2011/05/01/why-i-trust-but-always-verify/#comments</comments>
		<pubDate>Sun, 01 May 2011 18:33:04 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Software Industry]]></category>

		<guid isPermaLink="false">http://www.missingfeatures.com/?p=408</guid>
		<description><![CDATA[When I&#8217;m asked what my project management style is I tend to mention three or four of the behaviors that I believe have led to past project success and client happiness. The one I tend to mention first is the old adage of trust but verify. It&#8217;s very easy to understand, but requires discipline to [...]]]></description>
			<content:encoded><![CDATA[<p>When I&#8217;m asked what my project management style is I tend to mention three or four of the behaviors that I believe have led to past project success and client happiness. The one I tend to mention first is the old adage of <strong>trust but verify</strong>.</p>
<p>It&#8217;s very easy to understand, but requires discipline to do consistently. Simply, when something comes back to me I check that is does or is what is claimed. I don&#8217;t micromanage and don&#8217;t bother the team member when it&#8217;s being worked on. But when they say it&#8217;s done, I check it out.</p>
<p>My goal is to check 100% of what comes back to me, but this isn&#8217;t always practical. Sometimes the issue can&#8217;t be checked because we can&#8217;t safely recreate the issue. Sometimes the state of the data isn&#8217;t right and it is non-trivial to recreate that state. Still, these are rare. I am able to validate 90-95% of what comes back to me.</p>
<p>What do I check? If it&#8217;s a bug, I check the reproduction steps. If it&#8217;s a feature, I check our requirements document or specification for every intended piece of functionality and verify they work. If it&#8217;s a configuration change that our hosting provider has made to one of our managed servers, I validate the configuration is live at the command line or in the web root. If it&#8217;s a firewall change, I run a port scanner.</p>
<p>Why is this so important? Because <strong>as a project manager your most valuable asset with a client is your reputation</strong>. If you frequently give work to the client that is incomplete you will have no credibility. If your client doesn&#8217;t have faith in you, then they won&#8217;t have faith in your organization, or in your ability to make the project successful. The project will be doomed.</p>
<p>However, if your work consistently reflects what you say, then you gain credibility with the client and they will have confidence in you, your recommendations, and ultimately your ability to make their project a success.</p>
<p>My first tip to new project managers? <strong>Trust but verify</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.missingfeatures.com/2011/05/01/why-i-trust-but-always-verify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss><!-- Dynamic page generated in 1.177 seconds. --><!-- Cached page generated by WP-Super-Cache on 2012-05-17 15:59:44 -->

