<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Pervasive Code &#187; IA</title>
	<atom:link href="http://www.pervasivecode.com/blog/category/ia/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pervasivecode.com/blog</link>
	<description>Jamie Flournoy's Software Development Blog</description>
	<lastBuildDate>Wed, 01 Feb 2012 06:11:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Clickwrap UI mini-rant</title>
		<link>http://www.pervasivecode.com/blog/2008/08/27/clickwrap-ui-mini-rant/</link>
		<comments>http://www.pervasivecode.com/blog/2008/08/27/clickwrap-ui-mini-rant/#comments</comments>
		<pubDate>Wed, 27 Aug 2008 16:08:16 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[Firefox]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[humor]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2008/08/27/clickwrap-ui-mini-rant/</guid>
		<description><![CDATA[When I am ruler of the universe, this will be my first edict:
Any clickwrap license which:
(a) is longer than 1000 words, OR
(b) is longer than ten (10) times the height of the text box it is enclosed in, OR
(c) is displayed in a text box that uses less than 5% of the total display area [...]]]></description>
			<content:encoded><![CDATA[<p>When I am ruler of the universe, this will be my first edict:</p>
<p>Any clickwrap license which:<br />
(a) is longer than 1000 words, OR<br />
(b) is longer than ten (10) times the height of the text box it is enclosed in, OR<br />
(c) is displayed in a text box that uses less than 5% of the total display area and cannot be resized by the user for easier reading, OR<br />
(d) cannot be selected for copying and pasting into another document, OR<br />
(e) cannot be read before purchase,<br />
IS AUTOMATICALLY NULL AND VOID.</p>
<p>Inspiration abounds, but today it&#8217;s the Firefox 3 clickwrap license window&#8217;s that fails (c) and probably also (a) and (b) which reminded me of this common UI issue.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2008/08/27/clickwrap-ui-mini-rant/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>J2ME: Write Once, Be Disappointed Everywhere</title>
		<link>http://www.pervasivecode.com/blog/2007/08/19/j2me-write-once-be-disappointed-everywhere/</link>
		<comments>http://www.pervasivecode.com/blog/2007/08/19/j2me-write-once-be-disappointed-everywhere/#comments</comments>
		<pubDate>Mon, 20 Aug 2007 05:37:59 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[C++]]></category>
		<category><![CDATA[IA]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[articles]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/08/19/j2me-write-once-be-disappointed-everywhere/</guid>
		<description><![CDATA[We developers and other nerdy folk are used to using strange and klunky applications that do something special, and we&#8217;re used to that trade-off.
Eclipse is an IDE so it&#8217;s hard to imagine it not being baroque and difficult to use, requiring weeks of effort to become productive. JBidWatcher has saved me a lot of money [...]]]></description>
			<content:encoded><![CDATA[<p>We developers and other nerdy folk are used to using strange and klunky applications that do something special, and we&#8217;re used to that trade-off.</p>
<p><a href="http://www.eclipse.org/">Eclipse</a> is an IDE so it&#8217;s hard to imagine it <i>not</i> being baroque and difficult to use, requiring weeks of effort to become productive. <a href="http://www.jbidwatcher.com/">JBidWatcher</a> has saved me a lot of money on eBay so I could probably put a dollar value on how much it&#8217;s worth to endure its bizarre UI. <a href="http://azureus.sourceforge.net/">Azureus</a> is fairly fugly also but it does a very good job and has a deep, sophisticated UI that&#8217;s fairly easy to understand, so despite the eyesore, it&#8217;s at least fairly clear. The common thread among all of these is that they are all written in Java, and that they are so valuable that it&#8217;s worthwhile to overlook the ugly UIs.</p>
<p>Now imagine those sorts of trade-offs, but on already difficult to use mobile devices, and aimed at consumers. Are you making a strategically wise choice by sacrificing usability and control over the user interface, and probably access to platform-specific features such as dialing the phone, in order to save money on development? Adam Breindel talks about this in <a href="http://skipmeamadeus.blogspot.com/2007/08/when-building-smartphone-app-resist.html">When Building a Smartphone App, Resist the Siren Song of J2ME</a>.<br />
<span id="more-42"></span></p>
<p>Adam and I worked on a J2ME application and I totally agree with him about the disillusionment of trying to write a single app that would work across phones. Issues include:</p>
<ul>
<li>Complex and difficult application installation procedures for end-users: How do you install the JVM on the phone? How do you get the plain J2ME app packaged up so that the phone will accept it? Does the app require manual user configuration before use? Is there a different launching process from other apps?</li>
<li>Lack of control of the user interface: hardware details such as how many buttons you have, whether there&#8217;s a stylus, etc. differ from phone to phone, and the API to let you code once and let J2ME handle the layout for each device leaves your code very disconnected from what&#8217;s actually happening on the screen.</li>
<li>Not being able to use recent J2ME APIs because even the latest phones only support older, more minimal J2ME APIs</li>
<li>Not being able to do things on a phone that would seem obvious, like dialing the phone, opening a hyperlink in the phone&#8217;s browser, sending an SMS, or making a network connection. Either these are entirely impossible or require phone-specific or JVM-specific tools and procedures to sign your application, or having the runtime nag the user to request permission to do something that they just asked the app to do for them.</li>
</ul>
<p>For all the noise Sun is making about broad J2ME penetration, the developer experience is quite disappointing, and as a result, the user experience is also quite disappointing. You can look up J2ME features and APIs and get excited, but when you actually deploy your app to a handset, it won&#8217;t load, or runs terribly slowly, or looks awful, or simply doesn&#8217;t do the things that the API says will happen when you call it a certain way. Suddenly the strict J2SE and J2EE logo certification programs make sense, because the J2ME approach of making so much functionality specified but optional leaves developers high and dry. The phone supports J2ME version xyz, but write an app coded to that API that works on the emulator and deploy it to a handset and lo and behold, all those optional APIs turn out to be missing even though the handset is capable of that functionality, and <i>some mandatory API functions are not working</i>. <a href="http://en.wikipedia.org/wiki/Here_be_dragons">Here be dragons</a>.</p>
<p>Case in point: can&#8217;t dial the phone on a Treo 650 (at least, not as of a year ago). The J2ME API tells you how to do it. The PalmOS JVM (made by IBM) lets you make the API call, and returns a successful response. Nothing happens. IBM says they&#8217;re aware of this issue. The end. The docs say you can, the code you write says you did, the phone just doesn&#8217;t do it.</p>
<p>Case in point: Every time you start an application and it accesses the network for the first time on a Treo 650, the user is nagged for permission to access the network. Quit the app and start again, nagged again. IBM has a tool that you can use to sign the app, but you have to use their VisualAge Micro Edition IDE which costs hundreds of dollars to do that. Try and find and download the trial version. A year ago, it was not possible. So, making that persistent nag go away probably costs several hundred dollars. (I never verified that it actually works, just that IBM says the way to sign the app so that it&#8217;s trusted is to do that, and that there was no available free way to get that tool.)</p>
<p>These are minor issues, but they certainly interfere with the quick usage pattern of a mobile app, and make it annoying to use your app. Imagine what that would be like if you had a competitor with a native application for that phone, whose application probably cost them more, but their app is better and the user likes it a lot more.</p>
<p>The important distinction here is not cost, it&#8217;s ROI. It costs a lot to develop a similar application for each smartphone platform, using that platform&#8217;s native tools. It would seem to cost a lot less to develop a J2ME app. But that&#8217;s only if you assume that it&#8217;s OK to abandon features and settle for a horrid user experience in the course of development.</p>
<p>It&#8217;s likely that your goal as a development team is to develop an app that has a predefined feature set that you know the device can support, and a predefined UI design that your mobile-savvy UI people are sure will go over well with users accustomed to that particular kind of smartphone. In that case you will almost certainly fail to accomplish that goal using J2ME. You have to scale back your goal so that you&#8217;re satisfied that you got something kinda like what you wanted working on a bunch of phones, and determined users will probably be able to figure out how to install it and make it work.</p>
<p>I call that phenomenon &#8220;write once, be disappointed everywhere.&#8221;</p>
<p>Let&#8217;s continue talking about cost, though. The native apps may require (or suggest) different programming language skills for different devices. It might seem wise to just write everything in C, but I think that&#8217;s a false economy as well. The phone APIs will differ so much that you will really need a native developer for each platform, not a team of generic C developers who will figure out the individual phone stuff and be freely floating resources that you can assign to whatever app version needs their attention. Smartphones may run Linux, may run Windows Mobile, may run PalmOS, may run Symbian&#8230; these are different operating systems with very different ideas of how applications run and coexist. The platform specific knowledge (APIs, appropriate UI feel, device capabilities) is probably an order of magnitude harder to learn and maintain than the ability to get an application working in a given programming language.</p>
<p>How much of a great C programmer&#8217;s skill is really the C language, and how much of it is proficiency with the available libraries on the platform he or she is accustomed to? I think close to 90% of their professional skill set is platform and library familiarity, and 10% syntax and low-level understanding of how the language actually works.</p>
<p>In light of this (just using C doesn&#8217;t mean developers or code are portable across smartphones), consider that there are high level languages available for some smartphones. What if that 90% platform familiarity means they can use a language and/or development environment that makes them 5 or 10 times as productive, after spending just a few days or a couple of weeks learning the language syntax?</p>
<p>After our very disappointing J2ME-on-PalmOS port experience, Adam found <a href="http://www.handheld-basic.com/">Handheld Basic</a> which initially appalled me (oh no, BASIC!) but turned out to be a great choice. It&#8217;s a flavor of BASIC, so learning the language didn&#8217;t take long, and the support happens to be quite good (<i>lots</i> of code samples) so picking up the library portion of that 90% didn&#8217;t take long at all. I imagine that C# on Windows Mobile is similar. As more and more phone start to use Linux as their OS (which will be a particularly huge improvement for PalmOS based phones), you&#8217;ll be able to use Python, Ruby, Mono, J2SE (a whole different animal from J2ME), TCL, or pretty much any other high level language available for Linux. At LinuxWorld 2006 I saw a development device running unmodified GNOME desktop apps running on a PalmOS device alongside PalmOS apps. There are more options appearing all the time, and with the exception of Handheld Basic, most of them are ports of familiar, mature, well understood desktop languages, with class libraries relevant to mobile devices.</p>
<p>So, I recommend that you work in whatever high level language lets you do all the platform specific stuff you want, and if that means a different language per phone, that&#8217;s actually going to be the least expensive way to get to the apps you actually wanted to build. A big chunk of the scary cost of developing native apps goes away, because native doesn&#8217;t necessarily mean abandoning Java for C. (In fact I found Handheld Basic to be a more productive environment for me after a couple of weeks than J2ME was, despite my ~8 years of full time Java experience before starting that project.)</p>
<p>That pretty much means no reuse for you. Sorry, but that&#8217;s the deal right now.</p>
<p>If that unique-app-per-platform cost is too scary, consider a few ways to save money:</p>
<ul>
<li>For networked apps (aren&#8217;t they all?) ask yourself if there&#8217;s some logic that could just as easily be done on the server as on the client. Is there some complicated parsing code on the client that could be simplified by changing the response format from the server to something that&#8217;s easier to parse?</li>
<li>Can you remove or alter certain features from a subset of platforms you intend to support, so that your premium supported platforms get your ideal app, whereas a few less popular phones still get a nice app, but perhaps one that doesn&#8217;t have every feature available on your premium app. You might be reading this and thinking &#8220;but that&#8217;s what you said J2ME would force me to do! Why is this any better?&#8221; The distinction is that you are in control of the decision of what to leave out to save money, whereas with J2ME it&#8217;s the platform vendor who makes that decision for everyone using their platform. If you&#8217;re writing an address book, not being able to dial the phone is lethal; not writing the code to let the user attach a photo to the entries is not.</li>
<li>Can you move some user-facing functionality to the server to make the client simpler? Maybe there are some rarely-used features that could be done via a desktop or mobile web browser, so you can focus on putting the ten-times-a-day features on the handset, and making those features fast and convenient. You probably already made that trade-off in general, but perhaps for some kinds of handset, you&#8217;ll move the dividing line a little further, so that for users of particularly rare phones, some moderately frequent features can&#8217;t be done on the phone. This could also be a good approach for new handset types: design a &#8220;lite&#8221; app and a &#8220;full&#8221; app version, build the &#8220;lite&#8221; app first on each platform, and let user demand tell you whether the full app is worth it. Your developers can tell you much more accurately how much the incremental functionality would cost, since they already have done the lite version. Maybe you&#8217;d provide a VoiceXML interface, or mobile web browser interface, for that feature so that the user can still do whatever the feature requires while they&#8217;re far from a desktop PC.</li>
</ul>
<p>A final consideration: labor. Maybe you have some Java developers, or C developers, and don&#8217;t have developers good at Handheld Basic or C#, so you&#8217;re not inclined to fire them all and hire new developers to do native apps, you&#8217;re thinking maybe C on every handset, or J2ME, is still the right choice. I still say that you should probably use native apps in native high level languages on every smartphone platform. If you&#8217;re committed to a strategy of good apps on a bunch of different phones, I think I&#8217;ve made clear that native apps are the only way to currently get there; J2ME simply doesn&#8217;t let you make good apps. So what&#8217;s left is C code written by C developers vs. high level code written by C developers who have to retrain.</p>
<p>As I said above, I don&#8217;t see much chance that your developers or your code will be portable across different smartphones if you use C. Maybe you&#8217;ll get 5-10% savings that way (some code ported across phones, or some developer hours shuffled between platform teams). But you&#8217;d get a 5-10x cost saving from using something very modern and high-level instead of C, and the overhead of training for the language would be very very small as compared to the large and unavoidable overhead of having to learn what the handsets can do and how the APIs for the handset&#8217;s OS work.</p>
<p>I suppose that means that if you have a bunch of C developers who lack smartphone skills, you&#8217;re in a pickle, but that situation seems kind of unlikely to me (a mobile app company hires a bunch of Unix and Win32 C developers with no mobile phone skills?). More likely is that you&#8217;d find a mobile developer who is proficient with one or more handset OSs and the best tools for each one, and they may be of the opinion that C is the best choice since they can reuse skills and some code across platforms. I would say that in that case you need to convince them to (or more likely encourage them to do what they were already considering, which is to) go ahead and find a highly productive high level programming language/environment for each smartphone platform.</p>
<p>A final possibility if you have a ton of platforms to target and a pile of killer C programmers is to try and port something like Python across most of your target platforms, or to make a very high-level API or domain-specific language that runs inside your own custom C portability layer. You might be able to find an open source option that you can invest some developer hours in, so that the actual application-specific code that you write on each platform is minimized and portable. But I suspect that this would still be expensive and would result in some J2ME-like UI abstractions that ended up being very unsatisfying in the end.</p>
<p>Best of luck!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/08/19/j2me-write-once-be-disappointed-everywhere/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>HTML Wireframes vs. Wireframe Drawings</title>
		<link>http://www.pervasivecode.com/blog/2007/02/25/html-wireframes-vs-wireframe-drawings/</link>
		<comments>http://www.pervasivecode.com/blog/2007/02/25/html-wireframes-vs-wireframe-drawings/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 03:25:33 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[IA]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/2007/02/25/html-wireframes-vs-wireframe-drawings/</guid>
		<description><![CDATA[Related to Rapid Application Development vs. Big Design Up Front is the question of what exact format the UI design work should be done in.
This is more important than user stories vs. use cases, class diagrams vs. ERDs and other such decisions, because UI design artifacts are the most user-accessible artifacts. That means they&#8217;re probably [...]]]></description>
			<content:encoded><![CDATA[<p>Related to <a href="/blog/2007/01/10/rapid-application-development-vs-big-design-up-front/">Rapid Application Development vs. Big Design Up Front</a> is the question of what exact format the UI design work should be done in.</p>
<p>This is more important than user stories vs. use cases, class diagrams vs. ERDs and other such decisions, because UI design artifacts are the most user-accessible artifacts. That means they&#8217;re probably the only ones you&#8217;re actually going to be able to get users to look at. Try emailing a CFO a 100-page Word doc full of use cases sometime, if you don&#8217;t believe me. Then sit that same CFO down in front of Excel and ask for a rundown of their least favorite Excel features. Big difference!<br />
<span id="more-6"></span><br />
Shockingly, users care about the user interface. They understand the functionality of the application through the model that the UI presents to the user.</p>
<p>So, if you want feedback, the easiest way to get users to give it is to put something in front of them that looks like the user interface of the application that you&#8217;re building. In fact, the highest-fidelity way to do this is to build the whole application, then let them use it and tell you what needs changing.</p>
<p>This is usually cost prohibitive, so there&#8217;s a trade off to be made: build something that looks kinda like the final application will look, but that takes nowhere as much time and effort to build, and hope that by the time you actually build the thing, it&#8217;ll be really close to what the users wanted.</p>
<p>No, scratch that. Users don&#8217;t <i>know</i> exactly what they want, generally speaking, so building what they wanted is impossible &#8211; they only know if they want it once it&#8217;s in front of them. They can&#8217;t just come out and design the whole system for you, in full detail, and hand you a spec. (I can picture a house I&#8217;d want to build if it were up to me, but I can&#8217;t tell you what brand and model of faucets to use, or what the roof should be made of.  And I certainly wouldn&#8217;t know what to do to meet building codes.) That&#8217;s why people hire professionals &#8211; it doesn&#8217;t mean they&#8217;re stupid, it means they don&#8217;t want to have to deal with all the details themselves. That&#8217;s the designer&#8217;s job.</p>
<p>But users sure can tell you when a certain thing is all wrong, and what that thing should do instead, which is how you&#8217;ll have to get used to dealing with them. (I <i>can</i> tell someone that a faucet is ugly, or that I don&#8217;t like the shower faucets that hotels have that make you turn it all the way past cold to get to hot.)</p>
<p>So, hopefully by the time you build the thing, it&#8217;ll be <em>minimally wrong</em>, and won&#8217;t lack any essential features that everybody forgot about until just now.</p>
<p>Anyway, as I mentioned before in RAD vs. BDUF, you need to understand how inclusive you need to be of stakeholders outside of the core team, in order to build something that isn&#8217;t totally wildly wrong. At one end of the spectrum, you just can&#8217;t get any grasp of what the users are talking about, ever, and you can&#8217;t build anything because you just have no clue what to build. Time to find a different problem to try to solve. At the other extreme, you know what to do and you don&#8217;t need anybody&#8217;s advice. That&#8217;s often the case with writing small apps and scripts to serve personal needs.</p>
<p>In the middle are all the processes where you need to figure out a way to solicit user feedback. Do you need lots and lots of stages of feedback because you barely understand the domain? Or are you pretty sure of what needs to be done, but somebody else is paying so you have to make sure they get a chance to look at it and sign off before you proceed?</p>
<p>These are the questions you should answer so you know whether you want to start with cheap and low-fidelity wireframing tools, like paper prototyping (advocated by <a href="http://www.useit.com/alertbox/20030414.html">Jakob Nielsen</a> and <a href="http://alistapart.com/articles/paperprototyping">A List Apart</a>), or if you should lean toward sophisticated, high fidelity tools like graphics wireframe drawings or, according to some, HTML wireframes.</p>
<p><a href="http://www.boxesandarrows.com/">Boxes and Arrows</a> has an article entitled <a href="http://www.boxesandarrows.com/view/html_wireframes_and_prototypes_all_gain_and_no_pain">HTML Wireframes and Prototypes: All Gain and No Pain</a>, which seems like a pretty bold claim to me. The article&#8217;s author basically argues that Dreamweaver is the ultimate prototyping tool, because it&#8217;s as easy or easier than all of the options, and it makes prototypes that look more like the end product will than any of the other options.</p>
<p>I disagree; I&#8217;ve used Dreamweaver and found it to be one of the slowest, clumsiest, most awkward applications I&#8217;ve ever used. But let&#8217;s assume that Dreamweaver could be replaced with a tool that was basically the designer&#8217;s favorite drawing program that they know and love, except that it saved in HTML format.</p>
<p>Now we&#8217;ve eliminated the new-tool vs. my-favorite-tool issue, so we&#8217;re left with the issue of a continuum of increasing levels of detail. Now, ask yourself this: do you really need to fill in all the details in your wireframe, or can some of them be left until later? This really depends on your confidence level in the accuracy of your initial design decisions, and whether the folks reviewing your wireframes will be able to look past the placeholders and focus on the stuff you&#8217;re asking them to review.</p>
<p>If your users can handle a whiteboard, then you can use that, and take digital camera pictures. I prefer that process instead of paper prototypes, partly because everyone understands that whiteboard drawings have a very constrained level of fidelity (no one will ask &#8220;but will the web site really be all purple?&#8221; just because you drew it in purple).</p>
<p>For later revisions, the argument that an HTML prototype will be so much cheaper because you&#8217;ll reuse it as the start of the real application is clearly invalid. After all, if it&#8217;s wrong and you need to change it, you wouldn&#8217;t use it anyway, so it only makes sense to work on wireframes in the tool that&#8217;s the easiest to use. I personally find that OmniGraffle is faster than a whiteboard, especially if I want to change something small, and typing is faster than writing with a big dry-erase marker, especially if I want to be able to read it.</p>
<p>It&#8217;s simply a matter of the cost to fill in all the low level details before you know if the high level details are right. It&#8217;s wasted work if you do it too early, and if you use HTML, the expectations of the reviewers will be higher, and your ability (and temptation) to over-tweak the look and feel and thus distract reviewers from the content and basic functionality you&#8217;re trying to focus on is high. Does it really matter if that&#8217;s a link, a standard button, or an image button, at this point? That&#8217;s the sort of thing that you don&#8217;t want to get bogged down on, but you will if you&#8217;re not very careful.</p>
<p>Toward the end of the design process, I agree that HTML is a format you&#8217;ll need to use, but only because at some point you have no choice but to write the HTML and CSS for the web site, and to make sure it works with all the appropriate browsers. But I strongly disagree with the argument that, say, tweaking the design in Photoshop first and then doing battle with IE 6&#8217;s interpretation of CSS is slower than doing it in Dreamweaver, and then cleaning up the HTML that Dreamweaver created when it&#8217;s time to make the app work cross-browser for real.</p>
<p>In other words, until somebody makes a WYSIWYG HTML tool that generates clean and maintainable, cross-browser compatible, standards based HTML and CSS, the step of making the full HTML and CSS mockup should be left until dead last. Maybe as Dreamweaver (or another similar tool) improves over time it&#8217;ll make more sense to use it earlier.</p>
<p>In the meantime, instead of building an overly pretty bunch of tentative wireframes, do some graphic comps and show users what the home page and a few subpages will look like. Then show them the home page comp and a low-fi home page wireframe, and say that for now they&#8217;ll be working with the low-fi versions that you can change super fast. They&#8217;ll very likely understand it.</p>
<p>If you have no choice, because the reviewers just don&#8217;t understand that the web site will look prettier than the wireframe, well then maybe Dreamweaver (or little stenciled HTML elements in your drawing program) are the right way to go. But don&#8217;t spin your wheels trying to get things to line up just right in Firefox and IE before you even know what the heck is supposed to go on that page. It won&#8217;t save you time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/02/25/html-wireframes-vs-wireframe-drawings/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rapid Application Development vs. Big Design Up Front</title>
		<link>http://www.pervasivecode.com/blog/2007/01/10/rapid-application-development-vs-big-design-up-front/</link>
		<comments>http://www.pervasivecode.com/blog/2007/01/10/rapid-application-development-vs-big-design-up-front/#comments</comments>
		<pubDate>Thu, 11 Jan 2007 00:48:18 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[IA]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=5</guid>
		<description><![CDATA[I&#8217;m working on a new project which I regard as medium-large in scope, and I&#8217;ve decided to use BDUF instead of RAD on it. This is of course heresy in light of the effect XP and Ruby on Rails have had on the web startup zeitgeist. (&#8220;Isn&#8217;t it all about RAD these days?&#8221;) But I [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on a new project which I regard as medium-large in scope, and I&#8217;ve decided to use BDUF instead of RAD on it. This is of course heresy in light of the effect <a href="http://www.extremeprogramming.org/">XP</a> and <a href="http://www.rubyonrails.com/">Ruby on Rails</a> have had on the web startup zeitgeist. (&#8220;Isn&#8217;t it all about RAD these days?&#8221;) But I still think I&#8217;m making the right call here.<br />
<span id="more-5"></span><br />
I&#8217;m biased toward lightweight processes and high diligence, I will admit. So I&#8217;m pretty much a centrist by default, not wanting to do tons of paperwork nor to use <a href="http://www-306.ibm.com/software/awdtools/suite/">super all-encompassing Tools Of Doom</a>, but also not wanting to just <a href="http://www.rubyonrails.com/screencasts">open up a text editor and start hacking before I&#8217;ve thought something through</a>. As far as I can tell, no formal process recommends either extreme, but they do clump toward one side or the other.</p>
<p>My take on BDUF is not to implement RUP or FDD or TDD or any named process as is, or even customized according to the Official Tome of that specific process. I believe that the best process is the one invented by the software development process expert on your team, tailored to fit the specifics of your project. That would be me. Hopefully that guy has read quite a bit about named published Official Software Development Processes, which I have.  </p>
<p>So, in my case a process that employs some BDUF is not filled with bureaucracy and boilerplate and meetings and signoffs. Really it just means that I&#8217;ve taken long detailed notes on feature ideas, and that I&#8217;m doing wireframes (a.k.a. page schematics) and use cases before coding. I plan to do a page schematic for every page and a use case for every darn thing in the system. If the page is simple, then hey, it shouldn&#8217;t take too long to do a wireframe for that page should it? If the use case is simple it should be trivial to write.</p>
<p>In thinking about this I&#8217;ve come to some general conclusions about RAD vs BDUF that I&#8217;d like to share for the good of all.</p>
<p>RAD is not the next step in evolution beyond BDUF. RAD is not stupid and lazy compared to BDUF. They both have their place. Here&#8217;s how to decide which you need to favor in your roll-your-own process:</p>
<ol>
<li>Do you have a clear vision within your team for what the product will be?</li>
<li>Is there a very solid understanding of the problem domain, within your team?</li>
<li>Do you have stakeholders and/or investors outside the core team who demand to control the design of the product?</li>
<li>How much overlap is there between the software people and the domain expert people in your extended team?</li>
</ol>
<p>RAD works really well if the answers to 1-2 are &#8220;no&#8221;, 3 is &#8220;yes&#8221;, and 4 is &#8220;not a lot&#8221;. It helps <i>a lot</i> to build something that you don&#8217;t fully understand if you have some realistic prototypes to let domain experts and stakeholders fiddle with as you build it.</p>
<p>The disadvantage of RAD can be that the amount of rewriting effort is high. That may be unavoidable but it might be better to do high-fidelity page schematics (basically, a large number of comps) or even an HTML mockup instead of wireframes, rather than actually trying to make it all work before your stakeholders and domain experts have had a few iterations to poke and prod at.</p>
<p>One middle-of-the-road technique I learned from former co-worker <a href="http://www.schierberl.com/cfblog/">Mike Schierberl</a> is to just start with an HTML-only prototype and just &#8220;grey out&#8221; the links, buttons, etc that don&#8217;t work yet, or the content on the page that&#8217;s hardcoded or comes from a canned stub function in the back-end. That allows a stakeholder to just poke around the application and see what works and what doesn&#8217;t, which is a lot more useful than a couple of bulleted lists of done/not done. That gives an indication of progress as well as letting you just do HTML before stakeholders look at and comment on your proposed design. As parts of the UI become better understood, you can code them, and the mockup and running code coexist in the same running instance. When the mockup is gone and it&#8217;s all working code, you have an approved prototype that you can clean up for launch.</p>
<p>BDUF works well if you have a pretty darn good idea of what you want and you have the talent within the team to make decisions about the stuff that hasn&#8217;t occurred to you yet. At some point you absolutely have to make decisions about the lowest level functional and UI details that you&#8217;d rather not have to deal with, but computers can&#8217;t fill in the gaps in your high level design. The point of BDUF is to have all those conversations and design sessions in the cheapest medium possible, which is usually some words in a word processor about what it will do, and some annotated low fidelity pictures that describe how it will look and feel.</p>
<p>The disadvantage of BDUF is that you can get pretty far down the wrong path with no feedback. Stakeholders get impatient when they see that you&#8217;re producing a bunch of requirements gibberish instead of writing code. Wireframes and comps can help somewhat but that depends largely on the level of imagination that the stakeholders have, and their trust in your good judgement about design, and their experience with software applications that you consider to be well designed. Non-software people who just hired you aren&#8217;t going to have much patience for a 4 month design phase on their nickel, especially if you keep emailing them 150 page .doc files full of use cases that they&#8217;re supposed to review.</p>
<p>In my case the answers to the 4 questions above are &#8220;yes&#8221;, &#8220;yes&#8221;, &#8220;no&#8221;, and &#8220;a lot&#8221;. Those are the opposite of the answers that point to RAD as the right choice, so I&#8217;m using BDUF this time.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/01/10/rapid-application-development-vs-big-design-up-front/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OmniGraffle Pro and Subversion</title>
		<link>http://www.pervasivecode.com/blog/2007/01/07/omnigraffle-pro-and-subversion/</link>
		<comments>http://www.pervasivecode.com/blog/2007/01/07/omnigraffle-pro-and-subversion/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 22:04:17 +0000</pubDate>
		<dc:creator>Jamie Flournoy</dc:creator>
				<category><![CDATA[IA]]></category>
		<category><![CDATA[Mac]]></category>
		<category><![CDATA[Subversion]]></category>
		<category><![CDATA[tools]]></category>

		<guid isPermaLink="false">http://www.pervasivecode.com/blog/?p=8</guid>
		<description><![CDATA[I&#8217;m working on wireframes for a startup company, and I&#8217;m using the excellent OmniGraffle Pro to do it. Of course I&#8217;m keeping all my artifacts in Subversion. But there&#8217;s a problem: OmniGraffle sometimes changes a file&#8217;s format from a single flat file to a &#8220;bundle&#8221;, which is a directory that Mac OS X pretends is [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m working on <a href="http://www.iawiki.net/WireFrames">wireframes</a> for a startup company, and I&#8217;m using the excellent <a href="http://www.omnigroup.com/applications/omnigraffle/pro/">OmniGraffle Pro</a> to do it. Of course I&#8217;m keeping all my artifacts in <a href="http://en.wikipedia.org/wiki/Subversion_(software)">Subversion</a>. But there&#8217;s a problem: OmniGraffle sometimes changes a file&#8217;s format from a single flat file to a &#8220;bundle&#8221;, which is a directory that Mac OS X pretends is a single entity (as is seen with all the .app bundles in the /Applications directory). OmniGraffle bundles contain a file with a hideously awful filename, which I&#8217;ve seen in the old Classic MacOS if I remember correctly: <code>Icon^M</code>. Like, 5 characters, 5th is a carriage return. Subversion can&#8217;t check it in, svn:ignore can&#8217;t ignore it. Ugh. Here&#8217;s the fix: <a href="http://www.davidglasser.net/point/2006/07/30/using-omnigraffle-with-subversion-without-sadness/">Using OmniGraffle with Subversion without Sadness</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.pervasivecode.com/blog/2007/01/07/omnigraffle-pro-and-subversion/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

