<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title><![CDATA[Noverse]]></title>
  <link href="http://noverse.com/atom.xml" rel="self"/>
  <link href="http://noverse.com/"/>
  <updated>2012-03-24T15:52:50-04:00</updated>
  <id>http://noverse.com/</id>
  <author>
    <name><![CDATA[Hilton Lipschitz]]></name>
    
  </author>
  <generator uri="http://octopress.org/">Octopress</generator>

  
  <entry>
    <title type="html"><![CDATA[Almost Shipping]]></title>
    <link href="http://noverse.com/blog/2012/03/almost-shipping/"/>
    <updated>2012-03-24T15:25:00-04:00</updated>
    <id>http://noverse.com/blog/2012/03/almost-shipping</id>
    <content type="html"><![CDATA[<p>After a year of discussions, planning, designing, programming, testing and making it happen, we&#8217;re about to ship the 1.0 version of <a href="http://www.kifuapp.com">Kifu</a>.</p>

<p>But <em>almost shipping</em> is not the same as <em>shipping</em>.</p>

<p>The product is feature complete for version 1.0. It was a hard road getting here, and even harder to say <em>no</em> to features that would have delayed shipping. But it&#8217;s done, its <em>almost shipping</em>.</p>

<p><em>Almost shipping</em> are where you are when there are still hundreds of small and sometimes large details that need to be right before you truly ship a web app. Most are not code related. They include things like:</p>

<ul>
<li>Are the databases backed up, and can you restore from them if they fail.</li>
<li>Do you have redundant servers, in different data centers, on different networks? And do they fail-over properly when one dies.</li>
<li>Do you have a valid SSL certificate that works on all servers?</li>
<li>Are all servers and the app properly secured? And up to date? And running only what you need?</li>
<li>Are all assets served from a CDN? If not, why not?</li>
<li>Are your billing systems in place? Can you see who has paid for the service? Can you account for all the business you will do?</li>
<li>What about support? Do all the email addresses work? Is there someone who is monitoring them? Do you have a support web up?</li>
<li>Can users sign up? Does the sign-up work? Does the subdomain generation work?</li>
<li>Is the public web site visible? Is there news on it? Are all graphics and product descriptions up-to-date?</li>
<li>Is your marketing plan in place? And being executed? Do people even know about your product?</li>
<li>Are the logs rotated? And backed up? Does the server monitoring technology work?</li>
<li>Can you scale? Can the application scale from single user-developer mode to thousands of users in public? Do you even know how to do that?</li>
</ul>


<p>You can go from <em>almost shipping</em> to <em>shipping</em> without doing any of the above. But the experience of your first customers will suffer. We all remember the Twitter fail whale, and you still cannot get to your old tweets. We all remember the Tumblr downtimes. In those cases, they shipped before they were ready for the load.</p>

<p>So here we are, <em>almost shipping</em> <a href="http://www.kifuapp.com">Kifu</a>, making sure that all the details are working, so our first customers have a great experience.</p>

<p>It&#8217;s an exciting moment, waiting to see if all the work done was worth it, whether customers will love the product as much as we do. It&#8217;s also the beginning, the beginning of running a business and managing a product. Oh, the design and development work will not end, there is so much to do in future versions. But soon, it&#8217;s going to be out there. In front of you. Being used. Being talked about.</p>

<p>We&#8217;re almost shipping <a href="http://www.kifuapp.com">Kifu</a> and I cannot contain my excitement.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Presenting a Professional Indie Image]]></title>
    <link href="http://noverse.com/blog/2012/03/presenting-a-professional-indie-image/"/>
    <updated>2012-03-05T11:31:00-05:00</updated>
    <id>http://noverse.com/blog/2012/03/presenting-a-professional-indie-image</id>
    <content type="html"><![CDATA[<p>As my <a href="http://www.hiltmon.com">hiltmon.com</a> blog takes off, I am starting to get emails from indie developers promoting their wares. This is great, I love getting them, looking at new products and helping out where I can. But many of them fail on the basics of presenting themselves as the professionals they are.</p>

<p>In this article, I will present a checklist of all the things you need as an indie to present yourself to strangers via email with some credibility.</p>

<h2>Start with a Product or Service</h2>

<blockquote><p>You are what you do, not what you say. &#8211; C.G. Jung</p></blockquote>


<p>The first thing we strangers want to know is what you do. If you make a product, we want to know all about the product. It needs a name, a one paragraph elevator pitch and a screenshot. That is what hooks us. Follow up with point-form details. Answer the question why I would want to use your product.</p>

<p>If it&#8217;s a service you offer, we want to know all about that too. Same deal, package it as a product. Give it a name, a one paragraph elevator pitch and follow with some great benefits of your service. Answer the question why I should want to use your service.</p>

<p>Present the pitch professionally, using good grammar, fonts and limited color. Then provide a link to your site for more information. Chances are, we&#8217;ll click it.</p>

<h2>Have a Company or Trading Name</h2>

<p>Who would you rather purchase something from: <em>Hilton Lipschitz</em> (that&#8217;s me) or <em>Noverse LLC, A New York Company</em>? The company, of course. A company name presents a professional image better than a personal name. If you have spent the money to establish a company, you are already telling people that you are serious.</p>

<h2>Get your Company Domain Name</h2>

<p>Having a company name is all good, but if your email comes from <em>gmail.com</em> or worse <em>aol.com</em>, you do not look professional. Hosting email on <a href="http://www.google.com/apps/intl/en/group/index.html">Google Apps</a> is free, so there is no excuse not to do it.</p>

<h2>Web Site</h2>

<p>Run up a web site on your domain. If you make products, put them on the home page.  If you provide services, put them there first. Don&#8217;t use a canned web site if you can help it, people are sick of seeing the same Wordpress or Tumblr sites.</p>

<p>Make sure that there are at least the following other pages:</p>

<ul>
<li><strong>About:</strong> We want to know who you are, what your company does and why you set it up.</li>
<li><strong>Contact:</strong> Give us the ability to contact you via email, phone, twitter, etc. We may never use it, but its nice to know we can get in touch.</li>
<li><strong>News or Blog:</strong> Have an updated feed of news about your company, product or services. One thing that always looks unprofessional is if your web site looks abandoned.</li>
</ul>


<p>In the case of <a href="http://www.noverse.com">Noverse.com</a>, much of what I do unfortunately is not publicly available, or if it is, it&#8217;s under the banner of another company. That&#8217;s why I decided to put the blog front and center and make the <a href="http://www.noverse.com/services/">Services</a> and <a href="http://www.noverse.com/portfolio/">Portfolio</a> links be the first two at the top. The <a href="http://www.noverse.com/hire-us/">Hire Us</a> link comes next, because it gets people to contact us.</p>

<h2>Blog</h2>

<p>We&#8217;re indies, we&#8217;re a community. We&#8217;re all learning, making mistakes and gaining experience. One of the great thing about indies is that we also share our knowledge and experiences with each other, through blogs and tweets. You may not think it, but your trials and tribulations, your failures and successes when shared help us all. So create a blog. If you write about your products and services, put it on your company web site, if you write about your passions or hobbies, create a personal blog.</p>

<p>Blogging not only tells us that you are still in the game, it also creates your voice, your personality, your image on the web. Your company may change, but you remain the same. People will remember you as you chop and change, having a consistent blog will help people move with you.</p>

<h2>Do Support Right</h2>

<p>Many indies focus on product, then on marketing and forget about the most important people they do business with, their existing customers. These people have already paid you money, use your product or have benefitted from your services. They deserve the best royal treatment. They also happen to be the best pool of people to spread the word about you, your company and your product.</p>

<p>So do support right. Have a prominent support link on your page, establish a support email address or use a third party site like <a href="http://www.fogcreek.com/fogbugz/">fogbugz</a> or <a href="http://www.desk.com/">desk.com</a> to manage the process.  Make sure you respond to every email and support call promptly and clearly.</p>

<p>One of the first things I look for when I see a new indie site is whether there is a support link or not.</p>

<h2>The Social Thing</h2>

<p>Grab your company and product name in all the social networks (if you can). Tweet your new articles and product releases. Share them on LinkedIN, Google+ and anything else that matters. You may not start out with many followers, but you need to build the history.</p>

<p>One thing I do is use twitter lists to monitor indie twitter accounts. These tweets do not appear in may main timeline (it&#8217;s busy enough) but I get to look at them at least once a day to keep up.</p>

<h2>Why wait?</h2>

<p>Get started now, register your company, grab a domain, setup your email and write your &#8220;Hello World&#8221; first blog post. Then share it with all of us.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[End of Life - Sights to See and Emergency List]]></title>
    <link href="http://noverse.com/blog/2012/02/end-of-life-sights-to-see-and-emergency-list/"/>
    <updated>2012-02-12T21:10:00-05:00</updated>
    <id>http://noverse.com/blog/2012/02/end-of-life-sights-to-see-and-emergency-list</id>
    <content type="html"><![CDATA[<p>Noverse is sad to announce that we have taken down <strong>Emergency List</strong> and <strong>Sights to See</strong> from the iPhone App Store.</p>

<h3>What? Really? Why?</h3>

<ul>
<li>These apps were developed two years ago, for old versions of the iPhone, and no longer represent the best we can do. We were learning  iOS at the time, did not have access to the right designers and did the best we could back then. It got us the business we did the last 2 years. But they are not good enough to keep alive.</li>
<li>They were not selling. We had ~4,600 downloads of <strong>Emergency List</strong> and about 50 sales of <strong>Sights to See</strong> over <em>2 years</em>! Neither were volume sellers, nor profitable in any way.</li>
<li>The app store itself it getting overcrowded.  We don&#8217;t want to add to this overcrowding with our early apps. We would rather spend our time focussing on a few new products (including iOS) and have a small set of awesome apps in the store instead.</li>
<li>We&#8217;re not motivated to enhance or maintain them anymore, again, because there are too few customers. If we were, we&#8217;d rewrite and redesign them as we know so much better now.</li>
</ul>


<h3>To our Existing Customers</h3>

<p>The <strong>Sights to See</strong> server services will continue running, however we will no longer be adding or updating the data.</p>

<p>The applications will continue running on your iPhones, but make sure to back them up, because you will no longer be able to re-download them from the app store.</p>

<p>If you have any questions or comments, send us an email to <a href="mailto:comments@noverse.com">comments (at) noverse (dot) com</a>.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Moving to Hiltmon.com]]></title>
    <link href="http://noverse.com/blog/2011/12/hiltmon-com/"/>
    <updated>2011-12-27T09:04:00-05:00</updated>
    <id>http://noverse.com/blog/2011/12/hiltmon-com</id>
    <content type="html"><![CDATA[<p>You may have noticed less activity on this site. Or not. I have consolidated all my old blogs, and begun writing a more controversial and wide ranging blog at my personal domain <a href="http://www.hiltmon.com">http://www.hiltmon.com</a>. Expect that one to get new articles more frequently and on a wider range of subjects.  I am not sure what to do about this blog yet, so I&#8217;ll leave it up for now.  But check out <a href="http://www.hiltmon.com">http://www.hiltmon.com</a> for all the new and more interesting stuff.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Get it Brilliant]]></title>
    <link href="http://noverse.com/blog/2011/09/get-it-brilliant/"/>
    <updated>2011-09-17T13:33:00-04:00</updated>
    <id>http://noverse.com/blog/2011/09/get-it-brilliant</id>
    <content type="html"><![CDATA[<p>When it comes to software, there should be no such thing as &#8216;good enough&#8217; software.  Yet most software fits this bill, it does something &#8216;good enough&#8217; to get the work done or even sell.  Even though the user has to jump through hoops to do so, or create workarounds to make the whole thing work.</p>

<p>At Noverse, we don&#8217;t make &#8216;good enough&#8217; software.  Our products must be brilliant, they must be flexible, they must be proven correct, they must get the job done without workarounds, they must be fast and easy to use, they must be amazing.</p>

<p>So how do we do this?  We have a process, a set of software quality levels that must all be achieved, and we follow this process every time</p>

<blockquote><p>Get it Designed   </p><p>Get it Architected   </p><p>Get it Working   </p><p>Get it Right   </p><p>Get it Fast   </p><p>Get it Intuitive   </p><p>Get it Out</p></blockquote>


<p>Lets walk through each level</p>

<h3>Get it Designed</h3>

<p>When it comes to software, most scribble a list of requirements and start programming, spitting out classes and racing ahead.</p>

<p><strong>Programming is not good enough!</strong></p>

<p>Before we even start on any software project, we design.  In order to design, we need to understand the needs and the flows that the software must implement.  We need to understand what needs to be done, why it must happen, how it is being done and when it gets done.</p>

<p>And then we design.  We design a better <em>what</em>, we examine all the <em>why&#8217;s</em> to see if they should be done, we find better ways to do the <em>how&#8217;s</em> and we look to see if we can make the <em>when&#8217;s</em> happen faster.</p>

<p>And then we design some more.  We design a better workflow, we design out steps that are unnecessary and design in automations, we design in flexibility and scaleability.</p>

<h3>Get it Architected</h3>

<p><strong>Designed is not good enough!</strong></p>

<p>A good design will only hold together if it is properly architected.  We choose and plan the structure of the programs and components to ensure that they will all work together, that they can be maintained and scaled, and that we can build and test them independently.  We architect in the ability to flex the design, to maintain the software later and to even switch out components.</p>

<p>There are always things that are unknown at the start of a project.  Will this algorithm work? Can these components interact? Can this library handle the volume?  Before we start banging out classes, we identify the unknowns and create spike solutions to test them.  If the spikes work, we know the architecture will hold.  If they do not, we get the chance to find better solutions before we are too far down the development path.</p>

<h3>Get it Working</h3>

<p><strong>Architected is not good enough!</strong></p>

<p>All code we write must compile.  It seems obvious to say this, but its not uncommon for others to work on code-bases that do not compile for days on end, hoping to get to a compilable state.  Our code must always compile.  But that does not mean it works.</p>

<p>All code we write must pass tests.  Not only must it pass tests for success, but also pass tests for failure and where necessary, tests for stress.  If code passes all the tests we can think of, we know it works.  If we change the code and the tests still pass, we know it works.</p>

<p>And we release early and often.  Daily if we can.  Which means we expose our customers to changes in the software as it happens.  And its pretty embarrassing to release non-functional software when the customer is watching.</p>

<h3>Get it Right</h3>

<p><strong>Working is not good enough!</strong></p>

<p>Our software must also be right.  All calculations, all validations, all algorithms, all integrations, all formats, all reports, all deliverables must be right.</p>

<p>How do we know if it is right?  We check. And re-check.  We compare the results of our calculations with other systems, we compare our results with the manual processes we are replacing, we compare our outputs with external parties, we compare our results with the design and we embed these comparisons in even more tests.</p>

<p>We are rigorous about this, but this rigor pays off in being able to trust our software.  If we see a number on the screen, we know that number is good.</p>

<h3>Get it Fast</h3>

<p><strong>But right is not good enough!</strong></p>

<p>Our software must also be fast.  It&#8217;s no good if our software gets a calculation right if it takes too long to calculate it.  It&#8217;s no good if our software executes a workflow impeccably but takes so long that it was easier to do the same flow manually.</p>

<p>Our users want an instant response wherever possible, that is why they are investing in software.  Our users want to get more done in the same time with the same or fewer resources.  And our users will not use nor enjoy the experience of using slow software.</p>

<h3>Get it Intuitive</h3>

<p><strong>But fast is still not good enough!</strong></p>

<p>Software that creates the right outputs quickly but is hard to use is just as likely not to get used and to create user frustration.</p>

<p>Our software has to be easy to use, and to be easy to be used by our target market.  What&#8217;s easy to use as programmers is not the same as easy to use by retired people.</p>

<p>So we make our software simple.  Making simple is hard, but it makes it easier to write and easier to use, and importantly, also easier to learn.  We make it intuitive, using the language and norms and flows that are familiar to our users. And we make it focussed, taking away distractions, extraneous choices and processes that have to be remembered by our users.</p>

<p>And we try so very hard to make the software state clear, so that after every interruption by the real world, our users can quickly remember &#8216;where was I and what was I doing&#8217; by glancing at the screen.</p>

<h3>Get it Out</h3>

<p><strong>But intuitive is <em>still</em> not good enough!</strong></p>

<p>We get it out.  Releasing early, releasing often.  As soon as the customer, the user and anyone else for that matter starts playing with the software, we get feedback.  We quickly learn where our design assumptions were maybe off base, or where our flows can be improved, or where there are ways to make the software better by watching how they interact with it.</p>

<p>By getting it out, we catch errors and misunderstandings early enough.  By getting it out, our customers and users become part of the development process.  By getting it out, and by listening to and watching our users, we get to become better programmers and make better software.</p>

<p>And we ship.  We finish the product.  We get the final product out into the client or into the market.  Until we ship, our software is not good enough.  Until the customer and our users say so, our software is not good enough.</p>

<h3>The Process</h3>

<p>So next time you need software, follow the process to get brilliant software, until then its just not &#8216;good enough&#8217;.</p>

<blockquote><p>Get it Designed   </p><p>Get it Architected   </p><p>Get it Working   </p><p>Get it Right   </p><p>Get it Fast   </p><p>Get it Intuitive   </p><p>Get it Out</p></blockquote>


<p></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Alpha Testing]]></title>
    <link href="http://noverse.com/blog/2011/07/alpha-testing/"/>
    <updated>2011-07-31T15:36:00-04:00</updated>
    <id>http://noverse.com/blog/2011/07/alpha-testing</id>
    <content type="html"><![CDATA[<p>Everybody talks about Beta testing, unit testing and integration testing, but there is little on Alpha testing out there.  At Noverse, we do them all.</p>

<h3>What is Alpha Testing?</h3>

<p>If you follow the Wikipedia definition, <a href="http://en.wikipedia.org/wiki/Software_release_life_cycle#Alpha">Alpha</a> testing happens when the product is incomplete and yet still handed over to a testing team inside the organization.  And Beta testing happens when the customer gets to test pre-release versions.</p>

<p>For us, a small indie developer, we have no separate testing or Q&amp;A team, so our Alpha testing is done with our customers as well.</p>

<h3>How do we run it?</h3>

<p>We follow the agile software practice of <a href="http://en.wikipedia.org/wiki/Release_early,_release_often">release early, release often</a>.  As soon as we have sufficient framework to run the application and as soon as the first features emerge, we release the product for Alpha testing to our customers.</p>

<p>We tell our customers what we are doing and what to expect.  Incomplete software, workflows that only have the first steps, links that go nowhere, forms that do not save data and buggy software are all part of Alpha testing.</p>

<p>Every time a feature is added or completed, and its automated test components added, we issue a new Alpha release.  We email and publish release notes to point out what&#8217;s new and needs to be looked at.  And we solicit feedback on it.</p>

<h3>Why do we do it?</h3>

<p>Alpha testing is as much about testing as it is about feedback.  With &#8216;release early, release often&#8217;, the goal is to bring the customer deep into the process of development and to give them a platform to comment and feedback upon.  For customers, having an incomplete process or half-done screen to point at and prod makes all the difference in being able to communicate with us Vulcan developers.</p>

<p>By calling it testing, we give more and we get more back. We start to track feedback as bugs, and document the fixes and changes in source code control and in tests.  We solicit feature requests and changes earlier in the development process so we can plan future work and directions better.  And we provide the tools and practice to our customers to look at the application closely and critically, enabling them to provide better and more meaningful feedback.</p>

<p>I always say that the best response we get from our customers on each Alpha release is &#8220;This is great, where&#8217;s the next step&#8221;.  But the truth is that the best responses we get are clarifications on our misunderstanding of the needs or flow, changes in terminology or naming, or the identification of new and unique bugs that we did not see so early in the process that they are easy to address before they become structural.</p>

<h3>What do our customers think?</h3>

<p>Most customers feel pressure when it comes time to test.  They have no experience with testing or accepting software, know not where to start or what to do.  With Alpha testing it&#8217;s a lot easier on them.  There are fewer features to play with, fewer screens to look at, and the release notes guide them where to play next.</p>

<p>And they love it.  They jump on each release, work their way through the flow to the new features, poke and prod at them, ask questions of us and give us awesome feedback.</p>

<p>And when it comes time to move on to Beta testing, they are already familiar with the product, with testing, with reporting bugs and requesting features.  Nothing to fear here.</p>

<h3>Right now</h3>

<p>Over the last 10 days, I have published the first 3 Alpha releases of our new product to the team.  And they are happily going at it, finding features, discussing flows, thinking about naming and asking where the next feature is.  As it should be.</p>

<p>So in your next project, instead of waiting until you think you have a full, bug-free and complete product, try Alpha testing.  Send out the screens and flows as you develop them, the incomplete and unstable, your customers will be more involved, will learn to test better and you will get better feedback.  And build a better product.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Keeping Customers Engaged Early]]></title>
    <link href="http://noverse.com/blog/2011/05/keeping-customers-engaged-early/"/>
    <updated>2011-05-13T17:27:00-04:00</updated>
    <id>http://noverse.com/blog/2011/05/keeping-customers-engaged-early</id>
    <content type="html"><![CDATA[<p>The early stages of a software development project are brilliant for a designer/developer and painful for a customer.  For the developer, the challenge of design, the joy of programming the core functionality, and the absolute bliss you get from making something great keeps the developer engaged.  The customer sits and waits.  And waits.</p>

<p>Traditionally, that wait lasts a long time, all the way until Alpha builds are available.  Even with agile programming techniques, there really isn&#8217;t much to show the customer during the early stages.  Even in iPhone development, you rarely send out builds until late-Alpha stage.  And it&#8217;s hard for customers to remain excited and engaged when they cannot see, touch and feel the product.</p>

<p>A lot of developers, including myself, alleviate the customer&#8217;s boredom with weekly project status reports.  We write about all the new features we added this week, the design changes applied, the bugs wrestled and defeated, and all the other things we developers find exciting.  To customers, it&#8217;s just a pile of text that means very little to them.  Oh they do read it, and they do discuss it.  But, its just text.</p>

<p>What is needed is &#8216;Show and Tell&#8217;, not just &#8216;Tell&#8217;.</p>

<p>To create the &#8216;Show&#8217; we invested in <a href="http://www.telestream.net/screen-flow/overview.htm">ScreenFlow</a>, a screencasting application.  Not only do we send the weekly report, but we also regularly attach a screencast showing the application in action in the development environment.  We show the new features, we run the workflows, we point out the changes made, we show the bugs that have been squashed.</p>

<p>And customers love it.  They watch each screencast several times, they call up to discuss scenes and things they saw on the screen, they give feedback, question decisions, and get heavily engaged in the product development.  They show the screencasts to their colleagues, showing off their proud new software as it grows.  They keep the screencasts long after the application has been delivered to show others how the application evolved.</p>

<p>Screencasts also help when trying to explain a feature. We&#8217;ll often create a single scene video and send it out to help clarify a point or to explain our thinking.  If the customer can see what&#8217;s happening, they find it easier to understand it, discuss it, question it and provide feedback on it.</p>

<p>It does take you away from developing to create these.  But with practice, and the fact that we&#8217;re not making a Hollywood production, we have managed to get the production down to a few easy steps:</p>

<ul>
<li>Create a point form list of features to show. Its easy, since this already exists in the status report.</li>
<li>Use Screenflow to capture the a scene for selected key points.</li>
<li>Use Photoshop to create the static pages, like the introduction slides, scene breaks and the end credits.  This is easy since we have a template, so we just change a few words and export to PNG, change a few more words, export again.</li>
<li>Assemble the scenes and images in Screenflow, and add a few transitions, to produce the initial movie.</li>
<li>Load the movie into a new Garageband podcast project and record the voice-over (We do it in one take - remember, not Hollywood), add a few zingers, and we&#8217;re done.</li>
</ul>


<p>Up until the moment you can hand over the first build of the application for the customer to play with, sending them screencasts is the next best thing.  They can see the product, see how it looks and works, show it off and be  part of the evolution of their software. They can save the video to review later.</p>

<p>An engaged customer is a happy customer. An engaged customer makes us better designers and developers. An engaged customer leads to a better product.</p>

<p>So next time you write a boring project status report, make a quick video as well.</p>

<p>You&#8217;re welcome.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Time and Material Contracts, with a Process]]></title>
    <link href="http://noverse.com/blog/2011/04/time-and-material-contracts-with-a-process/"/>
    <updated>2011-04-05T11:48:00-04:00</updated>
    <id>http://noverse.com/blog/2011/04/time-and-material-contracts-with-a-process</id>
    <content type="html"><![CDATA[<blockquote><p>Call in a contractor to fix a hole in your roof.  On a fixed price contract, they will rush to the roof, staple a plastic sheet over the hole and be done in 10 minutes.  On a time and materials contract, they will wait for permission to go onto the roof, and sit up there for hours texting their mates, then staple the plastic sheet.  On an equity share contract, they will move in, and place a bucket under the hole.</p></blockquote>

<p>Noverse LLC always uses Time and Materials Contracts for engagements, never fixed price or equity share agreements.  So why is that?</p>

<h3>Why Contracts?</h3>

<p>Seems like a silly question, but many, many indie businesses do work to a verbal agreement or handshake.  And both parties usually get screwed.  The client often feels that they did not get the work they asked for, or it took too long and should not pay (nor do they have to), and the indie feels they did do the work and should get paid (whether or not they deserve to).  There is disagreement on rates, payment schedules, deliverables, timing, you name it.  Since no contract is in place, both parties are aggrieved, but there is no solution.</p>

<p>At Noverse, we love our clients and we love our contracts.  This is a business after all, and the contract ensures that both parties, us and our clients, know exactly what the business is, what payments are agreed, what deliverables are acceptable, what timeframes are due and what do do if things go wrong.  With a contract in place, we can all get onto the real fun stuff like actually designing, developing and delivering awesome software together.  With a contract in place, everyone knows the what, the when, the who and the how of the engagement.</p>

<h3>Why Fixed Price</h3>

<p>Fixed price contracts are those where an agreement is reached for a stated set of deliverables for a single given invariant price.  Fixed price contracts often include payment schedules, time limits and strongly worded penalty clauses.</p>

<p>Fixed price contracts are great when the deliverables are well known and understood, where the service has been done before and where the supplier and client are both confident that it is achievable.  Fixed price works great installing swimming pools, where the supplier has installed hundreds and knows the work involved <em>because they have done it before repeatedly</em>.  Fixed price works great when the supplier is delivering a manufactured item, like airplanes or other machinery, or performing a service with known parameters like mowing the lawn every week, or when the supplier can provide the same service or product to multiple clients without changing the service or product.</p>

<p>Fixed price fails when there is design, creativity or a lack of clarity in the deliverables.  No one knows how long it will take to design a new advertising campaign, or create a web site where the content has yet to be defined.  Fixed price fails when the scope of work is unclear, such as when asking an architect to design a building or asking a research team to come up with a new medicine.  And fixed price fails when the process requires iteration, which is why contract lawyers never use fixed price to handle negotiations.</p>

<p>Fixed price is generally good for the client, especially if they can nail down the deliverables clearly.  The client gets a predictable product or service for a known price in a known timeframe.  It&#8217;s not always good for the supplier if high client involvement is required as the client is not incentivized to achieve the same timeframe.</p>

<h2>Why Equity Share</h2>

<p>Equity share contracts are those where an agreement is reached for a stated set of deliverables in return for an equity stake in a company instead of payment.  This is common in startups and in single purpose businesses (companies created for a single engagement).  The client does not have to fund the product or service and the supplier gets a share in the long term income of the startup or completion income for the business.  This works great if the startup is successful.  This works great of the single purpose business wins the deal.</p>

<p>But most of these deals fail.  Startups are invariably not successful.  For each success we hear of, there are hundreds if not thousands of failures.  Single purpose businesses, like startups, rarely make money, but when they do, they do well.  Since the client does not have to fund the work, it&#8217;s good for them.  Since the supplier is carrying the risk of no return in the deal, its usually bad for them.</p>

<h2>Why Time and Materials</h2>

<p>Time and materials contracts are those where an agreement is reached for a stated set of deliverables while reimbursing the supplier for their fixed and variable costs with a markup.  These contracts are great where fixed price contracts are terrible.  Contracts to create new products, design new things, do stuff that has never been done before, or even just see if something can be done, are perfect candidates for time and materials.  The deliverables might be known, but the time and effort required to achieve those deliverables are unknown.</p>

<p>This is not as good for the client.  At the start, they have no idea what the total contract cost will be, and it sure is hard to get budget for a variable contract.  The client also has to trust the supplier not to waste their time and money when, technically, there is no incentive for the supplier to work quickly or efficiently.  Its good for the supplier as they can work without pressure, iterate and spend whatever time they need to get the deliverables done to client satisfaction.  Of course, a lazy supplier still gets paid under this contract (although they will never get another contract with the same client).</p>

<p>Noverse does time and materials contracts because we never know the <em>true</em> scope of work.  Oh sure we know what the end deliverables should be, but how to get there is usually unclear.  Software design is a learning experience for both us and the client, and there is no way to know how long for sure it will take to do it properly.  Software development is also unpredictable, no way to know what problems and issues will arise.  And invariably, the client environment is not static, their needs do change as they learn more, as their business evolves and as the software starts taking shape.</p>

<h2>How we make Time and Materials palatable</h2>

<p>Since time and materials contracts are generally supplier (that&#8217;s us) friendly, here are the things we do at Noverse to make sure that these engagements do not get away from us and end up costing our clients more money.</p>

<ul>
<li><strong>We start with a Statement of Work</strong>, that expressly defines the deliverables and limits the scope of work.  We agree up front, and attach to the contract, what the deliverables will be.  This limits the scope of the engagement to achieving those deliverables and nothing else.  Often, our Statements of Work also state things that may be assumed deliverables and explicitly remove them from scope.  This protects the client in that they will only be spending money on us delivering that which they want us to deliver.</li>
<li><strong>Then we make an estimate</strong>.  Its a guess in many respects, but the best we can at the start.  That estimate is used as a basis for the engagement time and payment schedules.  And we apply ourselves as if that estimate was a fixed price agreement.  We report weekly on time consumed against estimate, trying to match or beat the estimate.  We continually retune our work and focus to get back on track.  Clients like this as they have set their expectations on the estimate and we are continually trying to beat those expectations.</li>
<li><strong>Release early and release often</strong>.  Sometimes daily.  As each new module grows, Noverse releases it to the client.  This is great for the client because they have something to play with, something to discuss and they can objectively watch our progress.  This is great for us because we get feedback early when its easy to change and fix things, and it keeps our clients very involved in our work.  It also helps in cases where we have misunderstandings in functionality or direction as these are made apparent early and are fixed early, enabling us all to remain on track.  The best response from our clients on a release: &#8220;This is great, where&#8217;s the next bit&#8221;.</li>
<li><strong>Spike the critical areas</strong>.  One of the things we do early in an engagement is try to identify the areas where we have the least understanding or perceive the most risk in implementing.  Maybe there is an interface we are unsure about, or a calculation that we&#8217;re not sure what it should be or how it works, or a data set that may not be clear. In these cases we start with a few spike solutions to implement those problem areas. We&#8217;ll write a small program to do that interface, implement that algorithm or load that data set.  In doing this, we spend a little more time at the start of the engagement tackling the big and nasty problems.  This is good for us as once the nasty problems are solved, the rest of the delivery is easy (usually).  This is great for our clients because any issues and clarifications are dealt with early, and any changes are identified early.</li>
<li><strong>Value and manage change</strong>. We&#8217;re all learning as we design a product, as we develop a product, as as the client gets their hands on the growing product.  And as we learn, so the scope and nature of the deliverables changes.  Sometimes this makes the engagement longer and cost more, sometimes less.  Since we have an estimate, Noverse ensures that all changes are reported and the estimate is continually updated to reflect the new changes.  That way, clients are happy because the variation is known and agreed, and expectations are adjusted.</li>
<li><strong>We sometimes say no</strong>.  That&#8217;s right, we say no to implementing features we believe are unnecessary, we say no to designing and developing modules that are not needed.  Noverse has the same passion to create a great solution for the client as the client does, and we apply all our knowledge and experience to achieve that goal.  But many clients add features (and therefore time and cost) to engagements when these features are not needed.  Noverse advises our clients when we think these are extra&#8217;s, bells and whistles, or unnecessary features.  The first time it happens, the client is shocked and surprised.  But after that, we always get appreciation.  And it helps us both rein in time and materials contracts.</li>
</ul>


<p>So next time you are offered a time and materials contract, look at the process.  Look at how the supplier tries to make it work for you.  Look at how transparent the supplier is. Time and materials contracts, coupled with a great process, are the best solution to independent software design and development for both clients and indies, and thats why we do it at Noverse.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Reviews are not Support Requests]]></title>
    <link href="http://noverse.com/blog/2011/03/reviews-are-not-support-requests/"/>
    <updated>2011-03-21T11:13:00-04:00</updated>
    <id>http://noverse.com/blog/2011/03/reviews-are-not-support-requests</id>
    <content type="html"><![CDATA[<p>One of the biggest things missing in the iTunes App Store is the ability for the developer of an app to respond to complaints raised in the reviews section of their app.</p>

<p>We all know that the purpose of a review is to document an honest experience with a product.  We all also <em>should</em> know that every app on the store has a support link, where customers are <em>supposed</em> to go to report any issues, errors or problems, or to ask questions of the developer.</p>

<p>In reality, customers don&#8217;t deal with support, they document issues as reviews on the App Store.  And potential customers who read these reviews assume the app does not work, or is fatally flawed, or that the issue has not been dealt with, and do not purchase the application.</p>

<p>Reviews are a one way street in communication, customer to public.  There is no way for the developer to respond that the issue may have been temporary, or that a server-side fix has been implemented or that the next version has been submitted that corrects this issue.</p>

<p>I know Apple &#8216;clears&#8217; out reviews for each version release in a half-hearted attempt to sweep this under the version number carpet.  I also know that several developers change their description top-lines to respond to reviews, but that usually puts potential customers off as they read about bug fixes first and not about the product.</p>

<p>So I ask, Apple, please add a feature that allows the developer, and only the developer, to kindly respond to the customer that they have heard their complaint, and are working diligently to fix it.</p>

<p>And if you are worried that some developers may abuse this feature, feel free to provide only a limited set of canned responses (We&#8217;re looking at it, fix is on the way, &#8230;) and a generous thank you to the customer for reporting the issue.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[To a nail, everything looks like a hammer]]></title>
    <link href="http://noverse.com/blog/2011/03/to-a-nail-everything-looks-like-a-hammer/"/>
    <updated>2011-03-05T10:27:00-05:00</updated>
    <id>http://noverse.com/blog/2011/03/to-a-nail-everything-looks-like-a-hammer</id>
    <content type="html"><![CDATA[<blockquote><p>One of the most common scenarios I see is companies using Excel to run their core business. Whenever a new report is needed, new analysis, new form, data conversion, no matter the task, they turn to Excel. They make everything look like a nail, and the only tool they understand is Excel, so they use it like a hammer. The result?  Manual processes, inconsistent data, key-person dependencies, inflexibility, pain and suffering. They call Noverse LLC in, but fear using other platforms, because they only know Excel.  There is hope.</p></blockquote>

<p>I write a lot of software for hedge funds and other corporate clients.  Whenever I design a new piece of software, I also recommend which tools I prefer to use for that project.  No matter what I recommend, the client always rejects it in favor of the tools they know.</p>

<p>If they cannot get it in Excel (and we do not offer Excel), then it&#8217;s C#, SQL Server, always on Windows.</p>

<p>Their reasoning makes sense.  They usually have a small IT staff, they are calling Noverse LLC in because they do not have the time or skills to get something done, and they have to maintain it later.  They know C#, they know SQL Server and they know Windows.  And when they do need to grow their IT team, they can easily hire single-skill workers, who are easy to find, reasonable cheap and easy to hire.</p>

<h3>It&#8217;s not a Nail</h3>

<p>I, on the other hand, believe this is the incorrect approach. Each task is possibly quite different, requiring the right tools. I believe companies should embrace new platforms, tools and technologies. And here is why.</p>

<p><strong>Speed of Development: It can be written faster.</strong> C and C++ are great for compute intensive tasks.  Javascript is great for in-browser scripting.  Ruby, Python and Perl are excellent for file manipulation and delivery.  You can use C# or Java for all of the above, but it takes longer to write than using others (except may be C), is usually less maintainable because the code size is so much greater and getting the architecture right is that much harder. Since programmers are almost always under deadline, using the right language for the right the component can get it done quicker. And on modern operating systems and processors, the execution performance difference is negligible.  In one of my previous funds, we replaced a huge amount of manual work and integrated the processing in a risk management system with a bunch of Perl scripts.  They had tried to do it on C++ and failed.</p>

<p><strong>Better Programmers: It can be written better.</strong> A programmer who knows more than one programming language, who is skilled in several scripting technologies and main-line languages is, by definition, a better programmer. They have a larger set of programming patterns to design and develop from, a wider range of skills that can be employed and know a wider range of libraries to improve their deliverables. Knowing multiple platforms enables the programmer to understand the strengths and weaknesses of different platforms, choose the right platform for each job, and maintain a wider range of systems.  It makes them more productive and more valuable.</p>

<p><strong>Better Flexibility: It can be easier to change.</strong> Business changes every day. Your company needs to be nimble and respond quickly, or opportunities may pass you by. In the hedge fund game, it is not unusual for IT to tell the business it will take weeks to add a new interface or process a new data set.  In reality, it&#8217;s the tools they use that limit them. In a previous fund, I used Perl to write all file moves and transforms, which enabled a single programmer to part-time add, maintain and change all our file and data processes, with turnaround times in the hours, not weeks.  In a later fund, I did use C#, but to create a meta-data driven file fetch and transform process (instead of writing each file transfer and processor individually), which made us even more nimble and flexible.</p>

<p><strong>Platform Cost: It can be cheaper.</strong> Windows costs money, SQL Server costs more, even the C# developer tools cost money. Linux? Free. MySQL? Free. Ruby on Rails? Free.  No matter what Gartner and CIO Magazine say, open source is cheaper to buy, cheaper to run and cheaper to maintain. Even more extreme, I ran Macintoshes at my last hedge fund and they were net cheaper than their Windows counterparts, even though the hardware was beefier and more expensive up front.  If you need to go compute intensive, or large memory, or run lots of threads, look away from Windows.  MySQL is blitzing fast for small to medium sized databases, and free. High performance web services look the same from the client whether written in Ruby on Rails or ASPX.</p>

<p><strong>Security Infrastructure: It can be more secure.</strong> Based on empirical evidence, what is more secure, IIS on Windows or Apache on Linux? Answer: Apache has more documented vulnerabilities, but is way more secure. Yet most companies remain on the Windows monoculture.  I have noticed a trend in the super-large companies moving away from Windows, but they still remain stuck on Java.  If you are going to have a public facing server, and do not want load up on firewalls, intrusion detection systems and funky router configurations, why not use a Linux server out there.</p>

<p><strong>Scaleability and Load: It can handle it.</strong>  A common argument against using the newer scripting technologies or platforms is that they do not scale, they can&#8217;t handle the volume and stresses of a true corporate data workload. Rubbish! Apache runs the largest and busiest web sites on the planet. Ruby on Rails runs Twitter. PHP is Wordpress. In terms of platform maturity, C# and Ruby are about the same age, as is JavaScript to Java, and both Python and JavaScript are more ubiquitous.</p>

<p><strong>Support: It will stick around.</strong> The final argument against using non-Microsoft or non-Oracle (Java) platforms is that companies are afraid that the platform they choose will not be supported, what if something goes wrong.  Well, Red Hat makes a supported Linux, Apple makes a supported Unix (OS X is an excellent Unix), and both support the open source components on their platforms. Oracle offers a supported MySQL. Open source software is supported by the community, there are thousands of people out there finding and fixing bugs, documenting workarounds and patches, and improving these platforms. And there are some serious players, like IBM and Facebook, depending on these technologies, they will not let them fall.</p>

<h3>Use the right Tool</h3>

<p>In my experience, about half of corporate computing is moving and transforming data around, between systems, between companies, and the rest is actual computation, reporting and email.  If you wrote the moving and transforming half in a scripting language, you would get it up and running quicker, it&#8217;s easier to maintain, and easy to change.  Do it in C# or Java, it will take longer, require more architecture and become inflexible.</p>

<p>So consider, on your next project, the opportunity to use a different tool or platform. Learn it, study its benefits and weaknesses, grow your skills, improve your flexibility. It will make your business more flexible, responsive and dynamic.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Delivering Solutions: Corporate, Appliance or Hosted]]></title>
    <link href="http://noverse.com/blog/2011/01/delivering-solutions-corporate-appliance-or-hosted/"/>
    <updated>2011-01-21T16:22:00-05:00</updated>
    <id>http://noverse.com/blog/2011/01/delivering-solutions-corporate-appliance-or-hosted</id>
    <content type="html"><![CDATA[<p>I have just spent the past few weeks working on the initial design of a new product for Noverse.  The question was how to deliver the solution to our customers.  We could:</p>

<ul>
<li>Install it on their infrastructure - lets call that the &#8220;Corporate Model&#8221;</li>
<li>Deliver a prebuilt computer with the software on it - lets call that the &#8220;Appliance Model&#8221;</li>
<li>Host it on our gear accessible over the internet - lets call it the &#8220;Hosted Model&#8221;</li>
</ul>


<p>Lets look at each in turn.</p>

<h2>Corporate Model - Install on their Hardware</h2>

<p>This is actually the easiest for us to do.  All we have to focus on is to write the software.  It is up to the customer to get the right equipment, integrate it into their network, install any prerequisites we ask for and to support and maintain this hardware.  We can then come in, install our code and we&#8217;re done.</p>

<p>Choose this model when the software is complex, uses prerequisites that the customer&#8217;s IT team can handle and when the software needs a ton of iron to run.</p>

<h3>The Good</h3>

<ul>
<li>We do not have to pay for hardware and licenses</li>
<li>We do not have to support the hardware and prerequisites</li>
<li>We do not have to worry about network or LAN integration</li>
<li>Security and backups are not our problem</li>
</ul>


<h3>The Bad</h3>

<ul>
<li>When things go wrong, is it our software or the platform?  Who needs to fix it?  If it&#8217;s the software, it&#8217;s us; if it&#8217;s the platform, it&#8217;s them.</li>
<li>What if the customer has no IT staff?  Or the existing staff have no experience with our chosen platform and prerequisites?</li>
<li>Customer IT staff are responsible for installing updates.  They can delay it or choose not to even do it.</li>
</ul>


<h2>Appliance Model - Install and Deliver Prebuilt Computer</h2>

<p>This is a great solution.  Apple&#8217;s Mac Mini Server configuration is awesome.  A Unix operating system, open source server components fully integrated and working on a tiny device that does not need a computer room to run.  We could set up the application on it, ship the Mini, and all the Customer has to do is plug it in, plug in the LAN and turn it on (and install any client software to talk to our server).</p>

<p>Choose this option if your platform is not one that the customer IT people understand, when they have no IT staff and when you need a really rich environment.</p>

<h3>The Good</h3>

<ul>
<li>We have a guaranteed stable platform that we control</li>
<li>The customer just plugs it in and turns it on, and does not need a computer room to run it</li>
<li>Customer IT staff cannot mess it up</li>
<li>Security is simple, backups are easy, requiring the customer to plug in a USB drive occasionally</li>
</ul>


<h3>The Bad</h3>

<ul>
<li>We have to support and maintain the device, likely requiring the customer to punch a hole in their firewall so we can gain access, not an easy task for most.</li>
<li>We need to maintain hot spares and pay for fast shipping when devices fail on customer premises (and hope they backed up the old system before it failed)</li>
<li>The device itself needs internet access to receive updates</li>
<li>When we are successful, there could be heaps of these out there, will be hard to track</li>
</ul>


<h2>Hosted Model - Run it on our Gear over the Internet</h2>

<p>We setup servers and install our software, making the servers available over the internet to our customers.  We could colocate our own hardware or use a RackSpace, Linode, Heroku or SliceHost to do it dynamically.  All the customer has to do is access our software as a web application.</p>

<p>Choose this option when you expect to have a lot of small customers, when the software is simple or when you want to reach the world.</p>

<h3>The Good</h3>

<ul>
<li>We have a guaranteed stable platform that we control</li>
<li>The customer needs only a web browser to access our awesome software</li>
<li>It&#8217;s easy to add new customers</li>
<li>All customers get all updates as soon as they are available</li>
</ul>


<h3>The Bad</h3>

<ul>
<li>We need to maintain security and backups</li>
<li>We need to manage scaleability, ensuring our customers do not face slowdowns, not a problem in the other models</li>
<li>There are some things that you cannot do easily with web apps, and in this case, our customers are used to rich desktop software</li>
<li>We eat the hardware and network costs</li>
</ul>


<h2>Our Decision</h2>

<p>Most of our customers for this product will be small organizations that do not have IT teams.  Hosted is the best solution for them, so that&#8217;s what we&#8217;ll do.  We will need to make the solution very simple and user friendly to make their user&#8217;s comfortable in the browser.</p>

<hr />

<p><strong>Not the bloody &#8216;Cloud&#8217;!</strong> Note that I have not used the dreaded &#8216;cloud&#8217; word above.  I&#8217;m an experienced and professional systems designer and I have no idea what this mystery &#8216;cloud&#8217; thing is.  I assume its the icon used in network diagrams to represent the Internet.  I do know about virtual servers, hosting and colocation.  I work in the real world.  We&#8217;ll use those.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[It takes a Software Designer]]></title>
    <link href="http://noverse.com/blog/2010/12/it-takes-a-software-designer/"/>
    <updated>2010-12-16T18:39:00-05:00</updated>
    <id>http://noverse.com/blog/2010/12/it-takes-a-software-designer</id>
    <content type="html"><![CDATA[<p>In many of my articles, I talk about the Software Designer, I even call myself one.  But what does this mythical person do?  Are they a graphics designer?  An architect? A consultant?</p>

<blockquote><p>A software designer is an individual who has the vision, passion, communication, understanding, flexibility and process to generate software form; and make the necessary decisions about what, when, where and how in development.</p></blockquote>

<p>Note that the designer does not necessarily <em>conceptualize</em> the idea.  They may do so, in which case they will be designing their own product, much like Indies do.  More likely, a client has an idea, and the designer analyzes it, visualizes it and communicates it within a development project.</p>

<h3>Vision</h3>

<p>There are really two things at work here, vision and visualization.</p>

<p>Designers need vision to see whether an idea has merit, whether it&#8217;s worth doing or not, and how best to do it.  They need take the idea and envision the benefits, usability, popularity, feature set, plan and solutions to come, choose a path and set clear product objectives.</p>

<p>Designers also need to visualize it.  A great designer can see the final product in their heads before the first line of code is written. They can see components, structures, themes, and processes; they can see the software running before it exists.  If they can visualize it, they can design it.  Visualization takes iteration and process to clarify the vision.</p>

<h3>Passion</h3>

<p>Design is not easy.  Its iterative, hard work and for many, emotionally difficult.  Its easy to stop after a few iterations, avoid the grind or just give up.  Good software designers have such a passion for the software that they will iterate again and again until they are satisfied, grind until their backs break and keep on going.  It takes passion to completely design a product to pixel perfect looks, perfect functional mix, intuitive flows and rock solid engineering.</p>

<h3>Communication</h3>

<p>It&#8217;s no good if the design is locked up in the designers mind.  No matter how awesome it is, unless the designer can communicate all aspects of the design to the various teams, it will not be developed.  They need to communicate the desired look and feel to the graphic designers, they need to communicate the feature set to stakeholders, users and customers, they need to communicate the architecture and components to developers.  They need to speak graphic, business and tech clearly to get it developed right.</p>

<p>Great designers do not design alone.  They work with artistic graphic and interface designers, they commune with systems and software craftspeople, they debate with experts in whatever fields impact the idea, and consult with stakeholders, users and customers.  With each they need to listen, learn and communicate in order to crystalize the design.</p>

<h3>Understanding</h3>

<p>In order to design a great product, the designer needs to have a deep understanding of the idea.  They need to feel the flows, get intimate with users and customers, spot the challenges, drill on the details, and most importantly be clear on all aspects of the idea.  This clarity will lead to great architectures, simple workflows, great user experience, proper function mix, all in all, a great design.</p>

<p>A great way for a designer to project this clarity is to walk the idea back to the idea&#8217;s originator, to present their understanding and to resolve any misunderstandings early.</p>

<h3>Flexibility</h3>

<p>Good software designs change, great software designs are flexible. As the designer analyzes the idea further, better flows emerge, and these should be communicated.  As the designer iterates with the graphics team, the theme of the software will change and evolve.  As the designer constructs the architecture, it too evolves.  Great designers use these evolutions to improve their designs, learning the lessons from previous evolutions and integrating the ideas and feedback of others.</p>

<p>And if an unbeatable challenge presents, designers need to find a better design, a novel solution or rework the existing design to eliminate the barrier.</p>

<h3>Process</h3>

<p>Design is all about art and craft but its also about process.  Evaluation, combination, evolution and generation are all iterative processes.  It takes process to completely evaluate the idea, to combine the input of others and the lessons learned, to evolve and iterate a design and to generate the final product.</p>

<p>It takes process to explore design ideas to see if they are workable, it takes process to build platform and architectural models, it takes process to determine optimal flows.  Great software designers understand these processes and work them hard to complete designs.  And they also know when to finish the process.</p>

<h3>Decisions</h3>

<p>All the vision, passion, communication, understanding, flexibility and process will not lead to a great product unless the designer can and does make decisions.  They need to decide on workflows and functionality so they can focus on more detailed design.  They need to decide which features to include, what platform to use, which architecture is best, implementation priorities, standards, usability and interface so the developers can get going.  They need to decide on theme, GUI, colors and image so the graphic designers can complete their work.</p>

<p>And as issues and challenges arise, as things change, and they always do, designers need to keep making decisions to keep the product development on track.</p>

<p>Many of these decisions are and should be those of the designer, and many are those that need to be made in consultation with others.  Flows and functionality decisions need to be made with the client and stakeholders, platform and architecture decisions with the project manager and programmers, look and feel with the graphic designers.  Good software designers enjoy regular consultation with all parties involved and make timely, clear decisions.</p>

<h3>In the real world</h3>

<p>Software design is often lacking, which is why most software is unwieldy, nonintuitive, bloated and unpleasant to use.  That&#8217;s because most software is either insufficiently designed, or designed by committee.</p>

<p>Insufficient design comes from skipping design process steps, not looking at workflow, ignoring usability, picking a preferred platform instead of the right one, using the same old architecture instead of designing the right one, and ignoring graphic design outright.  It comes from using programmers who have only one platform and language skill to come up with the design, from using business analysts who have no technical skills to write designs, from using project managers with no aesthetic skills to create strategies.  Look at the corporate software in front of you next time you are at work, and you&#8217;ll see what I mean.</p>

<p>Design by committee is even worse, and just as common.  The committee meets to choose functionality, flow, platform, just like a software designer would, but contains as many different visions and understandings as there are members.  Combining these disparate visions and understandings leads to compromises and compromised design.  And invariably, not all committee members are happy.  Passionate members push the others to accept their design forms, practical members push theirs, and uncaring members hold to their favorite tools.  The result is often a confusing, incoherent design that is barely communicable and each part of the project runs off on it own.</p>

<p>In the real world, there are many examples of this.  Microsoft Windows is the ultimate example, for example the Off switch in Vista (and 7).  There are <a href="http://www.joelonsoftware.com/items/2006/11/21.html">nine of them</a>!  Moishe Lettvin describes <a href="http://moishelettvin.blogspot.com/2006/11/windows-shutdown-crapfest.html">here</a> how it came to be, up to 43 people were involved!  Michael Arrington raves on that <a href="http://techcrunch.com/2010/05/12/diggs-biggest-problem-are-its-users-and-their-constant-opinions-on-things/">Digg&#8217;s redesign was done by the largest committee</a>.</p>

<p>He also gives the best example of great design, the iPhone.</p>

<blockquote><p>&#8220;Product should be a dictatorship. Not consensus driven. There are casualties. Hurt feelings. Angry users. But all of those things are necessary if you’re going to create something unique. The iPhone is clearly a vision of a single core team, or maybe even one man.&#8221;</p></blockquote>

<p>That one man is not necessarily Steve Jobs, he has ensured that each software team at Apple has a single fully authorized software designer and decision maker, and he handles the decisions that operate across teams.</p>

<h3>For your software</h3>

<p>Whether you have an idea for a single function widget, an internal corporate system, a consumer application or a massive multinational&#8217;s mission critical system, you need a great designer.  Someone to create the product vision, has the passion to drive it home, can communicate it to all involved, understands all the niggly details, has a process to iterate and evolve the best design, and can make the hard decisions to create the perfect software form.  Then hold on to the designer throughout the development process, to guide the stakeholders, artists and programmers to produce the best software and to correct the design&#8217;s course when things change.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[A Few Good Men]]></title>
    <link href="http://noverse.com/blog/2010/12/a-few-good-men/"/>
    <updated>2010-12-11T11:32:00-05:00</updated>
    <id>http://noverse.com/blog/2010/12/a-few-good-men</id>
    <content type="html"><![CDATA[<blockquote><p>With apologies to the movie <a href="http://www.imdb.com/title/tt0104257/">A Few Good Men</a>, 1992, directed by Rob Reiner.</p></blockquote>

<h3>The right team size for software development.</h3>

<p>How many people does it take to develop a Software Product?  How big a team will I need to create to tools for my business?  I need to migrate this legacy software to a new platform, how many programmers will I need?</p>

<p>These are common questions asked of CTO&#8217;s, IT Consultants, startups, techies and, of course, me.  Depending on who you ask, you&#8217;ll get a different answer.  Here&#8217;s mine, and why.</p>

<blockquote><p><strong>Build a small team of smart people, point them in the direction you want and let them loose.  They will deliver beyond your expectations.</strong></p></blockquote>

<p>Lets compare three team sizes, the one man band, the massive outsourced team and A Few Good Men.</p>

<h3>One Man Band a.k.a. Jackaroo</h3>

<p><strong>Definition</strong>: Jackaroo - Jack of all Trades, Master of None.</p>

<p>The Jackaroo is a single developer who does it all.  A lot of Indie Developers, like myself, seem to be Jackaroos, but not all of us are.  A lot of contract programmers are.</p>

<p>The Jackaroo does it all, they design the software, write it, test it, and deploy it.  Great Jackaroos produce great products.  But they are rare.  Good Jackaroos often focus tightly on a market segment or technology and successful Jackaroos will have special expertise in your business area.</p>

<p>Jackaroos are cheap (there is only one person to pay), fast and focussed.  Jackaroos are flexible, jumping from component to component, from programming to support to design like trapeze artists.  They provide personal service, which is rare in this day and age, and are measured by their individual professionalism, track record and product history.</p>

<p>For small, quick, simple software, the Jackaroo excels.</p>

<p>But&#8230;</p>

<p>A Jackaroo cannot be great at everything involved in software development.  Their development style, programming patterns and architecture may not be conducive to later maintenance and modification.  They may program well, but do artwork badly.  They may not be the best managers of time, or the best communicators.</p>

<p>And since a Jackaroo cannot have expertise in all areas, they will struggle in areas they are not good in, take more time because of it and deliver lower quality results.  Over and above the limits of a Jackaroo&#8217;s expertise, a Jackaroo is limited to the number of hours in a day they can work for you, often drawing out the project timeline.</p>

<p>And if anything happens to the Jackaroo, you may be in trouble.</p>

<p>If the project is larger than a few function points, not simple, has more than one component (e.g. server plus client plus API), the average Jackaroo will not have all the skills, time or ability to deliver.</p>

<h3>The Large Team a.k.a. the Army</h3>

<p>When a project is large, complex, has many stakeholders, departments, components and seems daunting, the Army <em>seems</em> the way to go.</p>

<p>An Army has heap of resources available, specialists in any and every area are available at the Army&#8217;s fingertips.  Need a web team, they have it, need an API team, that too, add an iPhone component, the Army has people who can do that too.  If there is one thing an Army never runs out of, its resources.</p>

<p>And for every specialist developing code, there&#8217;s another to test it, another to document it, another to integrate it and another to review it.  Armies produce large, complex software products that do work, usually.</p>

<p>But at a cost.</p>

<p>Armies need leaders, we call them Project Managers.  Armies need scouts to tell the army what to do, we call them Business Analysts.  Armies need standards, we call them Programme Managers.  Armies need logistics, we call them assistants.  The true cost of an Army is not in the number of people (a Jackaroo costs the same as half a dozen outsourced programmers), but in the number of interactions between them.  The managers, analysts, assistants, programmers and client have to meet a lot to ensure all parties understand the needs, progress and issues of the project.  The Army needs lots of internal meetings to ensure the analysts deliver a consistent message to the programmers, the analysts and programmers have to meet constantly to see that the required software is being built.  The testers have to meet the analysts to know what to test for and meet the programmers to point out where the tests fail.  The number one reason large projects fail is that the communications network gets just too complex and political.</p>

<p>Besides the time these meetings take up, communications breakdowns cause havoc in Armies.  Small misunderstandings between teams can lead to large integration issues, incorrect modules being developed, components failing to complete.  Even worse, communications breakdowns between client and manager, client and analyst, analyst and manager regularly lead large projects astray.</p>

<p>To make Armies more cost effective, most use outsourced, offshore programmer teams.  These programmers never meet the client, never see the big picture, never understand the design, they just cut code.  The result is a lot of code duplication, differing standards, and no-one takes responsibility for issues, performance or quality.  And since these programers are not &#8216;in the loop&#8217;, they take their time.</p>

<p>Armies are not agile.  Needs change, projects change, software changes and Armies take time to adjust.  If the client is not 100% clear that the software required will remain static for the time it takes to write, the Army will be cumbersome.</p>

<p>The Army costs a fortune, even with cheap programmers and reasonable management.  The Army produces workable software that may or may not be any good, but it takes time, a lot of time, and is hard to keep consistent.</p>

<p><strong>Army examples</strong>: Microsoft has the largest Army out there, as does IBM, Oracle and SAP.</p>

<h3>A Few Good Men a.k.a. Seals</h3>

<p>A Seal team in the military is a small team of experts who have had extra training and specialization; work together well and take on the toughest assignments, assignments a single spy or large team cannot accomplish.</p>

<p>If software, a Seal team consists of a small team of professional designers and programmers who take on the toughest assignments.  Seal team programmers are seasoned programmers, experts in composing great software and just plain smart people.  Seal team designers understand art, architecture, interaction, and your software needs better than you do.  Seal teams live and breathe producing awesome software products.</p>

<p>Seal teams can take on large complex projects by simply breaking them down into manageable chunks and getting to it.  They have been there before and know what to do.  Seal teams produce well designed, well coded, integrated software.  There are few meetings (low communications overhead) because the entire team is involved.  They are agile, if the needs change or an issue arises, they all get on it, quickly, silently, efficiently.  They work in parallel.  They work like a family.  And they get it done!</p>

<p>But Seal teams are rare.</p>

<p>Finding Seal team members is hard, very hard, but not impossible.  There are lots of potential Seals out there who have not been given the chance.  I know, I have been hiring Seal programmers for 10 years.  I choose people who are smart, passionate, flexible and those I get on well with.  They may not have the experience or expertise I need, but a smart, motivated individual can pick up skills insanely quickly.  But 19 out of 20 programmers I do interview for work are better suited to Army work.</p>

<p>Seal teams are hard to deal with.  They are professionals, and unlike some Jackaroos and all Armies, they are just as passionate about your product as you are.  Which means they are going to contribute to the discussion, offer unsolicited advice, point the project in new directions and in many cases, take charge.  A lot of clients are not used to this and struggle hand over software design and control into the capable hands of a Seal team.</p>

<p>And Seal teams do not come cheap.  Experience, quality and expertise take time to build up in people.  And these people are in demand.  You will pay a Seal team so much more per person that either the Jackaroo or the Army.</p>

<p><strong>Seal team examples:</strong> Google never has more than seven people on a product team.  And, the most popular software today was started in Seal teams, for example <a href="http://en.wikipedia.org/wiki/VisiCalc">Bricklin and Frankston created spreadsheets</a>, <a href="http://www.livinginternet.com/w/wi_mosaic.htm">Andreeson and Bina made web browsers</a>, <a href="http://en.wikipedia.org/wiki/Unix">Thompson, Ritchie, Kernighan, McIlroy and Ossana made UNIX</a>!</p>

<h3>So, how many do I need?</h3>

<p>You need a small team of exceptional people.  Get them and the higher cost per  person will be tremendously offset by the quality of the software, speed of development, ease of process and communication, flexibility in design and awesomeness of product.</p>

<p><em><strong>Footnote</strong>: A good indie developer, like Noverse, seems to be a Jackaroo, but we&#8217;re not.  I may be the lead, but I am surrounded by other brilliant programmers, professional designers and business experts, people who complement my skills, whose strengths are my weaknesses.  A Noverse Seal team will form for your project, and re-form for the next.</em></p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How much does it cost to develop an iPhone application?]]></title>
    <link href="http://noverse.com/blog/2010/12/how-much-does-it-cost-to-develop-an-iphone-application/"/>
    <updated>2010-12-01T13:59:00-05:00</updated>
    <id>http://noverse.com/blog/2010/12/how-much-does-it-cost-to-develop-an-iphone-application</id>
    <content type="html"><![CDATA[<blockquote><p>This <a href="http://stackoverflow.com/questions/209170/how-much-does-it-cost-to-develop-an-iphone-application">question</a> was asked, and answered, on <a href="http://stackoverflow.com">stackoverflow.com</a> 2 years ago, and has been viewed almost 200,000 times.  I was one of the people who answered the question (<a href="http://stackoverflow.com/questions/209170/how-much-does-it-cost-to-develop-an-iphone-application/3927217#3927217">click here</a>).</p></blockquote>

<p>There are three components in almost every iPhone app: a server component, a design component and an app component.</p>

<h3>Server Component</h3>

<p>The server component of an iPhone app usually takes the most effort and chews up the majority of the budget.  You need to deal with the physical servers, hosting, networking, security, backups, failover, scalability, reliability.  You need to develop databases, servers, API&#8217;s, migration strategies, load balancing, and backups.  You need an army of people to operate and maintain these servers, support them, enhance them and feed them.  <a href="http://instagr.am/">Instagram</a> went through half a million dollars just building theirs, <a href="http://twitter.com/">twitter</a> has spent untold millions on theirs.</p>

<p>Creating a server infrastructure from scratch is something <a href="http://www.noverse.com/">Noverse</a> can do for you, but it will cost a lot, in the hundreds of thousands of dollars if you outsource the whole lot to us.  In return, you will get a server platform to support your needs, that has APIs that are used by iPhone apps, web sites and internally, is scaleable, maintainable, and supported.</p>

<p>But almost everybody already has some server assets.  These need to be enhanced to provide the API for the iPhone app, exposed and secured on the internet to make the API available to your users, optimized to perform quickly enough for app usage, reliable enough to deal with the user load as well as gracefully fail-over when things go wrong.  Creating the new wrapper interface to an existing set of system is a large project.  Analysis needs to be done to see if the data or API needed for the iPhone is even available in existing systems, or whether these need updates of their own.  Then the new services need to be designed, implemented, tested, secured, deployed and a support infrastructure created.  Cost?  Between $50,000 to $500,000, depending on what works.  <em>Most clients use their internal IT resources to do this to save money.</em>  Most clients also underestimate the amount of time these internal resources will take to get their part completed.</p>

<p>If you are lucky and the server component already exists, is quick, has an API and is supported (like <a href="http://twitter.com/">twitter</a> app developers), you&#8217;ll be saving 60-70% off the total app cost.</p>

<h3>Design Component</h3>

<p>You will be surprised at the time and cost of the design component in an iPhone app.  Corporate developers are not used to doing anything more than functional design.  Commercial developers are used to doing that plus UI design.  All of which can usually be done by developers or great systems architects.</p>

<p>But mobile apps require more than just an architecture and an UI, they need a theme, a look and feel, an interaction model, and a lot of graphics.  Third party developers will often quote to create an iPhone app that uses standard Apple widgets, and this not only reduces cost but makes the app look cheap, boring and in many cases, makes it less accessible, intuitive and useable.</p>

<p>Mobile apps need to stand out, need to project your image and themes, and on more practical levels, need to deal with an unconstrained tactile interface.  Action feedback idioms are up for grabs, interaction gestures need to planned and the whole interface needs to be trialed, tested, iterated on and often revisited several times.</p>

<p>For example, when the user presses a buy now button on a product in a shopping app, how can one feed back to the user that the product has been added to the cart?  Using standard widgets, you change the badge (the red number) on the cart icon.  But most users don&#8217;t notice it, and most tap the buy now again.  Apple&#8217;s <a href="http://itunes.apple.com/us/app/apple-store/id375380948?mt=8">Apple Store</a> app transitions the user to the cart tab, greys it out, puts up a spinner to show its doing some work and animates the adding of the item to the cart, then ungreys the screen.  A lot of design went into that.  Amazon&#8217;s <a href="http://www.amazon.com/gp/feature.html?ie=UTF8&amp;docId=1000291661">shopping app</a>, on the other hand, spins an image from the top to the bottom of the screen to simulate an box being added to the cart.  That works too.  One of my apps peels the product page off the screen and shrinks it down into the cart icon, like the page is being sucked into the cart.  Thats another design.  Which will work for you?</p>

<p>iPhone app design takes at least a month of designer work which I usually estimate at $40,000 per month.  That&#8217;s if you already have a corporate logo, image and theme, as well as all the raw graphic assets needed.  Add more time to create your image and the app&#8217;s image if these do not exist.</p>

<h2>App Component</h2>

<p>Finally we get to the iPhone app itself.  Once the analysis and app design is done, a 3-4 function app will take about a month to write the core, and two to three months to polish and release.  Add a few months for iterations and testing.  Expect to pay $150 an hour or more per developer at at professional firm like <a href="http://www.noverse.com/">Noverse</a>, or about $50,000 to $150,000 depending on number of functions, amount of animations and  amount of custom interactions needed.</p>

<h3>How much in total?</h3>

<p>Assuming the core of the server component already exists, expect to pay between $100,000 and $500,000 to get a <em>quality</em> iPhone app that works with a reliable server infrastructure.  No server needed, then look at about $50,000 to $250,000.</p>

<h3>It can&#8217;t be that much, really?</h3>

<p>You will read elsewhere on the internet that people got apps written for them for under $10,000.  That&#8217;s probably true.  There will be those who used outsourced international programmers and got apps for under $25,000.  That&#8217;s true too.</p>

<p><strong>But</strong>.  There is always the &#8216;but&#8217;.</p>

<p>But <strong>none</strong> of these applications have a server component.  <strong>None</strong> of these applications had any design done or interaction model in them.  <strong>None</strong> of them look good.  <strong>None</strong> of them have more than one or two functions in them.  <strong>None</strong> of them have been updated or modified in any way.  <strong>None</strong> of them have had bugs fixed in them.  <strong>None</strong> of them is maintainable.  And <strong>none</strong> of them have made money for their creators or grown their businesses.</p>

<p>If you want a quality iPhone app, that looks great, is intuitive, is reliable, bug free, maintainable, updateable, and works reliably with a server platform, prepare to spend several hundred thousand dollars on professionals.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Waterfall Waterfail]]></title>
    <link href="http://noverse.com/blog/2010/10/waterfall-waterfail/"/>
    <updated>2010-10-28T01:38:00-04:00</updated>
    <id>http://noverse.com/blog/2010/10/waterfall-waterfail</id>
    <content type="html"><![CDATA[<p>The waterfall model for software development has gone the way of the dodo (and did so at about the same time).  Yet this newly minted indie developer often gets requests for proposals that follow this model, fixed-time, fixed-process and fixed-price.</p>

<p>I instantly and politely decline these requests.</p>

<p>I don&#8217;t ever want to decline work, and when I set up this business, I planned to say yes to every potential client and service them as best as possible.  Not only that, the only way to grow a consulting business is to actually bid and win business, not decline it.  No engagements, no clients, no business, no money, obviously!</p>

<p>But I still decline requests for proposals on fixed-price, fixed-time, fixed-process based work.  Several potential clients have been upset by the instant rejection and have asked why such a response.</p>

<p>Here&#8217;s why:</p>

<ul>
<li>At the time of proposal, neither the client nor I have a concept of the true scope of an engagement.  How can one then present a proposal?  (Actually, I used to do these back in 1993 as a pre-sales guy at a massive Systems Integration house.)  Proposals at this stage usually mean setting the wrong expectations in client and developer, and lead to disagreements later when timing and costs blow out.</li>
<li>Assuming there is sufficient information for me to scope out the job, experience has shown that estimation is hard and highly inaccurate.  Rules of thumb regarding the doubling of time between each phase, or the use of function point analysis to measure scope, have all proven to be wrong.  I do not want to set incorrect client expectations by responding with a project plan that I know is rubbish.</li>
<li>At the request stage, neither party has an understanding of the language, tools, techniques and processes of the other.  There are always communication breakdowns and misunderstandings that come when two people from different domains attempt to understand each other&#8217;s ideas and plans.  Jargon, domain knowledge, assumptions and conventions differ between client and developer, and I prefer not to propose to do work until the language and true needs are understood by both of us.</li>
<li>The waterfall model assumes no changes in scope and assumes no technical hitches and glitches along the way.  In reality, as you drill on the scope and technology of a solution, and as your understanding of a problem domain grows, both the client&#8217;s needs and the amount of development work changes.  Most fixed-price projects go off the rails because of disagreements over changes, both the work to be done and the cost to be paid.  I will not go through that again, and will not put my clients through it either.</li>
<li>A lot of these projects also involve a lot of design - graphic, thematic, flow and technical.  Anyone who has done any of these knows its hard, iterative and variable.  You may hit the design first time and just iterate on polishing it, or you may need to redesign several times before you find that which &#8216;just works&#8217; for the client and the developer.</li>
</ul>


<p>Instead</p>

<ul>
<li>Instead of writing requirements, I am happy and excited to spend time <em>pro bono</em> with a client to get to know them, their business and their needs.  Through discussion, the client and I can come up with the scope of work, we can both understand the process to deliver and can come to an agreement on what needs to be done and paid.</li>
<li>Part of my role is to also explain my process to them, why I use the process and the benefits of the process.  When clients understand the hows and the whys of my delivery process, it makes it easier to come to agreements and launch engagements.</li>
<li>Waterfall assumes vendor and customer relationship, an adversarial system.  I work in collaboration with my client.  Both of us are stakeholders, both of us want the same result (a great product at a fair price), both of us are learning as we go, and both of us understand and solve any issues as they come up.</li>
<li>Instead of creating a fixed time project plan, the client and I agree on a series of small steps, deliverables and iterations.  Sometimes a deliverable takes less time that we expect, sometimes longer, but progress can easily be measured as each part gets built and delivered.</li>
<li>Since we work in collaboration, changes in scope can be implemented on the fly.  We can add or change deliverables, iterations, even functionality as needed and still stay on track to deliver the final product.</li>
<li>And when things do not go according to plan, like when the art is not right, or a function or feature just does not work, we can choose to refocus our energies to get the missing piece done, or replace it with something that does actually work. And do so quickly.</li>
</ul>


<p>The only question that comes up, then, is how can the client be sure, given the iterative and open-ended nature of the engagement, that they will end up with the product they expect, in the timeframe they need, at a reasonable price  (the implied goal of the waterfall model).</p>

<p>The answers, my friends, are these.</p>

<ul>
<li><em>The client will <strong>not</strong> get the product they expect, they will get a <strong>better</strong> one!</em>  As we both learn, our expectations will change and we will collaborate on and produce a much better product, more aligned to the client&#8217;s needs.</li>
<li><em>The client will <strong>not</strong> get it in the timeframe they need, they will get in the timeframe its needed in!</em> Experience and a history of successful projects has shown that the client will get the product sooner when collaborating well and following a flexible process. And client&#8217;s always adjust the timeframe as their understanding of the product changes.</li>
<li><em>The client will <strong>not</strong> get it at a reasonable price, the will get it at a <strong>better</strong> price!</em>  A large part of the expense of waterfall is in all the documentation (a known cost), in changes (an unknown cost) and management overhead.  Collaborating using a flexible process means we can start creating sooner, deliver sooner and manage the client&#8217;s project budget better.</li>
</ul>


<p>I do not expect to stop receiving requests for fixed-price, fixed-process and fixed-time project proposals, nor do I expect to ever accept and respond to any.</p>

<p>I do hope to receive more interest from clients intent on collaborating to produce great software, software that we can both be proud of, and can enjoy working on creating and delivering it.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sprint Coding]]></title>
    <link href="http://noverse.com/blog/2010/10/sprint-coding/"/>
    <updated>2010-10-15T13:42:00-04:00</updated>
    <id>http://noverse.com/blog/2010/10/sprint-coding</id>
    <content type="html"><![CDATA[<p>Sprint Coding is the process whereby a skilled programmer busts out a quality application in record time.</p>

<p>Its not easy.  Fast coding means faster bugs.  Quick coding means rotten quality. Rapid development means architecture is ignored.  Cowboy coding produces unmaintainable code.  In short, I don&#8217;t recommend it.</p>

<p>But, my dear <a href="http://starwars.wikia.com/wiki/Padawan">padawan</a>, it is do-able under the right circumstances.  Rare circumstances.  Recommend this, I do not.</p>

<h3>Scenario, this is.</h3>

<p>A client called up at the beginning of October and asked if I could produce an iPhone app for them.  <em>I can.</em> The app is to represent their brand on the iPhone and allow users to purchase goods from them.  <em>Sure.</em>  It needs to look great and be bug free.  <em>Of course.</em>  And it needs to be in the app store in November!  Mid-November OK?  Hello? You still there?</p>

<p><em>Mid-November!</em>  Assume a 2 week review process and a 2 week beta test, the app had to be written in, yup, 2 weeks.</p>

<p>Possible, it is not!</p>

<p>Unless sprint coding, we do.</p>

<h3>Sprint coding, conditions these be</h3>

<p>I quickly ran through my sprint coding checklist to see if it was do-able:</p>

<ul>
<li><strong>I have the time?</strong> I would have to give up on all other commitments and get it done.  <strong>Time Check!</strong></li>
<li><strong>The client has an API?</strong> Client-server software is hard, writing a server API takes time.  If the client does not have a tried and true server API, you&#8217;ll never make a sprint timeframe.  This client did.  <strong>API Check!</strong></li>
<li><strong>The client has art and designers?</strong>  Art takes time, good design takes time and thematic design is critical to present a brand correctly.  The client needs to have its own art assets (logo, color schemes, thematic elements) already made.  And the client needs to make their graphic designers available 100% of the time during the sprint to deliver images, icons and artwork required by the app.  Most clients use third party designers, who cannot make this commitment.  This client has its own internal art department, and placed them on call.  <strong>Art Check!</strong></li>
<li><strong>I already have a architecture?</strong>  As a developer, I needed to make sure I had an architecture already in place that would enable a sprint code.  I have made tab-based apps before, I have made client-server apps before, I had the architecture.  <strong>Architecture Check!</strong></li>
<li><strong>Do we know all the features that the client wants?</strong>  I needed to know all the features the app would have, needed to limit them to what&#8217;s do-able, and needed to know if I had made similar features before. Knowing the feature set, I needed to be confident that I could implement each and every agreed feature in a sprint timeframe.  Search for product, present product, browse specials, cart, checkout, I had them all.  <strong>Features Check!</strong></li>
<li><strong>I already have the libraries needed?</strong>  Libraries are needed to interface to the client&#8217;s API, and parse their responses.  Libraries are needed for the few custom controls that make up a shopping application.  Libraries are needed for payment processing.  Creating these from scratch requires time and resources and a massive testing platform, not something that is conducive to sprint work.  In this case, the client plans to web-host the payment platform (a huge relief), which they already have, and use JSON and REST interfaces.  <strong>Libraries Check!</strong></li>
</ul>


<p>Possible, it may be.</p>

<h3>Sprint coding standards</h3>

<p>Remember when I described Sprint Coding as something performed by a <strong>skilled</strong> programmer?  Here&#8217;s why.</p>

<p>A skilled programmer never relents on</p>

<ul>
<li><strong>Coding to a known architecture.</strong>  Data and logic in the model, display in views, controllers to manage.</li>
<li><strong>Using proven design patterns.</strong>  Façades for API interfaces.  Delegates for decoupled integration.  Observers for app level notifications.</li>
<li><strong>Object-oriented abstractions.</strong>  Data objects, with validation.  Interfaces and protocols between subsystems.</li>
<li><strong>Naming conventions.</strong>  Naming of classes and variables, namespaces if necessary.  Think readability and maintainability.</li>
<li><strong>Coding standards.</strong>  All code files look and feel the same, same header, same style, making the code readable and maintainable.</li>
<li><strong>Keeping it simple.</strong>  No fancy coding, no obfuscation, no funky algorithms, just good clean readable code.</li>
<li><strong>Ongoing refactoring.</strong>  Instead of copy and paste coding, a skilled programmer refactors on the fly.  Even in a sprint, a skilled programmer knows the pitfalls of duplicating code and catching bugs in all copies.</li>
<li><strong>Fast testing.</strong>  No time to create a full test suite?  That&#8217;s OK, as long as all assumptions are wrapped in assertions, all errors reported, logged and handled.  And the sprint is followed by a beta test.</li>
</ul>


<p>How I work, this is.</p>

<p>If you&#8217;re going to sprint, and your skilled programmer does not do all of the above, the result is going to be an incomprehensible mess, full of bugs and completely unmaintainable.</p>

<h3>Sprint coding process</h3>

<p>Sprint code an application using the following steps:</p>

<ul>
<li><strong>Construct the architecture.</strong>  Create the main classes, the master model and the core interaction controllers.  These are the backbone of the application and will be the hardest to change during the next steps of the sprint.</li>
<li><strong>Complete the skeleton.</strong>  Flesh out the architecture using proven patterns and conventions to create all the necessary working parts of the application.  Create blank screens, empty data objects, empty API façades and string them together.</li>
<li><strong>Build the flows.</strong>  Code the application up so that each and every workflow can be run.  In a store app, that means search results in products that can be looked at and purchased, cart items can have quantity changed, checkout launches a secure web browser.</li>
<li><strong>Harden the API.</strong>  Work through all use case scenarios using the API to make sure it all works.  And try to break it to make sure the app does not crash on exceptions or lack of connectivity.</li>
<li><strong>Fill in the details.</strong>  In the above sections, the product object probably consists of an ID and a name, nothing more.  Add pictures, descriptions, reviews.</li>
<li><strong>Polish.</strong>  Integrate the art, tighten up the theme and add detail the app. Test will all kinds of data to make sure the app looks great at each step on the flow.  Test all the interactions to make sure they work right and look great.</li>
</ul>


<p>But most importantly</p>

<ul>
<li><strong>Check code in regularly.</strong>  In a sprint, you&#8217;re going to be rewriting swathes of code over and over again, screwing up and needing to go back and see what worked before.  Use the SCCS and a great file comparison tool to get back quickly.</li>
<li><strong>Report progress daily to the client.</strong>  I email the client at the  end of each sprint day describing the work done that day.</li>
<li><strong>Show it!</strong>  I use <a href="http://www.telestream.net/screen-flow/overview.htm">ScreenFlow</a> to create videos of the daily progress and send them to the client, or I use <a href="">Skype</a> video to show the app live.  As soon as the client&#8217;s App Store ID is established, I also send alpha <em>ad hoc</em> builds daily for the client to play with.</li>
<li><strong>Talk with the client at least once a day.</strong>  I also make sure I have a conversation with the client daily.  Issues and questions arise as the sprint moves forward, art and API changes need to be communicated.  Feature details need to be clarified.</li>
</ul>


<h3>No Beta, no Sprint</h3>

<p>Once the sprint is complete, you should have a fully working app that looks and works great.  But no matter how skilled the programmer, no matter how good the API, <em>it will not be ready for prime time</em>.</p>

<p><a href="http://noverse.com/blog/2010/07/beta-testing-is-hard-but-oh-so-worth-it/">Beta testing is important</a>, beta testing a sprint is even more so.</p>

<p>During the sprint, the programmer and the client are usually the only people looking at and touching the software.  And two people does not a good test sample make.</p>

<p>The speed of sprint means that the code will not be bulletproof.  The speed of the design means that the flows will not be idiot proof.  Code bugs, interaction issues, flow problems, and things missed by the two primary individuals will abound.</p>

<p>Take a sprint app, throw it at tens of committed beta testers and ride them hard to identify odd behaviors, crashes, bugs and interactions.  Send out several beta builds, all fully instrumented, and request logs back from all testers to see what happened, even if it all worked.</p>

<p>And then, two days before submitting it to the app store for review, send out the final build, in release mode, to all beta testers for a final end-to-end test.  Once you strip debug and instrumentation, you sometimes get some new oddities cropping up.</p>

<h3>In this case</h3>

<p>In this case, the client and I had all the items on the checklist.</p>

<p>So I took the assignment.</p>

<p>And for the last two weeks, I ran a sprint.  I reveled in architecture, I rollicked in the model, I danced on the API façades, I sung the views into existence, I brushed the theme into place and I ran with the coding bulls.  I was on the endorphin high of sprint coding.  And I loved every minute of it.</p>

<p>And now, the app itself is mostly ready for Beta, just 2 weeks later, sprint over.  Back to ground, I came.</p>

<p>But the client API had a few holes in it that we found towards the end of the sprint.  The API team is working on it.  But each day they work on it, delays the beta and final release.  Disappointed, we feel.</p>

<p>And once again, my dear <a href="http://starwars.wikia.com/wiki/Padawan">padawan</a>, I remember why I do not recommend sprint coding.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[Sights to See iPad Version Progress, Part 1]]></title>
    <link href="http://noverse.com/blog/2010/09/sights-to-see-ipad-version-progress-part-1/"/>
    <updated>2010-09-30T17:04:00-04:00</updated>
    <id>http://noverse.com/blog/2010/09/sights-to-see-ipad-version-progress-part-1</id>
    <content type="html"><![CDATA[<p>The iPad version of Sights to See is coming along nicely.  All the views have been strung together and I&#8217;m starting to work on the details and aesthetics.</p>

<p>Here are a few screenshots to whet your appetite.</p>

<p>When you start the app, you&#8217;ll see a world map with all your guides on it.  I am also experimenting with a &#8216;tag cloud&#8221; approach to help you jump to a guide quickly, but it may not make it into the final product.</p>

<p><img src="http://noverse.com/images/iPad1.png" width="260" height="195"></p>

<p>The guide map page now uses the whole screen.</p>

<p><img src="http://noverse.com/images/iPad2.png" width="260" height="195"></p>

<p>And the sight details look so much cleaner, now that I have the space to work with.</p>

<p><img src="http://noverse.com/images/iPad3.png" width="193" height="259"></p>

<p>In the mean time, get the iPhone version.  The iPad version will be a free upgrade.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[How to use software]]></title>
    <link href="http://noverse.com/blog/2010/09/how-to-use-software/"/>
    <updated>2010-09-09T13:03:00-04:00</updated>
    <id>http://noverse.com/blog/2010/09/how-to-use-software</id>
    <content type="html"><![CDATA[<p>I was having a discussion the other day about my next OS X application and the responses I got were that there was a free web way or a free command line way to do what my app will do, so why bother?</p>

<p>It got me thinking about how I use software, how other people use software, how people tell me how to use software and how I tell other people how to use software.</p>

<h3>How I use software</h3>

<p>I am a mouse and GUI guy.  Even though I have been programming for over 20 years, I still do not touch type.  I did learn, but much of my programming requires me to move my hands away from the home keys and onto the symbol and modifier keys.  My 6-8 finger floating typing technique is adequate, and I usually use all the control keys from my left hand while my right rests on the mouse.  The disadvantage of a floating typing technique is that I often strike the key next to the one I want, and given that I regularly move keyboards with slightly different layouts and key separations, this is a problem.  So give me a GUI any day.</p>

<p>I am also a native application guy.  Given the choice between command line, web or native GUI, I go native every time.  Part of it is the aesthetic beauty of a great native GUI, part of it is the comfort level using standardized GUI (command lines and web sites are notoriously non-standard) and part of it is because I have spent so long with menus here and icons there and buttons this way that I don&#8217;t want to change.</p>

<p>Here&#8217;s my morning so far:</p>

<ul>
<li>I am typing this blog using <a href="http://www.red-sweater.com/marsedit/">MarsEdit</a>, instead of the web <a href="http://wordpress.org/">WordPress</a> page for creating entries.</li>
<li>I just checked in my source code using <a href="http://versionsapp.com/">VersionsApp</a>, instead of command-line <a href="http://subversion.tigris.org/">SVN</a>.  And I&#8217;ll stay on SVN, not git or mercurial until a better GUI comes along.</li>
<li>I just edited some of my shell scripts in <a href="http://macromates.com/">TextMate</a>, instead of using vi or emacs.</li>
<li>I am watching my news feeds using <a href="http://netnewswireapp.com/">NetNewsWire</a>, instead of the free <a href="http://www.google.com/reader">Google Reader</a> web site version.</li>
<li>I have <a href="http://www.atebits.com/tweetie-mac/">Tweetie</a> up for twitter instead of my own twitter web pages.</li>
<li>I use <a href="http://www.ideaswarm.com/products/appviz/">AppViz</a> to track my iOS app sales instead of relying on Apple&#8217;s web site</li>
<li>I use <a href="http://colloquy.info/">Colloquy</a> instead of command line IRC</li>
<li>I just updated this web site using <a href="http://panic.com/transmit/">Transmit</a> instead of command-line FTP</li>
</ul>


<p>And I have paid for each of these apps (Colloquy is donation-ware)!</p>

<p>I love the value I get from each of these products.  I love how productive I am with them.  And I love how I love using these products.  And I know I&#8217;m not the only one because all of these products are very successful in the market (and likely why I am becoming an indie developer too).</p>

<p>I never get these feelings or productivity from the command line.  I don&#8217;t get attached to things on the web either.  The command line is as boring as a desert, and the web seems transient, almost like its unfinished, unpolished or just going to change yet again for no apparent reason.</p>

<h3>How other people use software</h3>

<p>I think a lot of people outside the tech world expect software to be hard, confusing, full of jargon, unstable, continuously changing and requiring of special skills to use.  And to use it, they have to learn all the odd commands, weird menus and sequences of steps to get the job done.</p>

<p>I also think the iPad is changing this perception, albeit very slowly.</p>

<p>Well designed GUI applications like the above are great for non-technical people to do technical work.  They require no special skills, they have very clean and simple interfaces, they eschew jargon and they make the experience of using the product oh so much more fun.</p>

<p>On the tech side, there will always be those who say the command line is faster, more efficient and the right way to do things.  I&#8217;m not going to argue with them, it works just great for them, it suits their style and they must love the simplicity and elegance of well crafted commands.  I do not.  And I will not feel guilty because they feel superior.  I can use the command line, I choose not to.</p>

<p>Web GUIs drive me nuts.  Great web interfaces are few and far between.  But the inconsistency between sites, the lack of a HIG (Human Interface Guidelines) standard, the performance delays caused by round-tripping and my perception that all web sites are like mine, under continuous development and change, make it hard for me to like them.  And with net neutrality all but a fiction, reliable internet service a fantasy, I like having my applications and data on hand no matter what.</p>

<h3>How people tell me to use software</h3>

<p>I have been told by experts and novices alike how to use the software they like the way they like to use it.  Listening to them has made me a better developer and has enabled me to create more flexible and useable interfaces.</p>

<p>But some of the things users put up with amaze me.  Application restarts, arcane commands, odd sequences of menu operations, manual behaviors because the automation fails, save and reload, step by step processes that add nothing to the document but are required to stave off perceived problems, chicken dances and goat sacrifices all.  I had one user who loved his CRM package, but could never find a contact in it and had to shut down all other software before sending out a mail merge.  Yet they would not change products and wanted me to use the same messed up system.</p>

<p>I tend not to put up with these things.  If an application does not look great, I look elsewhere.  That seems superficial, but a developer who does not deliver good aesthetics usually does not deliver good solutions either.  If an application is complicated, confusing or full of jargon, I use another.  If I have to be trained to use the application (even with domain knowledge), I choose another.</p>

<h3>How I tell other people to use software</h3>

<p>I don&#8217;t.  Software, at the end of the day, is a means, not the end.  Whatever works for you to achieve your ends, do that.</p>

<p>Well, actually, I do tell people how to use software, but only indirectly.  By creating well designed, intuitive and easy to use applications that are fun and efficient to use, are bug free and look amazing.  I hope they compare my software to others and realize that they have gold in their hands instead of plastic.</p>

<p>Oh, and maybe a little directly in this blog.</p>

<h3>GUI habits</h3>

<p>I buy a lot of software.  I write a lot of software.  I use a lot of software.  And I regularly replace software with new, shinier and better software.</p>

<p>When I work, I choose to use small, focussed, well designed, native GUI applications because through them I more productive, I enjoy using them, I enjoy doing the things they do for me, I like the way the look and operate, and it suits my style.</p>

<p>And my next OS X application, which will be a Noverse public for-sale one will do just that, replace confusing and complicated web interfaces with an excellent native GUI to help me, and I hope you too, gain the same enjoyment from my software as I do from the software I choose to use every day.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The post shipping, app store review blues]]></title>
    <link href="http://noverse.com/blog/2010/08/the-post-shipping-app-store-review-blues/"/>
    <updated>2010-08-20T09:55:00-04:00</updated>
    <id>http://noverse.com/blog/2010/08/the-post-shipping-app-store-review-blues</id>
    <content type="html"><![CDATA[<p>Real programmers ship.  I did, ten days ago, into the App Store review process.  And now I have the postnatal shipping blues.</p>

<p>The blues come from two sources, shipping and waiting.</p>

<h3>shipping blues</h3>

<p>The first version of an application always ships, if you do it right, with the critical core features working, one or two bells and whistles to make it fun and nothing else.  Do any more, and you&#8217;ll never ship.</p>

<p>But there is always a long list of features that you plan to add to the app, and this list has been staring you in the face since the day you decided on the first release feature set.</p>

<p>But you have to ship, and you have to ship sans all these other features.  It would be better with more features.  Maybe it would sell more if I just added a few more. Ahh, the shipping blues.</p>

<p>Well I&#8217;ve shipped.  And while I wait for approval, I&#8217;ve gotten started on the next version, adding features from the list to delight my first adopters as soon as possible.  Some of these features that I thought would take a long time took no time.  And they are ready to go.  But I&#8217;ve already shipped!  What now?</p>

<p>If I update the app in the review queue, I&#8217;ll go back to the start of the line.  And the review and waiting process will take much longer.  But these new features are just so nice, and I think my users (none of whom exist just yet) would love them.  And the shipped version already looks shabby compared.  Ahh, the shipping blues.</p>

<h3>Waiting blues</h3>

<p>I also have the waiting blues.  I have no idea how long it will take Apple to get to my product and review it.  And I have no idea whether they may even find a reason to reject it or not.  I have no idea when it will go on sale.</p>

<p>So I cannot plan my media blitz (consisting of a press release and facebook update) to coincide with the release date.  I cannot tell people I meet now when they can buy my app.</p>

<p>And if it gets rejected, I am not even sure the feature set I&#8217;ll resubmit.  So, should I be working on this feature of that just in case.  Ahh, the waiting blues.</p>

<p>But more than that, I have no feedback.  I spent months writing <strong>Sights to See</strong>, and I hope it will sell well.  Maybe this is the lull before the storm when heaps of folks buy it, or maybe this is the lull before the next lull when no-one buys it.  Most apps do not sell, most do not make money.  But I&#8217;d like people, strangers, you to look at it and use it and play with it and buy it and talk about it.  And get back to me with you experiences with it, and what you want it to do, and how it could be better, so that more people will buy and use it..</p>

<p>Up until now, I&#8217;ve written what I want for the product.  I am waiting to hear what you want.  Ahh, the waiting blues.</p>

<h3>Dealing with it</h3>

<p>I am dealing with it by barreling forward on V1.1.  Taking advantage of the lull before I have real customers with real needs sending me real emails that will take my attention away from real programming.  No interruptions, lots of progress.</p>

<p>But at the back of my mind, though, are the blues.  Will it get approved?  Will people like it?  Did I make the right calls on features?  Does the content on the app store and web site help people see the value of the product?  Or, did I waste my time on making it?  Ahh, blues.</p>
]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[The price of Sights to See]]></title>
    <link href="http://noverse.com/blog/2010/08/the-price-of-sights-to-see/"/>
    <updated>2010-08-11T11:49:00-04:00</updated>
    <id>http://noverse.com/blog/2010/08/the-price-of-sights-to-see</id>
    <content type="html"><![CDATA[<p>Choosing a price for your software is hard.  Choosing the right price is even harder.</p>

<p>For <strong>Sights to See</strong>, I will release it at $9.99.</p>

<p>Let the wailing begin!</p>

<h3>Customer value proposition</h3>

<p>From a customer&#8217;s perspective the value proposition is easy to figure out.</p>

<p>If the customer buys a paper guide book, it costs about $20.00 from Amazon.  The paper guide book is limited to only the places in it, weighs a lot, is hard to navigate and to navigate with, and is usually out of date.</p>

<p>If the customer buys an electronic guidebook, it costs on average $6.00.  The electronic guide is limited to the places in it and are usually just reprints of the paper guide books without any additional interactive features.  Want to go somewhere else, thats another $6.00.</p>

<p>For ten bucks, the customer can buy <strong>Sights to See</strong> and have as many guides and places as they want, the most up-to-date data from wikipedia which is always being updated, no extra weight to carry, the cool maps, the near me feature, and all upgrades to the software included.  What a great deal!</p>

<p>In summary, for the customer its</p>

<ul>
<li>$9.99 for <strong>Sights to See</strong></li>
<li>OR $5.99 PER GUIDE for electronic guidebooks</li>
<li>OR $20.00 PER BOOK for paper guidebooks</li>
</ul>


<h3>My value proposition</h3>

<p>I have spent months of my time writing this application, perfecting it, crafting it and bringing it to market.  I have spent money on setting up this business, money on systems and money on web sites and money on tools.  Creating the software cost money, so I want to get money back to cover those costs, and hopefully afford a beer or seven.</p>

<p>Further, the App Store store does not enable upgrade pricing.  <strong>Each sale I make is all the income I will get from the product</strong>.  All upgrades will be free to my customers.  But upgrades cost me time and money, and I know I&#8217;ll need more web hosting for some upgrades.  But I will not get any upgrade revenue.</p>

<p>If I set the price too low, I may sell more units, but make less money, and with less money, there&#8217;s less incentive for me to upgrade the product.  If I set the price too high, I&#8217;ll sell few units, and make less money too.  Finding the sweet spot of sufficient sales and sufficient revenues is the trick.  Which is why I look at the customer value proposition first.  If it makes sense, the units should be high enough, and the return to me should be too.</p>

<p>One more point, setting the price to value also gives me room to discount the product later on.  <em>I hope never to do it</em>, I feel annoyed when I buy a product and then the seller drops the price.  But having the wiggle room is nice.</p>

<h3>Ignoring the loud ones</h3>

<p>I expect to have to deal with the following</p>

<ul>
<li><strong>Emails from people saying they would buy the product if it were a lot cheaper</strong>:  If the customer value proposition does not work for these people, then nothing will.  More likely, if it were cheaper, they would email to ask for it to be free.</li>
<li><strong>Press reviews calling it expensive</strong>: My analysis of iPhone app reviewers, excluding the true professionals, shows that a large majority of them complain that all iPhone apps are expensive ($2.99 for a recommended game is expensive - give me a break!).  I suspect their agenda is to get everything for free.  The true professionals, like MacWorld, rarely comment on the pricing, allowing their intelligent readers to make their own value calls.  When they do comment on pricing, its usually worth listening to.</li>
</ul>


<h3>Decisions yet to be made</h3>

<p><strong>Do I increase the price when the universal/iPad version comes out?</strong>  Lots of developers do this.  Start with the iPhone version being cheaper, say $9.99, then boosting the price higher, say $19.99, when
the universal is released as the iPad version offers an even better value proposition.  I&#8217;ll probably do this.</p>

<p><strong>Do I create a separate and more expensive iPad version instead?</strong>  I can do more on the iPad screen, which is better for customers and increases the value of the product.  But I will also annoy existing customers who purchased the iPhone version because the&#8217;ll have to buy the same product again.  Personally, I don&#8217;t like to buy the same thing twice, so I&#8217;ll very likely not do this.</p>

<h3>Decision made</h3>

<p><strong>Sights to See</strong> will be released for $9.99.  The customer value proposition shows that this app will save them money, and the amount saved will grow as they travel to more places.</p>

<p>And I hope enough people buy it and love it as much as I do.</p>
]]></content>
  </entry>
  
</feed>

