<?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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>The Wojo Group</title>
	
	<link>http://www.thewojogroup.com</link>
	<description>The musings of a small creative media company.</description>
	<lastBuildDate>Mon, 01 Jun 2009 13:41:38 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<image><link>http://www.thewojogroup.com</link><url>http://www.thewojogroup.com/images/wojologo.jpg</url><title>The Wojo Group</title></image><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/TheWojoGroup" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Let’s Make a Deal – 15 Things You Need in a Web Contract</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/99fXd-2Mm-k/</link>
		<comments>http://www.thewojogroup.com/2009/06/lets-make-a-deal-15-things-you-need-in-a-web-contract/#comments</comments>
		<pubDate>Mon, 01 Jun 2009 13:41:38 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Agreement]]></category>
		<category><![CDATA[Contract]]></category>
		<category><![CDATA[Legal]]></category>
		<category><![CDATA[Liability]]></category>
		<category><![CDATA[Web Design]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=530</guid>
		<description><![CDATA[Writing the perfect web contract can be a daunting task - but here are 15 tips on what to include and some additional resources for help.]]></description>
			<content:encoded><![CDATA[<p>In the first part of this article, we looked at <a href="http://www.thewojogroup.com/2009/04/lets-make-a-deal-the-importance-of-contracts/" target="_self">some of the main advantages of using a contract</a>. Now, we&#8217;ll take a closer look at what should actually be included in a web design contract. Some of these principles apply to all contracts, but some of them apply specifically to the design and web industries.</p>
<h3>1.) Pricing Terms</h3>
<p>Obviously, one of the primary purposes of a contract is to spell out the pricing terms &#8211; and this is the area of the contract the client is likely to be most interested in. The way this section is structured will depend a great deal upon your pricing model. As I argued previously, a <a href="http://www.thewojogroup.com/2008/10/pricing-hourly-or-fixed/" target="_self">hybrid pricing model</a> is probably the way to go, but this may depend on your company or it may differ on a project-by-project basis. If you do use a hybrid model (offering a quote that may be different than the actual price), make sure you <strong>clearly</strong> specify that the quote provided is provisional and may be subject to change. If you are using a fixed quote model, then you will have to make sure that you include a very detailed and accurate description of the project deliverables (see point 3).</p>
<h3>2.) Payment Terms</h3>
<p>You may include these details in the section on general pricing, but specifying payment terms is very important in a design contract. First of all, you will want to make sure that at least some money is paid up-front (generally 25-50%). Indicate that work will begin <strong>after</strong> this money is received, so that they actually have some motivation to cut the first check.</p>
<p>Secondly, tie each subsequent payment to a clear deliverable or to a specific time period. If they want monthly payments, this should be easy to specify in a contract. But if they pay you along the way based on the stage of the project, you will want to be very specific about what this entails. Is the design complete once everyone is completely happy with the design, or once the second-stage design comp has been delivered? Don&#8217;t tie a payment down to anything vague and unspecified.</p>
<p>As far as invoice term goes, in my experience you can expect companies to take as long as you give them to pay the invoice (or longer). I&#8217;m consistently amazed by how long it takes a larger company to cut and deliver a check for $1,000 to a small design firm. I&#8217;m not sure there is a good answer to this &#8211; requiring the check in less than 30 days is generally outside of industry standards and probably won&#8217;t actually result in a quicker payday anyways. My advice is simply to assume that you will have to wait approximately 30 days to receive a check for any work, and try to account for this fact as you manage your company and adjust your cash flow expectations accordingly. If anyone has any advice on getting companies to pay their invoices promptly, please let me know!</p>
<h3>3.) Project Workflow</h3>
<p>It&#8217;s a good idea to write the basic workflow you expect for the project into your contract. Specify the different stages you&#8217;ll go through as the project progresses and when the client will need to approve the work done. This way, the contract is not just legal jargon, but actually a useful document for both client and designer to help direct the project&#8217;s process and guide expectations.</p>
<p>We break our project workflow down into the following components:</p>
<ol>
<li>Research</li>
<li>Information Architecture</li>
<li>Wireframes</li>
<li>Design Compositions</li>
<li>Page Creation</li>
<li>Website Launch</li>
<li>Post-Launch Research</li>
<li>Website Finalization</li>
</ol>
<p>In fact, we have developed two standard contracts; one for smaller website projects that involve a simpler workflow, and one for big projects that require some intensive research before and after the development process.</p>
<h3>4.) Timeline Expectations</h3>
<p>Along with the budget, the project timeline is one of the most critical elements to many clients. You should definitely mention that timelines may frequently change, and that any estimate you offer is a good faith best judgment &#8211; but not infallible. This is also a good opportunity to hammer home the point that the client has responsibilities too &#8211; such as getting you content &#8211; and if they fall behind then so will you. Fight the temptation to offer a best-case scenario timeline, because we all know that true projects never follow the best-case scenario.</p>
<h3>5.) Maintenance Agreement</h3>
<p>Some clients seem to expect free maintenance for life, but as a designer you know that this is not feasible. Clearly specify what counts as maintenance vs. simply fixing problems as part of the initial contract. At the Wojo Group, we generally include customized maintenance agreements outside of the bounds of the standard contract.</p>
<h3>6.) Limited Liability and Indemnification</h3>
<p>This is the part of the contract where you try to protect yourself from some really nasty legal problems. Basically, clauses on limited liability and indemnification should indicate that you will not be held responsible for any actions brought against the client as a result of the website, and that the client will reimburse you if you are subjected to such actions.</p>
<h3>7.) Arbitration Clause</h3>
<p>You&#8217;ll want a clause in your contract specifying what happens if claims against you are in excess of the limit for small claims court. In this worst-case scenario, you want to limit your exposure to huge lawsuits and mounting legal fees. Arbitration is the way to go because it keeps the dispute out of the courts. Instead, both parties present their case before one or more &#8216;arbitrators&#8217;, and each party agrees to be bound to the decision made. This avoids the potentially nasty appeal process, leads to lower legal costs, and results in a quicker decision. Hopefully, it will never come to this&#8230;but just in case you want to have your bases covered.</p>
<h3>8.) Design Credit Agreement</h3>
<p>Generally speaking, you want to specify that you have the right to use the project in your portfolio. Also, you might want to have a small design credit inserted into the website, generally placed in the footer. If clients are squeamish about these items, then you can cut them out. However, as a general rule of thumb it is a good idea to keep these options open for you, especially if you are working on a project that will make a great addition to your portfolio.</p>
<h3>9.) Additional Expenses Agreement</h3>
<p>In the course of web design, you may need to make significant expenses for specialized fonts, images, and so forth. Make sure it&#8217;s clear that the client will be billed for these items at actual cost, and that they will always be notified before such purchases are made on their behalf.</p>
<h3>10.) Cancellation</h3>
<p>Neither party should be able to bail on a whim, but if both of you want out, there should be an easy way to mutually cancel the contract. Make sure you specify that you will be paid for all hours of work completed up until the time of cancellation if the client wants out.</p>
<h3>11.) Cross-Browser Compatibility</h3>
<p>If you&#8217;re a web designer, you know there are a seemingly endless number of browsers &#8211; especially if you count all of the mobile browsers now available. Despite the abundance of choices, however, there really are only a few browsers that have any significant percentage of the market &#8211; Internet Explorer (6, 7, and 8), Firefox, and Safari. Make sure you specify which browsers you plan on building the website for. Sure, you <strong>could</strong> design the website to be compatible with Netscape 4 &#8211; but this will obviously require some serious time commitments and call for a bigger paycheck. If you fail to mention the issue of cross-browser compatibility, then you may have clients coming after you when their website doesn&#8217;t load in their favorite antiquated browser.</p>
<p>As a somewhat extreme example, a recent client called us complaining about some fairly bizarre problems, which we couldn&#8217;t replicate even in IE 6. We eventually learned that the client was using the AOL browser that comes with the dial-up service. Remember that thing? You never know what browsers or devices people are going to use to view their websites &#8211; so make sure you specify up front what browsers will be compatible and include this in your contract.</p>
<h3>12.) Client Content</h3>
<p>Oftentimes the most challenging part of finishing a website is getting content from the client. Despite breathing down your neck to make progress on the design and programming of their project, you need to engage in medieval torture methods to get any content out of them. Make sure you clearly indicate that any delay in delivery of content from the client will result in timeline delays.</p>
<p>It&#8217;s also wise to specify the formats you accept for content. Frankly, we don&#8217;t want to get any WMV movie files or publisher documents. In our contract, we specify the acceptable formats for text, graphics, audio, and video content. You may also want to specify that there will be additional fees if they give you print content that you have to type in manually.</p>
<h3>13.) Mistakes</h3>
<p>To be fair to clients, they should not have to pay for our mistakes. However, in the design industry, &#8216;mistake&#8217; can be a vague term. Make sure you clearly specify what counts and what doesn&#8217;t. You should fix a blatant error for free, but if you produce a perfectly good design composition that the client happens to hate, then you haven&#8217;t made a mistake at all and you deserve to be paid for your work.</p>
<p>We also have a section in our contract discussing what happens if a third party is hired to work on the website. You can&#8217;t be held responsible for someone else&#8217;s mistake, nor expected to fix them for free, so indicate that any repairs or changes you have to make as the result of third-party tinkering will be billable.</p>
<h3>14.) Assignment of Project</h3>
<p>It&#8217;s probably a good idea to mention that you have the right to assign subcontractors to work on portions of the project. To be fair to the client, however, you should guarantee the work of any subcontractors to the extent that you guarantee your own. However, if you get in a jam and need some extra help, you&#8217;ll be glad you left this option open.</p>
<h3>15.) Referral Program</h3>
<p>Word-of-mouth advertising is very important for our company, so we include a referal incentive program written right into the contract. We offer 5% of the referred project&#8217;s revenue &#8211; but you might want to try something different. Not a necessary element of a contract, but useful nonetheless.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/SvdrWokKbD4KYRC-jUefd6esQn8/0/da"><img src="http://feedads.g.doubleclick.net/~a/SvdrWokKbD4KYRC-jUefd6esQn8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/SvdrWokKbD4KYRC-jUefd6esQn8/1/da"><img src="http://feedads.g.doubleclick.net/~a/SvdrWokKbD4KYRC-jUefd6esQn8/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=99fXd-2Mm-k:sp0huUzmkcA:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=99fXd-2Mm-k:sp0huUzmkcA:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=99fXd-2Mm-k:sp0huUzmkcA:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=99fXd-2Mm-k:sp0huUzmkcA:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=99fXd-2Mm-k:sp0huUzmkcA:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=99fXd-2Mm-k:sp0huUzmkcA:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=99fXd-2Mm-k:sp0huUzmkcA:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/99fXd-2Mm-k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/06/lets-make-a-deal-15-things-you-need-in-a-web-contract/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/06/lets-make-a-deal-15-things-you-need-in-a-web-contract/</feedburner:origLink></item>
		<item>
		<title>Simple Pagination with Rails</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/FocKDJQgdgU/</link>
		<comments>http://www.thewojogroup.com/2009/05/simple-pagination-with-rails/#comments</comments>
		<pubDate>Tue, 05 May 2009 14:07:17 +0000</pubDate>
		<dc:creator>Brett Wejrowski</dc:creator>
				<category><![CDATA[Motionspire]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[content]]></category>
		<category><![CDATA[pages]]></category>
		<category><![CDATA[pagination]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=510</guid>
		<description><![CDATA[While I was developing Motionspire, I needed to implement a pagination system for the video content.  I looked through the existing plugins, but found that I really desired something extremely simple and custom to work within my search controller.  With only a few lines of code, I created a very basic system for managing pagination [...]]]></description>
			<content:encoded><![CDATA[<p>While I was developing <a href="http://www.motionspire.com">Motionspire</a>, I needed to implement a pagination system for the video content.  I looked through the existing plugins, but found that I really desired something extremely simple and custom to work within my search controller.  With only a few lines of code, I created a very basic system for managing pagination that can be ported to other sites with ease.</p>
<h4>The Search Controller</h4>
<p>The Motionspire search controller uses one function and view for returning any content, whether it&#8217;s filtered or not, so the pagination only required one copy of the code to be implemented.  I keep a session variable for maintaining the user&#8217;s preference for items per page, and if that parameter has been sent to the search function I set the session variable :</p>
<pre name="code" class="ruby">

if params[:itemsPerPage] then session[:itemsPerPage] = params[:itemsPerPage] end
</pre>
<p>When I run though the search function, I see if a page parameter has been passed:</p>
<pre name="code" class="ruby">

if params[:page] then @page = params[:page].to_i else @page = 1 end
</pre>
<p>After I retrieve the articles pertaining to the search parameters (in this case the results are stored into an array called @videos), I check the :itemsPerPage preference and find the last possible page:</p>
<pre name="code" class="ruby">

if session[:itemsPerPage] then @per = session[:itemsPerPage].to_i else @per = 24 end

@lastpage = @videos.length/(@per) + 1

if @videos.length%(@per) == 0

    @lastpage = @lastpage - 1

end
</pre>
<p>I have a default itemsPerPage value of 24 hardcoded, and you can change this for your search.</p>
<p>From here, we simply return the search results for that page, using the current page and the items per page preference:</p>
<pre name="code" class="ruby">

@videos = @videos[((@page-1)*@per),@per]
</pre>
<p><em>For search queries within a large data set, I would recommend using these parameters with the sql query with the &#8216;ORDER BY&#8217; and &#8216;LIMIT&#8217; in order to avoid returning extremely large results unnecessarily.</em></p>
<h4>The Helper</h4>
<p>First, I created a short helper function that finds the min and max pages, ensuring we don&#8217;t show a negative page or a page that doesn&#8217;t exist:</p>
<pre name="code" class="ruby">

def minmaxpage(current,total,option)
    min = current - 2
    if min &lt; 1
        min = 1
        max = 1 + 4
        if max &gt; total then max = total end
    end
    max = min + 4
    if max &gt; total
        max = total
        min = max - 4
        while min &lt; 1
            min = min + 1
        end
    end
    if option == &#039;min&#039; then return min else return max end
end
</pre>
<h4>The View</h4>
<p>For the content from the view, we use the @videos array to present the content for the page.  The only custom coding necessary is in the links for the pages.  For this site, I provide a first and last page link, along with 2 pages on either side of the current page.  You can manipulate this code how you want, but the basic idea will remain the same.</p>
<p>First we grab the min and max page from the helper:</p>
<pre name="code" class="ruby">

&lt;% min = minmaxpage(@page, @lastpage, &#039;min&#039;) %&gt;

&lt;% max = minmaxpage(@page, @lastpage, &#039;max&#039;) %&gt;
</pre>
<p>For the code for the page links, we simply check to see if the min page is within two of the current:</p>
<pre name="code" class="ruby">

&lt;% if min &lt; @page %&gt;

    &lt;%= link_to( &quot;Prev&quot;,

        :action =&gt; &quot;search&quot;,

        :page =&gt; (@page - 1) ) %&gt;

&lt;% end %&gt;

&lt;% if min &gt; 1 %&gt;

    &lt;%= link_to( &quot;1&quot;,

        :action =&gt; &quot;search&quot;,

        :page =&gt; 1 ) %&gt;

&lt;% end %&gt;

&lt;% x = min %&gt;
</pre>
<p>Then we loop through the remaining pages, ensuring we don&#8217;t go over the max, and make the current page simple text instead of a link:</p>
<pre name="code" class="ruby">

&lt;% while x &lt;= max %&gt;

    &lt;% if x.to_i == @page.to_i %&gt;

        &lt;span class=&quot;current&quot;&gt;&lt;%= x %&gt;&lt;/span&gt;

    &lt;% else %&gt;

        &lt;%= link_to( x.to_s,

            :action =&gt; &quot;search&quot;,

            :page =&gt; x ) %&gt;

    &lt;% end %&gt;

    &lt;% x = x+1 %&gt;

&lt;% end %&gt;

&lt;% if max &lt; @lastpage %&gt;

    &lt;%= link_to( @lastpage.to_s,

        :action =&gt; &quot;search&quot;,

        :page =&gt; @lastpage ) %&gt;

&lt;% end %&gt;

&lt;% if max &gt; @page %&gt;

    &lt;%= link_to( &quot;Next&quot;,

        :action =&gt; &quot;search&quot;,

        :page =&gt; (@page + 1) ) %&gt;

&lt;% end %&gt;
</pre>
<p>The code may look a little long, but the implementation took very little time.  I know exactly what the code is doing and it is very easy to expand this for different situations and code.</p>
<p>There are a lot of solutions for pagination of content, but I found that this simple implementation helped me avoid using plugins and save time.  Let me know if you guys have any questions or comparable solutions.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/kyM7XahmceTXMc_FmH8wK8WC4rI/0/da"><img src="http://feedads.g.doubleclick.net/~a/kyM7XahmceTXMc_FmH8wK8WC4rI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/kyM7XahmceTXMc_FmH8wK8WC4rI/1/da"><img src="http://feedads.g.doubleclick.net/~a/kyM7XahmceTXMc_FmH8wK8WC4rI/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=FocKDJQgdgU:NVk0OLI8H-Y:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=FocKDJQgdgU:NVk0OLI8H-Y:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=FocKDJQgdgU:NVk0OLI8H-Y:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=FocKDJQgdgU:NVk0OLI8H-Y:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=FocKDJQgdgU:NVk0OLI8H-Y:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=FocKDJQgdgU:NVk0OLI8H-Y:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=FocKDJQgdgU:NVk0OLI8H-Y:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/FocKDJQgdgU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/05/simple-pagination-with-rails/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/05/simple-pagination-with-rails/</feedburner:origLink></item>
		<item>
		<title>Adding Fun to Your User Interface</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/bADvye46AwM/</link>
		<comments>http://www.thewojogroup.com/2009/04/adding-fun-to-your-user-interface/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 13:19:38 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Usability]]></category>
		<category><![CDATA[User Interface]]></category>
		<category><![CDATA[UX]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=488</guid>
		<description><![CDATA[A List Apart had an interesting article recently that Defended the Case for Eye Candy. The article hit a key point that we&#8217;ve been practicing here at The Wojo Group on our various projects.
Things that are enjoyable will be easy to use and efficient.
The ALA article is defending the case that beautiful and aesthetically pleasing [...]]]></description>
			<content:encoded><![CDATA[<p>A List Apart had an interesting article recently that Defended the <a href="http://alistapart.com/articles/indefenseofeyecandy">Case for Eye Candy</a>. The article hit a key point that we&#8217;ve been practicing here at The Wojo Group on our various projects.</p>
<blockquote><p>Things that are enjoyable will be easy to use and efficient.</p></blockquote>
<p>The ALA article is defending the case that beautiful and aesthetically pleasing UI designs increase functionality because they&#8217;re perceived to be easy to use and efficient. What we&#8217;ve been practicing here is the theory that you can have an interface be more enjoyable through the implementation of functionality. That is, if a piece of functionality is <strong>fun</strong>, the user will perceive it as intuitive. Now there are limits to this; you can&#8217;t have something that is super fun and not functional what so ever. But, generally speaking, the more fun you can make a user interface to interact with, the more forgiving your users will be of any shortcomings.</p>
<h3>Coverflow</h3>
<p>Be honest, when coverflow was announced you thought, &#8220;Cool, but it&#8217;s useless.&#8221; Coverflow is one of the biggest successes of &#8220;fun&#8221; in UI design. It has some great functional uses when browsing folders on your mac full of images, but past that, it&#8217;s a stretch to say it&#8217;s a great way to browse files. There are far more efficient and more usable ways to browse cover art in iTunes, or to browse visual files on my mac, but I still find myself using coverflow more often than I thought I would. That&#8217;s because it&#8217;s fun to use. Moving that slider and seeing my files or album covers rotate and move in 3D space is a delight. On the iPhone the fun is amplified by swiping your finger and having it respond in real time.</p>
<h3>Time Machine</h3>
<p>Apple is the master of adding fun to user interfaces. If you look at why or how their user experience is so successful, 9 times out of 10 you&#8217;ll find their solution is just plain more fun than the competitions&#8217;. Time Machine is another example of this. Backup software is a fully developed genre, but Apple decided to step in and make a big splash. They made Time Machine completely unlike any other backup software out there. Using 3D and a crazy time portal background that you manipulate with an actual time line makes using backup a joy. In fact, I would argue that it was Apple&#8217;s primary focus when designing the UI for Time Machine. It&#8217;s like healthy chefs making food that&#8217;s good for you <em>actually taste good</em>. Apple made the important, mundane task of backup fun to use.</p>
<h3>Adding Fun to Your UI</h3>
<p>It&#8217;s no doubt that Apple churns out some of the most fun to use software out there, but we can all start doing a better job at making our UIs more enjoyable, particularly on the web.</p>
<p><strong>Sliders</strong></p>
<p>Sliders are a great alternative to the standard form elements like drop down menus or text inputs.</p>
<p><a href="http://www.thewojogroup.com/wp-content/uploads/2009/04/sliders.png"><img class="alignnone size-full wp-image-493" title="sliders" src="http://www.thewojogroup.com/wp-content/uploads/2009/04/sliders.png" alt="" width="167" height="88" /></a> <a href="http://www.thewojogroup.com/wp-content/uploads/2009/04/sliders3.png"><img class="alignnone size-full wp-image-493" title="sliders" src="http://www.thewojogroup.com/wp-content/uploads/2009/04/sliders3.png" alt="" width="295" height="112" /></a></p>
<p><strong>Animated User Feedback</strong></p>
<p>Giving feedback to the user for their interactions is critical to good UX, but you can take it further. It is now easier than ever to surprise and delight users with javascript frameworks like jQuery and Scriptaculous.</p>
<p><object classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" width="550" height="275" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"><param name="autoplay" value="false" /><param name="src" value="http://www.thewojogroup.com/wp-content/uploads/2009/04/animatedfeedback.mov" /><embed type="video/quicktime" width="550" height="275" src="http://www.thewojogroup.com/wp-content/uploads/2009/04/animatedfeedback.mov" autoplay="false"></embed></object></p>
<p><object classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" width="550" height="245" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"><param name="autoplay" value="false" /><param name="src" value="http://www.thewojogroup.com/wp-content/uploads/2009/04/animatedfeedback4.mov" /><embed type="video/quicktime" width="550" height="245" src="http://www.thewojogroup.com/wp-content/uploads/2009/04/animatedfeedback4.mov" autoplay="false"></embed></object></p>
<p><strong>Drag &amp; Drop</strong></p>
<p>Another great way to spice up a UI is to give it more drag and drop functionality.</p>
<p><object classid="clsid:02bf25d5-8c17-4b23-bc80-d3488abddc6b" width="550" height="179" codebase="http://www.apple.com/qtactivex/qtplugin.cab#version=6,0,2,0"><param name="autoplay" value="false" /><param name="src" value="http://www.thewojogroup.com/wp-content/uploads/2009/04/dragdrop3.mov" /><embed type="video/quicktime" width="550" height="179" src="http://www.thewojogroup.com/wp-content/uploads/2009/04/dragdrop3.mov" autoplay="false"></embed></object></p>
<p>These are just a few ideas of what you can do to make your user experience a little more fun for your users. Some of the best solutions involve innovative interactions like the swiping to unlock an iPhone, the motion sensor controls of the Nintendo Wii, or that first time you realized you could pan around Google Maps without reloading the page. Of course, you can&#8217;t always have an amazing breakthrough in user experience, but if you make it one of your goals to let your users have fun, you&#8217;ll find that their emotions will be more positive and thus their user experience will be as well.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/GtvjvWna_Y5kKCAInzSAk4Ms65I/0/da"><img src="http://feedads.g.doubleclick.net/~a/GtvjvWna_Y5kKCAInzSAk4Ms65I/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GtvjvWna_Y5kKCAInzSAk4Ms65I/1/da"><img src="http://feedads.g.doubleclick.net/~a/GtvjvWna_Y5kKCAInzSAk4Ms65I/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=bADvye46AwM:qsuj0WjoyaM:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=bADvye46AwM:qsuj0WjoyaM:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=bADvye46AwM:qsuj0WjoyaM:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=bADvye46AwM:qsuj0WjoyaM:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=bADvye46AwM:qsuj0WjoyaM:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=bADvye46AwM:qsuj0WjoyaM:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=bADvye46AwM:qsuj0WjoyaM:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/bADvye46AwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/04/adding-fun-to-your-user-interface/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
<enclosure url="http://www.thewojogroup.com/wp-content/uploads/2009/04/animatedfeedback.mov" length="1243856" type="video/quicktime" />
<enclosure url="http://www.thewojogroup.com/wp-content/uploads/2009/04/animatedfeedback4.mov" length="1115145" type="video/quicktime" />
<enclosure url="http://www.thewojogroup.com/wp-content/uploads/2009/04/dragdrop3.mov" length="305180" type="video/quicktime" />
		<feedburner:origLink>http://www.thewojogroup.com/2009/04/adding-fun-to-your-user-interface/</feedburner:origLink></item>
		<item>
		<title>Let’s Make a Deal – The Importance of Contracts</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/_hrtRio6_4Y/</link>
		<comments>http://www.thewojogroup.com/2009/04/lets-make-a-deal-the-importance-of-contracts/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 13:48:18 +0000</pubDate>
		<dc:creator>Kyle</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[Contracts]]></category>
		<category><![CDATA[Legal]]></category>
		<category><![CDATA[Liability]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=204</guid>
		<description><![CDATA[One of the first questions you must ask yourself if you are doing freelance work or running a small business is &#8220;will I use a contract?&#8221; Conventional wisdom indicates that you should always use a contract when entering into business with somebody else. Despite this advice, many freelancers or small business owners either do not [...]]]></description>
			<content:encoded><![CDATA[<p>One of the first questions you must ask yourself if you are doing freelance work or running a small business is &#8220;will I use a contract?&#8221; Conventional wisdom indicates that you should always use a contract when entering into business with somebody else. Despite this advice, many freelancers or small business owners either do not use a contract at all or use one that doesn&#8217;t spell out the agreement adequately. Our company has learned the hard way that writing effective contracts is a must. In this article, we&#8217;ll look at some of the main reasons why using a contract is a good idea.</p>
<h3>Getting on the Same Page</h3>
<p>One of the biggest advantages of using contracts is it allows you and your client to get a clearer idea of what the project entails. It can be used to clearly define payment terms, the project timeline, and the expected project deliverables. Our contract actually walks through and describes in clear terms our web design process. There is no need to view contracts as a necessary evil full of legal jargon. Instead, view the contract as a tool that helps both parties stay on track.</p>
<h3>Avoiding Scope Creep</h3>
<p>&#8216;Scope creep&#8217; is the project management buzzword that describes the phenomenon of ever-growing project demands. A client starts off wanting a simple website with a shopping cart, and before you know it they&#8217;re requesting live chat features, a discussion forum, and user profiles. Scope creep can also take a more subtle, more sinister form. It may involve really little things like constant requests to upload a bit of content or a suggestion that involves making one more page for the site. But, even these minor additions to the project can add up and kill your time if you aren&#8217;t careful. If you have a well-written contract and design proposal, then both you and the client can clearly see the scope of the project as originally agreed upon.</p>
<p>Scope creep is not necessarily bad in and of itself, as long as you have a way to deal with it fairly. After all, it&#8217;s unlikely that the client is going to know exactly what they want right when they first begin the project, and they are likely to learn things along the way that might require a shift in strategy. It is not realistic to stick rigidly to an original agreement, because things change and evolve over time. But, a contract can help you to fairly and reasonably manage a change in scope. Make sure that your contract contains provisions that lay out the costs associated with any expansion of the workload or significant change in direction that may occur during the course of the project. If managed correctly, &#8217;scope creep&#8217; can actually be a good thing &#8211; allowing you to get paid for doing more work on a project you are already working on.</p>
<h3>Provide Legal Protection</h3>
<p>Unfortunately, we live in a litigious society, so the risks of some sort of legal action are higher than ever. Do you want to appear in court without a signed contract to defend your position? On the other hand, if you are trying to collect money on a completed project, do you want to be in small-claims court without a signed agreement in hand? Obviously, we all would like to avoid this type of nasty confrontation, but even if you would never take it this far, there is no guarantee that your client will return the favor. Protect yourself with a contract. As long as you follow your end of the deal, a signed contract will come to your defense.</p>
<p>Even if you never actually go to court, the mere existence of a contract can really help you out. Clients who are tempted to bail will be a bit more hesitant when they realize that they made a legal agreement.</p>
<p>Note that a contract also provides the client with legal protection. A contract should also ensure that you, as the designer, don&#8217;t bail on your client or treat them unfairly. Be sure to explain this benefit to the client when asking them to sign a contract. Many people tend to be suspicious of contracts and suspect foul play whenever they are used. This is a false conception, though, because a contract actually protects both parties.</p>
<h3>Weeding Out the Bad Apples</h3>
<p>Frankly, requiring a contract is a good way to filter potentially terrible client relationships. If a client is unwilling to sign a contract, this is a sign of trouble ahead. Rather than lamenting the loss of a project, celebrate the fact that you may have dodged a bullet.</p>
<p>One of the biggest lessons our company has learned over the years is that we don&#8217;t want every single client we can get. Just like clients are looking for a good fit with a design company, you should look for a good fit with a particular client and project. Perhaps you&#8217;re desperately strapped for cash, and this advice sounds a bit idealistic. However, the headaches, lost time, and frustration that comes with a bad client relationship are not worth it, and often aren&#8217;t profitable in the end anyways. It definitely won&#8217;t be profitable if they bail on you mid-project or refuse to pay. But if they sign a contract, it indicates that they take the project seriously and probably at least intend to pay you.</p>
<h3>Why Not Have a Contract?</h3>
<p>What are the main reasons for operating without a contract? Perhaps the biggest concern is that clients won&#8217;t like them, since they may view it with suspicion. This is particularly true for smaller clients &#8211; many big ones have a lawyer on staff to look it over (and big companies expect to deal with contracts). However, as I&#8217;ve explained before, a refusal to sign a contract is a strong indication of a potential trouble client. Also, if a client seems uncomfortable about signing, take the opportunity to explain the benefits of the contract. A good contract will actually protect <em>them </em>as well, and it will allow both of you to get a clear idea of what the project entails.</p>
<p>Another objection to contracts may be that they are too time consuming. Drafting up a contract for each client is a laborious task &#8211; and this time could be better spent doing actual design work. However, in reality, you can probably make a contract template that applies to most projects, and vary it slightly for each client as needed. And with plenty of <a href="http://www.outlawdesignblog.com/2008/graphic-design-contracts-agreement-forms-webdesigner-contrats/">online resources</a> to help you, writing a good design contract shouldn&#8217;t be all that difficult. In part two of this article, I&#8217;ll go over some tips on what to actually include in a design contract and provide some more resources to make the whole process a lot easier.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/-_U8Ey5PjUbzSmnA2OZoAMl-444/0/da"><img src="http://feedads.g.doubleclick.net/~a/-_U8Ey5PjUbzSmnA2OZoAMl-444/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/-_U8Ey5PjUbzSmnA2OZoAMl-444/1/da"><img src="http://feedads.g.doubleclick.net/~a/-_U8Ey5PjUbzSmnA2OZoAMl-444/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=_hrtRio6_4Y:8quCLxgjpro:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=_hrtRio6_4Y:8quCLxgjpro:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=_hrtRio6_4Y:8quCLxgjpro:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=_hrtRio6_4Y:8quCLxgjpro:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=_hrtRio6_4Y:8quCLxgjpro:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=_hrtRio6_4Y:8quCLxgjpro:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=_hrtRio6_4Y:8quCLxgjpro:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/_hrtRio6_4Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/04/lets-make-a-deal-the-importance-of-contracts/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/04/lets-make-a-deal-the-importance-of-contracts/</feedburner:origLink></item>
		<item>
		<title>Twetris: twitter + tetris</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/VZ03c33nCaU/</link>
		<comments>http://www.thewojogroup.com/2009/04/twetris-twitter-tetris/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 17:44:23 +0000</pubDate>
		<dc:creator>Brett Wejrowski</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[fun]]></category>
		<category><![CDATA[game]]></category>
		<category><![CDATA[javscript]]></category>
		<category><![CDATA[tetris]]></category>
		<category><![CDATA[twetris]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=460</guid>
		<description><![CDATA[We developed a little creation called <a href="http://brett.wejrowski.com/twetris/" alt="Twetris">Twetris</a> that uses the twitter timeline to create blocks for a tetris game.  It's a simple javascript/html/css creation thats great for wasting time. <a href="http://brett.wejrowski.com/twetris/" alt="Twetris">Check it out!</a>
]]></description>
			<content:encoded><![CDATA[<p>We developed a little creation called <a href="http://brett.wejrowski.com/twetris/" target="_blank">Twetris</a> that uses the twitter timeline to create blocks for a tetris game. The high score list is published automatically to <a href="http://twitter.com/twetris">@twetris</a> and you can even retweet your high scores right from the game. It&#8217;s a simple javascript/html/css creation thats great for wasting time.<br />
<a style="text-decoration: none;" href="http://brett.wejrowski.com/twetris/" target="_blank">Check it out!</a></p>
<p><a href="http://brett.wejrowski.com/twetris"><img class="alignnone size-full wp-image-474" title="twetris3" src="http://www.thewojogroup.com/wp-content/uploads/2009/04/twetris3.png" alt="" width="500" height="433" /></a></p>

<p><a href="http://feedads.g.doubleclick.net/~a/8EkjN4fqMiZL1tsKVRTZVptiJ0k/0/da"><img src="http://feedads.g.doubleclick.net/~a/8EkjN4fqMiZL1tsKVRTZVptiJ0k/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/8EkjN4fqMiZL1tsKVRTZVptiJ0k/1/da"><img src="http://feedads.g.doubleclick.net/~a/8EkjN4fqMiZL1tsKVRTZVptiJ0k/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=VZ03c33nCaU:5xyirZ_bsm0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=VZ03c33nCaU:5xyirZ_bsm0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=VZ03c33nCaU:5xyirZ_bsm0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=VZ03c33nCaU:5xyirZ_bsm0:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=VZ03c33nCaU:5xyirZ_bsm0:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=VZ03c33nCaU:5xyirZ_bsm0:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=VZ03c33nCaU:5xyirZ_bsm0:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/VZ03c33nCaU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/04/twetris-twitter-tetris/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/04/twetris-twitter-tetris/</feedburner:origLink></item>
		<item>
		<title>April Fools ‘flip text’ Script</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/AP90KmoNyX0/</link>
		<comments>http://www.thewojogroup.com/2009/04/april-fools-flip-text-script/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 13:45:38 +0000</pubDate>
		<dc:creator>Brett Wejrowski</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[april fools]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[joke]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[text flip]]></category>
		<category><![CDATA[tricks]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=453</guid>
		<description><![CDATA[Over breakfast this morning, I put together a little JS script that will flip all the text on a page.  Just put this link AT THE BOTTOM of your page, and it should provide a little April Fools joke for some visitors. ]]></description>
			<content:encoded><![CDATA[<p>Over breakfast this morning, I put together a little JS script that will flip all the text on a page.  Just put this link <strong>AT THE BOTTOM</strong> of your page, and it should provide a little April Fools joke for some visitors:</p>
<pre name="code" class="html">

&lt;script type=&quot;text/javascript&quot; src=&quot;http://www.thewojogroup.com/flipEm.js&quot; &gt;&lt;/script&gt;
</pre>
<p>**Make sure to test this on your site, some flash objects or other plugins may not work properly</p>
<p>Enjoy!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/UmvIKH8OWuDfFNFdo3m94zeSbfg/0/da"><img src="http://feedads.g.doubleclick.net/~a/UmvIKH8OWuDfFNFdo3m94zeSbfg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UmvIKH8OWuDfFNFdo3m94zeSbfg/1/da"><img src="http://feedads.g.doubleclick.net/~a/UmvIKH8OWuDfFNFdo3m94zeSbfg/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=AP90KmoNyX0:TkrJyXlgHJ4:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=AP90KmoNyX0:TkrJyXlgHJ4:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=AP90KmoNyX0:TkrJyXlgHJ4:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=AP90KmoNyX0:TkrJyXlgHJ4:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=AP90KmoNyX0:TkrJyXlgHJ4:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=AP90KmoNyX0:TkrJyXlgHJ4:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=AP90KmoNyX0:TkrJyXlgHJ4:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/AP90KmoNyX0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/04/april-fools-flip-text-script/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/04/april-fools-flip-text-script/</feedburner:origLink></item>
		<item>
		<title>Developing vs Programming</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/C63iZgshNoM/</link>
		<comments>http://www.thewojogroup.com/2009/03/developing-vs-programming/#comments</comments>
		<pubDate>Thu, 26 Mar 2009 15:34:51 +0000</pubDate>
		<dc:creator>Brett Wejrowski</dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[application development]]></category>
		<category><![CDATA[Coding]]></category>
		<category><![CDATA[Coding Style]]></category>
		<category><![CDATA[developing]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=442</guid>
		<description><![CDATA[I'm a mediocre programmer, at best.

When I'm programming, I need 8 different tabs open with every reference site I can get for a particular language.  I google function names constantly, most of my debugging time is spent with dumb syntax errors, and I'm never going to be able to use Regular Expressions off the top of my head.

So what can mediocre programmers like myself do? Develop. I'm going to go over a few tips for good application development, and how to use development methods that can improve your programming.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m a mediocre programmer, at best.</p>
<p>When I&#8217;m programming, I need 8 different tabs open with every reference site I can get for a particular language.  I google function names constantly, most of my debugging time is spent with dumb syntax errors, and I&#8217;m never going to be able to use Regular Expressions off the top of my head.</p>
<p>So what can mediocre programmers like myself do? Develop. I&#8217;m going to go over a few tips for good application development, and how to use development methods that can improve your programming, even if you lack superstar skills.</p>
<h3>Project Management</h3>
<p>There are too many different project management philosophies to mention here, and many of them are developed by very experienced and knowledgeable professionals in the industry.  However, <em>project management and planning remain to be the biggest downfall for most programmers</em>.  Many of these methods are made to apply to development teams, but you can abstract a lot of the ideas to individual projects.  Try to check out a few papers or books on the topic during your free time.</p>
<h3>1/3 Rule</h3>
<p>For most projects, I try to stick with the <strong>1/3 rule</strong>:  spend (approximately) 1/3 of your time on planning, 1/3 on coding, and 1/3 on testing.  Many programmers expect to spend the majority of the project timeline writing code, and believe that good code will drive the project.  However, I have found that most worthwhile final products are created from development timelines that have actual coding as a minority.  This 1/3 flow can often take iterations for different portions of a project, where you plan, code, and test small portions and move on to the next section.  But you will often find dedicating time to plan properly will cut down on actual coding, and proper testing will save you time in the long run.</p>
<h3>Start with Your User</h3>
<p>I am a big fan of top-down development.  There are a lot of different theories about development strategies and methods, but I have found that for real world applications, the single most important aspect of any program is the interface.</p>
<p>With that in mind, I start my planning with laying out the interface.  Implementation of this idea can vary depending on the project.  For example, you may start with wireframes and a user flow for a web application.  For something like <a href="http://www.thewojogroup.com/2008/10/simplecartjs-paypal-e-commerce-in-minutes/">simpleCart(js)</a>, I started by listing every way in which the user would interact with the code, including function calls, div classes, and html layout for cart items.  When you start your project by building out the interface first, you are ensuring that your program will adhere to the end-user functionality of the project.</p>
<h3>Compartmentalize Functionality</h3>
<p>It doesn&#8217;t matter whether you are a big believer in MVC (I am) or like procedural or object-oriented (I&#8217;m a OOP guy); you will find yourself improving your code by creating structure first, and then implementing code.  It is often beneficial to create functions (or objects) that relate to real-world goals or problems.  If you say to yourself, &#8220;I am going to need to store the current user preferences in a cookie,&#8221; you might want to create a function for exactly that.</p>
<p>By focusing on individual problems, it becomes much easier to create efficient code for that particular purpose.  In turn, you often write better code.  It also becomes much easier to debug; if you are having a problem storing to a cookie, you simply look at your &#8217;store to cookie&#8217; function.  Documentation also becomes extremely easy, as the purpose of your code becomes evident simply by looking at the function name.  I know this may be second nature to many developers, but it can&#8217;t hurt to mention it.</p>
<h3>Abstract Data Storage</h3>
<p>I&#8217;ve found that many projects outlast hardware, hosting, or storage implementations.  You may move your code to another server, decide to implement a different database system, or find that you outgrow your storage and need to keep data in more than one place.  In any of these cases, abstracting data storage and retrieval functions from the rest of your code will benefit you immensely.  Data storage is often the last part I consider for my project.  I often do most of my developing with two empty functions: load() and store(). They are usually the last thing I implement, as, in most situations, they are the least important to the functionality of your end-user.  It also becomes extremely easy to maintain consistency of your core functionality when switching to a new data implementation by simply altering these functions.</p>
<h3>Conclusion</h3>
<p>These are all very high level concepts, and it may or may not be clear how to actually implement some of them in your projects.  The overriding theme that I hope you can take away from this article is that every program looks the same from 10,000 feet.  Most great applications are built with the end-user in mind, and great development isn&#8217;t necessarily dependent on great code.  Please let me know if you guys have any other tips.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/GBbzhRuGyfBuTeupXhybyLw42qE/0/da"><img src="http://feedads.g.doubleclick.net/~a/GBbzhRuGyfBuTeupXhybyLw42qE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/GBbzhRuGyfBuTeupXhybyLw42qE/1/da"><img src="http://feedads.g.doubleclick.net/~a/GBbzhRuGyfBuTeupXhybyLw42qE/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=C63iZgshNoM:EyRZc0v_54o:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=C63iZgshNoM:EyRZc0v_54o:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=C63iZgshNoM:EyRZc0v_54o:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=C63iZgshNoM:EyRZc0v_54o:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=C63iZgshNoM:EyRZc0v_54o:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=C63iZgshNoM:EyRZc0v_54o:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=C63iZgshNoM:EyRZc0v_54o:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/C63iZgshNoM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/03/developing-vs-programming/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/03/developing-vs-programming/</feedburner:origLink></item>
		<item>
		<title>Tips and Themes from Future of Web Apps Miami</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/tCm7s77Vhkk/</link>
		<comments>http://www.thewojogroup.com/2009/02/tips-and-themes-from-future-of-web-apps-miami/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 03:05:32 +0000</pubDate>
		<dc:creator>Stephen</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[FOWA]]></category>
		<category><![CDATA[Future of Web Apps]]></category>
		<category><![CDATA[Miami]]></category>
		<category><![CDATA[Web Applications]]></category>
		<category><![CDATA[web apps]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=428</guid>
		<description><![CDATA[We all just spent a few dedicated days listening to talks and having long hard discussions about building web apps in Miami at FOWA. There&#8217;s so much to take away that it&#8217;s impossible and far out of the scope of this blog to cover it all here. However, we thought we&#8217;d share some of the [...]]]></description>
			<content:encoded><![CDATA[<p>We all just spent a few dedicated days listening to talks and having long hard discussions about building web apps in Miami at FOWA. There&#8217;s so much to take away that it&#8217;s impossible and far out of the scope of this blog to cover it all here. However, we thought we&#8217;d share some of the bigger points that really struck us.</p>
<h3>Build as little as possible to start.</h3>
<p>If you build a massive app with 300 features, then your users may be stuck using what you&#8217;ve given them. However, if you launch your app or new feature with the bare minimum, then your users will use what you&#8217;ve given them and tell you what direction to go to make improvements. A great analogy brought up by <a href="http://www.deltatangobravo.com/">Daniel Burka</a> of digg is the story of an MIT architect. This architect built a building and instead of sidewalks outside it they just covered everything in grass. Then they came back a year later and got on the roof. They took a picture of all the wear and tear on the grass made by the foot paths of all the people going to and from the building and covered them with cement to make the sidewalks. <em>Let your users pick the direction of your app.</em></p>
<h3>The future of web applications is people.</h3>
<p>This was a point brought up many times by multiple speakers. It revolves around the idea that we&#8217;ve started and built the web first, then we added people. We are going to focus greater attention on how to build the web more around people and less around technology. <a href="http://developers.facebook.com/connect.php">Facebook Connect</a> is a huge example that seemed to be everywhere at fowa, including a presentation by Dave Morin on the topic. Facebook Connect is just an example of the broader concept &#8211; if you build an app that brings about a lot of new tools and tech for users than you need to learn how to make those tools and tech revolve around people, not their function. <em>Build your apps around people, not just good function.</em></p>
<h3>Be a skeptic.</h3>
<p>Don&#8217;t ever think that because this tip helped person A it&#8217;s going to help you. Don&#8217;t listen to how this new tool coming out can really help person B and assume it can help you. Really, really think about the hundreds of tiny factors that made it work for them. Through that search you&#8217;ll find out what might work for you and you&#8217;ll see it&#8217;s nearly always somewhat different. Moral of the story, facebook connect is awesome but I don&#8217;t care (though lots of other people probably do). <a href="http://280atlas.com/">Atlas</a> from 280 north brought a tear to my eye it&#8217;s so good, but I don&#8217;t think it&#8217;s going to work out for me as well as he made it seem it would. Percentage coupons work for 37signals but why on earth should I think it will give me the same results? <em>Be careful of anecdotal tips, find out what works for you.</em></p>
<h3>Twitter, WTF?</h3>
<p>Seriously it&#8217;s gotten out of control. When I heard, &#8220;for the first time ever you can tweet to space&#8221; I thought, really? Is that surprising? Is twitter that old that we really view that as a breakthrough? I heard twitter said at fowa as much as I used to hear &#8220;web 2.0&#8243; thrown around. Don&#8217;t get us wrong, we&#8217;re not knocking it. We even have <a href="http://twitter.com/thewojogroup">our own twitter page</a> to prove it.  However, we did see 10+ people within twelve feet of us using twitter at once (in fact, we started tweeting just to see how many screens we could see our tweet on). <em>Google is not the Internet. Neither is twitter- and don&#8217;t forget that.</em></p>
<h3>Recognize the value of what you are creating.</h3>
<p>One of the first things mentioned at the conference by the opening speaker Jason Fried (of <a href="http://www.37signals.com/">37signals</a>) was that web developers need to start charging more. Many of us feel that we have to develop an awesome web app and provide it for free to get anyone to even pay attention. Jason argued that it hurts the industry. Rather than succumb to this temptation, we need to develop sustainable business models. If we create something that is truly of value, there is nothing wrong in charging a fair price for that value. <em>Free is dying, start making money.</em></p>
<h3>Give people a reason to love you.</h3>
<p>Consumers have more power than ever before. Not only do they have a growing number of choices, they have more information (and more potential influence over others) than in the past. If people are going to stick with you, they have to have a good reason to. And this comes back to truly caring about your customers. <em>As </em><a href="http://garyvaynerchuk.com/"><em>Gary Vaynerchuk</em></a><em> put so eloquently, &#8220;You want a marketing strategy? CARE!!!&#8221; </em></p>
<h3>Design matters. A lot.</h3>
<p>I tend to be a functionality guy. But the importance of compelling design was a theme that ran consistently throughout the conference. <a href="http://www.delicious-monster.com/">Delicious Library</a> was offered as a telling example; this program made millions by taking something that could already be done (making a catalog with Excel) and giving it an attractive and fun interface. Even though functionality is important, at the end of the day we enjoy using things that are well-designed. <em>Make your apps fun to use and good to look at, people lust for movie stars, not old fat balding men.</em></p>
<p>Overall Future of Web Apps Miami 09 was an excellent experience and we wouldn&#8217;t hesitate for a second to go back again. Great job to all the folks at Carsonified.</p>

<p><a href="http://feedads.g.doubleclick.net/~a/86bEUEUc5W_hcpCaKHyeFLamxrw/0/da"><img src="http://feedads.g.doubleclick.net/~a/86bEUEUc5W_hcpCaKHyeFLamxrw/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/86bEUEUc5W_hcpCaKHyeFLamxrw/1/da"><img src="http://feedads.g.doubleclick.net/~a/86bEUEUc5W_hcpCaKHyeFLamxrw/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=tCm7s77Vhkk:xzwtAQiVYnU:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=tCm7s77Vhkk:xzwtAQiVYnU:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=tCm7s77Vhkk:xzwtAQiVYnU:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=tCm7s77Vhkk:xzwtAQiVYnU:F7zBnMyn0Lo"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=tCm7s77Vhkk:xzwtAQiVYnU:F7zBnMyn0Lo" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/TheWojoGroup?a=tCm7s77Vhkk:xzwtAQiVYnU:D7DqB2pKExk"><img src="http://feeds.feedburner.com/~ff/TheWojoGroup?i=tCm7s77Vhkk:xzwtAQiVYnU:D7DqB2pKExk" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/tCm7s77Vhkk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/02/tips-and-themes-from-future-of-web-apps-miami/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/02/tips-and-themes-from-future-of-web-apps-miami/</feedburner:origLink></item>
		<item>
		<title>FOWA Miami next week!</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/6OnAY9Bmv5c/</link>
		<comments>http://www.thewojogroup.com/2009/02/fowa-miami-next-week/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 13:21:39 +0000</pubDate>
		<dc:creator>Brett Wejrowski</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Project Management]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[FOWA]]></category>
		<category><![CDATA[Miami]]></category>
		<category><![CDATA[twitter]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[web apps]]></category>
		<category><![CDATA[wojo]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=425</guid>
		<description><![CDATA[Ok everyone, we here at the wojo group are getting pretty excited for next week. On Saturday, we're packing up our cars and driving straight through the night. We're not stopping until we hit Miami. Why, you may ask? FOWA 2009!]]></description>
			<content:encoded><![CDATA[<p>Ok everyone, we here at the wojo group are getting pretty excited for next week.  On Saturday, we&#8217;re packing up our cars and driving straight through the night. We&#8217;re not stopping until we hit Miami. Why, you may ask? <a href="http://events.carsonified.com/fowa/2009/miami">FOWA 2009</a>!</p>
<p>For those of you who are a less of a geek than I, FOWA is the <a href="http://events.carsonified.com/fowa">Future of Web Apps Conference</a>.  It is one of many wonderful events that <a href="http://www.carsonified.com/">Carsonified</a> puts on every year.  We will have the pleasure of spending 3 days in downtown Miami, attending workshops, presentations, parties, and fraternizing with the &#8216;web-developers A-list&#8217;.</p>
<p>We are going to try to keep all of you updated from the conference this year, using this crazy thing called &#8216;Twitter&#8217;.  So, check out <a href="http://twitter.com/thewojogroup">twitter.com/thewojogroup</a> next week (Feb 22-24) for updates, pictures, and stories from FOWA Miami 2009.  </p>
<p>And for those of you lucky enough to be going to FOWA also, we&#8217;ll see you there!</p>

<p><a href="http://feedads.g.doubleclick.net/~a/Y805X17zbB5Ely9VVp4NqHC7TiA/0/da"><img src="http://feedads.g.doubleclick.net/~a/Y805X17zbB5Ely9VVp4NqHC7TiA/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/Y805X17zbB5Ely9VVp4NqHC7TiA/1/da"><img src="http://feedads.g.doubleclick.net/~a/Y805X17zbB5Ely9VVp4NqHC7TiA/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=IDlIT1ZX"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=8aEBwoTw"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?i=8aEBwoTw" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=YLyuMS0v"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?i=YLyuMS0v" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=0l8uS2YK"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?i=0l8uS2YK" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/6OnAY9Bmv5c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/02/fowa-miami-next-week/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/02/fowa-miami-next-week/</feedburner:origLink></item>
		<item>
		<title>U of M Career Fair</title>
		<link>http://feedproxy.google.com/~r/TheWojoGroup/~3/HTAtUgqWego/</link>
		<comments>http://www.thewojogroup.com/2009/02/u-of-m-career-fair/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 00:13:55 +0000</pubDate>
		<dc:creator>Brett Wejrowski</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[career fair]]></category>
		<category><![CDATA[michigan]]></category>
		<category><![CDATA[umich]]></category>

		<guid isPermaLink="false">http://www.thewojogroup.com/?p=421</guid>
		<description><![CDATA[Wow.  What a day.  The Wojo Group decided to have a couple representatives and a little booth at the University of Michigan's "Mpowered" career fair on their engineering campus.  I was able to speak with hundreds of engineers, business students, and designers about our company, our projects, and employment opportunities.  I wanted to say thanks to all those who were able to stop by our table, and I enjoyed learning about a lot of students, companies, startups, etc.  It was a great, albeit exhausting, day.  ]]></description>
			<content:encoded><![CDATA[<p>Wow.  What a day.  The Wojo Group decided to have a couple representatives and a little booth at the University of Michigan&#8217;s &#8220;Mpowered&#8221; career fair on their engineering campus.  I was able to speak with hundreds of engineers, business students, and designers about our company, our projects, and employment opportunities.  I wanted to say thanks to all those who were able to stop by our table, and I enjoyed learning about a lot of students, companies, startups, etc.  It was a great, albeit exhausting, day.  </p>

<p><a href="http://feedads.g.doubleclick.net/~a/5KmnpQKSxbH_sdz12MHKb9kwCHU/0/da"><img src="http://feedads.g.doubleclick.net/~a/5KmnpQKSxbH_sdz12MHKb9kwCHU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/5KmnpQKSxbH_sdz12MHKb9kwCHU/1/da"><img src="http://feedads.g.doubleclick.net/~a/5KmnpQKSxbH_sdz12MHKb9kwCHU/1/di" border="0" ismap="true"></img></a></p><div class="feedflare">
<a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=ZNki0V4c"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?d=41" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=NZoOfWka"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?i=NZoOfWka" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=w6vDJC95"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?i=w6vDJC95" border="0"></img></a> <a href="http://feeds.feedburner.com/~f/TheWojoGroup?a=m5L1wbeQ"><img src="http://feeds.feedburner.com/~f/TheWojoGroup?i=m5L1wbeQ" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/TheWojoGroup/~4/HTAtUgqWego" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.thewojogroup.com/2009/02/u-of-m-career-fair/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://www.thewojogroup.com/2009/02/u-of-m-career-fair/</feedburner:origLink></item>
	</channel>
</rss>
