<?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>JoeCascio.net &#187; development</title>
	<atom:link href="http://joecascio.net/joecblog/tag/development/feed/" rel="self" type="application/rss+xml" />
	<link>http://joecascio.net/joecblog</link>
	<description>Everyone is entitled to my opinion</description>
	<lastBuildDate>Fri, 06 Apr 2012 13:19:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Better Android App Permissions</title>
		<link>http://joecascio.net/joecblog/2012/04/05/better-android-app-permissions/</link>
		<comments>http://joecascio.net/joecblog/2012/04/05/better-android-app-permissions/#comments</comments>
		<pubDate>Thu, 05 Apr 2012 06:18:44 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[technology]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[permissions]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=697</guid>
		<description><![CDATA[If you use an Android device, you&#8217;re familiar with installing apps. Each app has a set of permissions that it requests. For instance, the screen capture at left shows the permissions required by the Google Maps app. As you can see the list is extensive and some of them might give you pause, like &#8220;Services [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://joecascio.net/joecblog/wp-content/uploads/2012/04/device-2012-04-05-004529.png" rel="lightbox[697]"><img class="size-full wp-image-698 alignleft" style="margin-left: 8px; margin-right: 8px;" title="device-2012-04-05-004529" src="http://joecascio.net/joecblog/wp-content/uploads/2012/04/device-2012-04-05-004529.png" alt="" width="216" height="384" /></a></p>
<p>If you use an Android device, you&#8217;re familiar with installing apps. Each app has a set of permissions that it requests. For instance, the screen capture at left shows the permissions required by the Google Maps app. As you can see the list is extensive and some of them might give you pause, like &#8220;Services that cost you money&#8221; or &#8220;Your personal information&#8221;.</p>
<p>Before you install an app, all of its requested permissions are listed, along with the short descriptions you see here and you can decide whether or not you want to install the app, thereby granting it those permissions. That&#8217;s good because unlike iOS, you can see specifically what it wants access to and at least have some knowledge about what it might do and decide whether or not you want to install it. The app cannot access permission-protected functions in the API without this express approval at installation time.</p>
<p>This is good as far as it goes, but it could be a lot better. First, it&#8217;s all or nothing. You either accept all the permissions or you don&#8217;t install the app. Second, the terse and generic explanations are frequently not sufficient to determine if you want to grant the permission or not.</p>
<h3>Developers could provide application-specific explanations of permission use</h3>
<p>It would be great if there were explanations of why the permission is needed in terms of the app&#8217;s functions. For instance, an app I&#8217;m writing requests the &#8220;Phone calls&#8221; permission because it needs to know the hardware ID of the phone to do some database functions. But it&#8217;s not going to make any phone calls. That would be nice for the user to know before they installed the app.</p>
<p>Google Maps would explain why and when it needs to &#8220;directly call phone numbers.&#8221; After poking around in Maps a bit, I discovered that the &#8220;Places&#8221; activity locates things like restaurants and gives you a &#8220;Call&#8221; button right on the listing. This is the kind of when, why, how information you need that is specific to the application in order to decide if you want to grant the permission.</p>
<h3>Android could allow permissions to be individually granted</h3>
<p>When installing an app, it would be much better if, coupled with the application-relevant explanation of the permission&#8217;s use, you could individually grant or withhold a permission. This would require the app developer to identify which permissions were minimally necessary and which were optional, if any. Further, it would require the app to be gracefully tolerant of missing permissions.</p>
<p>For instance, with Google Maps you might choose to deny access to your contact data. When choosing to deny this permission, you should have full knowledge of what functionality you would be missing by doing so. This would make application development more difficult, but would yield significant benefits to the user.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2012/04/05/better-android-app-permissions/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Announcing SLAP</title>
		<link>http://joecascio.net/joecblog/2009/05/18/announcing-slap/</link>
		<comments>http://joecascio.net/joecblog/2009/05/18/announcing-slap/#comments</comments>
		<pubDate>Mon, 18 May 2009 23:39:20 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[distributed applications]]></category>
		<category><![CDATA[federation]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[protocol]]></category>
		<category><![CDATA[publishing]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[slap]]></category>
		<category><![CDATA[subscribing]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=244</guid>
		<description><![CDATA[SLAP &#8211; Simple Lightweight Announcement Protocol Today, to only two close developer friends, I&#8217;m releasing a first prototype of a new project called SLAP (for Simple Lightweight Announcement Protocol). We&#8217;re going to begin multi-server testing of it as soon as possible. If you&#8217;re not a developer, you may not immediately grasp exactly what SLAP is [...]]]></description>
			<content:encoded><![CDATA[<div class="entry">
<h3>SLAP &#8211; Simple Lightweight Announcement Protocol</h3>
<p>Today, to only two close developer friends, I&#8217;m releasing a first prototype of a new project called SLAP (for Simple Lightweight Announcement Protocol). We&#8217;re going to begin multi-server testing of it as soon as possible. If you&#8217;re not a developer, you may not immediately grasp exactly what SLAP is all about, but I&#8217;m hoping it will help all of us establish our own Social Networks of One, as Jeff Pulver calls it, and not be slaves to the whims of services like Twitter or Facebook, that now determine when and how we can communicate.</p>
<p>SLAP is a project I’ve been developing on and off for a couple of years. SLAP provides a very minimal and fast way to alert content or status subscribers that new or updated information is available, without them having to poll constantly for it.</p>
<p>By eliminating polling we benefit both the subscriber and the publisher. The subscriber gets informed of new content immediately, with no polling period latency and no resources of computing or bandwidth are expended between announcements. Likewise, the publisher does not need to provide sufficient bandwidth and computing resources to respond to polling requests, the vast majority of which result in no new information.</p>
<p>Unlike HTTP and XMPP, SLAP is connectionless, employing UDP (User Datagram Protocol) as its underlying transport mechanism. This is why no significant server or network resources are used between announcements. Although XMPP provides the same immediacy of delivery and elimination of polling, it requires long-lived connections to be maintained even if the frequency of announcements is very low, e.g., once a week. HTTP does not require long-lived connections, but instead requires establishing and terminating much TCP connection overhead in a short amount of time to deliver a very small amount of data.</p>
<h3>The SLAP model</h3>
<p>SLAP defines announcements in terms of feeds and posts to those feeds. Each feed is identified with a URI and each post with a perma-link URI. Further, each announcement is uniquely identified independently of the feed and post it is related to. This allows many announcements of the same feed and post. For example a post may be initially created, then edited many times, or commented on many times. Each edit or comment can result in a new announcement of a change to the post.</p>
<h3>Publishers and Subscribers</h3>
<p>There are two basic roles in the use-case model for SLAP; the Publisher and the Subscriber. The Publisher creates new feed content and emits a SLAP event every time that feed content changes that goes to every Subscriber. The Subscribers receive the announcements and respond with an acknowledgement. The announcements and acknowledgements are all delivered using UDP, which means no connection overhead for either the Publisher or the Subscriber. The protocol is tolerant of off-line Subscribers and noisy, unreliable networks. Publishers retry unacknowledged announcements at a fixed period and for a limited amount of time. One of the strengths of SLAP is that a missed announcement is not the end of the world. The Subscriber can periodically check the Publisher for all feed content and discover a missed post that way.</p>
<p>Strictly speaking, SLAP is not intended to deliver content, but only to announce that new or modified content is available on a feed and to provide the URIs for the feed and the post that allow the subscriber to fetch the content. SLAP does provide for a content summary that may in many cases be all the content there is. Microblogging or automated system status updates would tend to use this feature. In these cases, an attribute of the message could show that the summary is the entire post content. This is an optimization that enables a subscriber to avoid making a content fetch when the summary is all that there is.</p>
<p>Having the publisher be responsible and obligated for content storage allows a subscriber that has been offline for an amount of time to fetch any posts it missed simply by reading the feed as it normally would.</p>
<h3>Separation of subscribing and fetching from announcing</h3>
<p>The core SLAP messaging services deliver and acknowledge announcements, but play almost no part in establishing or terminating subscriptions. Nor do they specify how fetching of post content happens. Subscriptions can be established in any number of ways, as long as the required information for announcement delivery and authentication is provided. The subscription protocol is an open development issue, and your comments and suggestions are welcome. Personally, I see a simple extension to RSS as being the most obvious route. This would allow common blogging or microblogging applications like WordPress or Twitter to add announcement support with a relatively small modification to their current RSS support. RSS feeds could allow SLAP-enabled subscribers to discover the SLAP parameters and automatically connect to those feeds providing SLAP announcements.</p>
<h3>Authentication</h3>
<p>Any protocol that “pushes” information to a destination opens a possible hole for spammers. One of the challenges to making SLAP work is enabling subscribers to authenticate incoming announcement messages as to their source and to do it relatively quickly. This first version of SLAP uses a simple MD-5 hash of the message contents with a subscriber generated key that is exchanged at subscription time, ideally using secure communication.</p>
<h3>Try it, you’ll like it.</h3>
<p>SLAP can be used just for publishing, just for subscribing, or both. You’ll need to run it on a machine that you can open the firewall on, and receive UDP messages on ports 14947 for the subscriber and 14948 for the publisher. Or you can use any SLAP server that you’re given access to.</p></div>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2009/05/18/announcing-slap/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress plugin question</title>
		<link>http://joecascio.net/joecblog/2008/12/23/wordpress-plugin-question/</link>
		<comments>http://joecascio.net/joecblog/2008/12/23/wordpress-plugin-question/#comments</comments>
		<pubDate>Tue, 23 Dec 2008 15:26:47 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[distributed microblogging]]></category>
		<category><![CDATA[open microblogging]]></category>
		<category><![CDATA[page template]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=145</guid>
		<description><![CDATA[If there are any WordPress plugin coders reading this, I need your help. I&#8217;m writing a WordPress plugin to add Open Microblogging Support to a blog. In order to do this, I&#8217;d like the plugin to add a special OpenMicroblogging Page to the blog. This special Page is supported by a custom Page Template. Page [...]]]></description>
			<content:encoded><![CDATA[<p>If there are any WordPress plugin coders reading this, I need your help.</p>
<p>I&#8217;m writing a WordPress plugin to add Open Microblogging Support to a blog. In order to do this, I&#8217;d like the plugin to add a special OpenMicroblogging Page to the blog. This special Page is supported by a custom Page Template. Page Templates are normally added to the theme directory. And therein lies my lack of understanding. How do I get a plug-in to add a page template? Copy the php file in the installer code? Seems a little dodgy, but maybe?&#8230;.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/12/23/wordpress-plugin-question/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>OAuth and OMB &#8211; missed point</title>
		<link>http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/</link>
		<comments>http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/#comments</comments>
		<pubDate>Sun, 23 Nov 2008 12:25:09 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenMicroblogging]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=124</guid>
		<description><![CDATA[After spending quite a few hours on yesterdays post, OAuth and OMB post-sharing, it occurred to me with the first cup of coffee this morning that I had missed one important user interface twist in the use of OAuth that actually makes it quite necessary. It depends on how the UI for subscribing works. If, [...]]]></description>
			<content:encoded><![CDATA[<p>After spending quite a few hours on yesterdays post, <a title="OAuth and OMB, first post" href="http://joecascio.net/joecblog/2008/11/22/oauth-and-omb-post-sharing/" target="_blank">OAuth and OMB post-sharing</a>, it occurred to me with the first cup of coffee this morning that I had missed one important user interface twist in the use of OAuth that actually makes it quite necessary.</p>
<p>It depends on how the UI for subscribing works. If, as with a feed reader, the subscriber enters the URL of the person they wish to follow, authorization is unnecessary. The user has made their intention known to their own account, and can simply request the posting server to send updates.</p>
<p>However, if the the subscriber subscribes by visting the site of the poster, and the poster allows unrestricted access, then there must be a mechanism for the subscriber to tell his own site that he wishes to subscribe to the poster&#8217;s updates. This is where OAuth comes in, and it is indeed a well-matched use-case for OAuth&#8217;s functionality.</p>
<p>Apologies to Evan at Identi.ca.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>OAuth and OMB post-sharing</title>
		<link>http://joecascio.net/joecblog/2008/11/22/oauth-and-omb-post-sharing/</link>
		<comments>http://joecascio.net/joecblog/2008/11/22/oauth-and-omb-post-sharing/#comments</comments>
		<pubDate>Sat, 22 Nov 2008 20:57:58 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[authentication]]></category>
		<category><![CDATA[authorization]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[microblogging]]></category>
		<category><![CDATA[OAuth]]></category>
		<category><![CDATA[OpenMicroblogging]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=104</guid>
		<description><![CDATA[This post has been superseded. I missed an important web UI issue which lead me to an incorrect conclusion. Square peg, round hole The OpenMicroBlogging Specification (OMB) contains a section on the use of OAuth to authorize a remote service to post to a user&#8217;s local service. After spending some time studying the OAuth and [...]]]></description>
			<content:encoded><![CDATA[<h3>This post has been <a title="Follow up retraction" href="http://joecascio.net/joecblog/2008/11/23/oauth-and-omb-missed-point/">superseded</a>. I missed an important web UI issue which lead me to an incorrect conclusion.</h3>
<h3>Square peg, round hole</h3>
<p>The <a title="OMB spec" href="http://openmicroblogging.org/" target="_blank">OpenMicroBlogging Specification</a> (OMB) contains a section on the use of <a title="OAuth home page &amp; spec" href="http://oauth.net/" target="_blank">OAuth</a> to authorize a remote service to post to a user&#8217;s local service. After spending some time studying the OAuth and OMB specs, it seems to me that this is not the use-case that OAuth was designed to solve. A square peg in a round hole, you might say.</p>
<p>This is not to say that authorization is not needed for allowing post-sharing, only that OAuth was designed to address a different situation. The simplest way I can characterize the difference is that OAuth applies to a &#8220;one human, two services&#8221; problem and microblogging post-sharing is a &#8220;two humans, two services&#8221; problem.</p>
<h3>OAuth&#8217;s intended use-case</h3>
<p>So, what problem does OAuth fit? OAuth is intended to solve the problem of a person who has content or resources on Service A and wants to allow his/her account on Service B to access those A resources &#8211; <strong>without giving Service B his/her login credentials for Service A.</strong> Note well that it is the same person having accounts on both A and B. This is the &#8220;one-human, two services&#8221; aspect.</p>
<p>So, for example, let&#8217;s say you have an account on Twitter and want to use one of the many alternate Twitter clients out there, e.g., <a title="Twalala home page" href="http://twalala.com" target="_blank">Twalala</a>. You have an account with Twalala and would like to be able to access your account on Twitter without having to fork over your Twitter password. Using OAuth, you would be able to, in essense, tell Twitter to allow your account on Twalala.com to perform various read or post functions with your Twitter data. By the way, Twitter has been promising for months to implement OAuth for exactly this purpose. Again, note that there is only one person with accounts on both systems.</p>
<h3>OMB post-sharing use-case</h3>
<p>Now, let&#8217;s look at the case of two people on two different OMB-compliant sites who want to share their posts, either unilaterally or bilaterally. Let&#8217;s say I have an account &#8220;joecascio&#8221; on site subscriber.com, and my friend has an account &#8220;johnsmith&#8221; on poster.com and I would like to follow John&#8217;s updates. Note that it should not be necessary for either me to have an account on poster.com nor John to have an account on subscriber.com in order for me to &#8220;see&#8221; his updates. Indeed, this is the whole point of federated microblogging; that we can share posts without having to have accounts on many different services. So simply from this fact alone, OMB post-sharing is clearly not the &#8220;one person, two accounts&#8221; use-case. If post-sharing worked by requiring John to have an account on subscriber.com (the second of the &#8220;two services&#8221;) and then authorizing subscriber.com to let his Poster.com account post there, then yes, that would be the OAuth use-case. But it isn&#8217;t!!</p>
<p>So, what is an appropriate protocol or process for enabling and controlling post-sharing? I don&#8217;t have the complete answer, and I&#8217;m hoping that this post will cause some of the many smart people out there to suggest some. But I can state at least some of the problem characteristics, requirements or constraints.</p>
<h3>Post-sharing is subscribing, not cross-posting</h3>
<p>When I register my interest in someone else&#8217;s microblog posts, when I &#8220;follow&#8221; them, it means I want to subscribe to their post stream, just like I would subscribe to their traditional blog. If it were a traditional blog, I would do this by polling their RSS feed which is a simple GET by the subscriber. It does not involve the poster initiating a transaction to &#8220;send&#8221; me anything. But since microblogging implies a much lower latency, which would be inefficient to perform by polling, OMB introduces an optimization. The service on which the post was originally made proactively sends the new post to all subscribers. Great! We can now be notified that a new update is available within a few second without having to poll every few seconds.</p>
<p>BUT this is point of my observation. I would argue that this proactive send is merely an artifice of the optimization and does not change the fundamental relationship of poster and subscriber. From that basic user point of view, the fact that the poster initiates the data transfer is immaterial. The subscriber is still simply seeing something they expressed interest in reading.</p>
<p>This is where I believe OMB goes astray. It lets an optimization detail obscure the higher level concept. Following someone&#8217;s posts means I want to see those posts in my view, but it does not require that either party perceive it as cross-posting to my site. I could equally accomplish the same viewing of that post by fetching it on demand, albeit not as efficiently.</p>
<h3>Subscribing is implicit authorization</h3>
<p>Keeping firmly in mind the fundamental concept of poster and subscriber, what if any authorization needs to happen when I request to follow &#8216;johnsmith&#8217;? I would say that <strong>the very fact I am requesting to see John&#8217;s posts is an implicit authorization that he can send them to me</strong>. Whether he wants to let me see them is a different story and the subject of another post. Let&#8217;s assume he will let me see his posts and we want to use the OMB optimization of his service (poster.com) proactively sending them to me.</p>
<p>When I request to subscribe, I need to send a URL of where to send the notifications and a means to verify that the sender is who I granted the privilege to.  This could be accomplished to different degrees of security. A fairly loose method would be for the subscriber to send a callback URL in the request that encodes a UID for the poster&#8217;s account. If the request transaction is secure, we can be reasonably certain that only the the &#8220;real&#8221; poster will be sending POSTs to that URL. Of course, this does not prevent the poster from sharing the UID, but the subscriber can always simply invalidate the URL and stop receiving the notifications.</p>
<p>In fact, this is pretty much how the <a title="RSS Cloud API spec" href="http://cyber.law.harvard.edu/rss/soapMeetsRss.html" target="_blank">RSS cloud API </a>works and this could be a more proper model for OMB post-sharing.</p>
<h3>What do you think?</h3>
<p>I would be very interested to hear what others have to say about this post. One thing it does not cover is the complementary function of a subscriber GETting, rather than being sent an update. It also does not cover the perfectly matched use of OAuth to allow a user to grant access to other of his/her services just as described in the Twitter/Twalala example under &#8220;OAuth&#8217;s intended use-case&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/11/22/oauth-and-omb-post-sharing/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Work for yourself</title>
		<link>http://joecascio.net/joecblog/2008/10/17/work-for-yourself/</link>
		<comments>http://joecascio.net/joecblog/2008/10/17/work-for-yourself/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 16:44:19 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[philosophy]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=90</guid>
		<description><![CDATA[I just got through watching this video of Jason Fried that was recorded earlier this week in Boston. It&#8217;s the long-form, illustrated-with-slides version of the extemporaneous talk he did for RI Nexus this past Wednesday in Providence. I highly recommend this to anyone involved in software development. Listening to his list of specific dos and [...]]]></description>
			<content:encoded><![CDATA[<p>I just got through watching <a title="Video of Jason Fried talk in Boston" href="http://network.businessofsoftware.org/video/video/show%3Fid%3D2352433%3AVideo%3A2016" target="_blank">this video</a> of Jason Fried that was recorded earlier this week in Boston. It&#8217;s the long-form, illustrated-with-slides version of the extemporaneous talk he did for RI Nexus this past Wednesday in Providence. I highly recommend this to anyone involved in software development.</p>
<p>Listening to his list of specific dos and don&#8217;ts in more detail just now made me realize that there&#8217;s one overarching philosophical tenet that guides all the details and that is the following.</p>
<p>Run your business and build your product for yourself, not for investors or shareholders or analysts or &#8220;big&#8221; customers. Run your business to sustain your own life-style and your own integrity. Build things you believe in, not what some purchasing manager put in an RFP.</p>
<p>Investors want you to grow without bounds. That makes you put in crap you don&#8217;t want. Salesmen want you to put in a useless feature so they can get a big sale. Big customers want you to put in things only they want. While some of these forces may have some benefits, in the long run, they only push you to do things that dilute or muddy up the product with noise. Truly great products are simple, coherent, easy to understand and perform quickly and reliably.</p>
<p>For me, this means satisfying the artist, artisan and craftsman in myself, not somebody who makes money off of what I do. That is where great works come from; not from a balance sheet, an enhancements list, a specification or god knows, Microsoft Project.</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/10/17/work-for-yourself/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thoughts on Jason Fried&#8217;s talk last night</title>
		<link>http://joecascio.net/joecblog/2008/10/16/thoughts-on-jason-frieds-talk-last-night/</link>
		<comments>http://joecascio.net/joecblog/2008/10/16/thoughts-on-jason-frieds-talk-last-night/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 23:53:23 +0000</pubDate>
		<dc:creator>JoeC</dc:creator>
				<category><![CDATA[development]]></category>
		<category><![CDATA[entrepreneurship]]></category>
		<category><![CDATA[Jason Fried]]></category>
		<category><![CDATA[RINexus]]></category>

		<guid isPermaLink="false">http://joecascio.net/joecblog/?p=82</guid>
		<description><![CDATA[Many thanks go out to Jack Templin and RINexus for bringing Jason Fried, founder of 37Signals to Providence last night. Jason spoke on many aspects of his success and what got him there, and answered a lot of questions, even mine! What really impressed me about Jason&#8217;s story was that he became a success doing [...]]]></description>
			<content:encoded><![CDATA[<p>Many thanks go out to Jack Templin and <a title="RI Nexus home page" href="http://rinexus.com/" target="_blank">RINexus</a> for bringing Jason Fried, founder of 37Signals to Providence last night. Jason spoke on many aspects of his success and what got him there, and answered a lot of questions, even mine!</p>
<p>What really impressed me about Jason&#8217;s story was that he became a success doing things the way I&#8217;ve always thought they should be done. And more to the point, exactly the opposite of the way traditional management tells you it should and must be done. Some examples from his talk.</p>
<ol>
<li>Don&#8217;t get venture money. Bootstrap your idea in your spare time keeping your day job. You don&#8217;t want anyone telling you what to do who doesn&#8217;t share your passion for what you&#8217;re doing.</li>
<li>Don&#8217;t have a board of directors. What do they know about what you&#8217;re trying to do?</li>
<li>Don&#8217;t write specs, write code. You can&#8217;t tell whether something is good or bad from a spec, only from working code. Do it quick. If it&#8217;s no good, throw it away and move on. People in organizations are dreadfully afraid of making a mistake. Don&#8217;t worry about it, just do it.</li>
<li>Don&#8217;t keep an enhancement or bug list. Trust your gut to do what&#8217;s most important. When you keep hearing the same thing from people you know and trust, go ahead and do something about it.</li>
<li>Try to do everything in two week increments. That is, don&#8217;t let people get bored doing the project. They do their best work when they&#8217;re excited about the outcome.</li>
<li>Don&#8217;t plan too much. My question to Jason was about whether or not his small 12 person operation would scale up. He said, &#8220;I don&#8217;t know and I don&#8217;t care. We&#8217;ll worry about that when the time comes.&#8221;</li>
<li>Don&#8217;t hire any marketing people. Your customers are your best marketing dept.</li>
<li>Trust your employees. 37 signals gives each of their employees an unlimited charge card, to spend on whatever they want, however much they want. The company bought one employee flying lessons. Not because it would be a usable skill, but because it would make him a more happy and well-rounded employee. In their experience employees do not abuse the charge privilege, but use it sparingly, knowing that it comes of the bottom line.</li>
<li>Don&#8217;t spend money on an office. Keep employees in their own homes. That&#8217;s where they&#8217;re most productive. In an office it&#8217;s too easy to be interrupted and too easy to call a meeting. Meetings are productivity killers.</li>
<li>Charge money for your product from Day One. This is a complement to the Don&#8217;t take money from VCs rule. Nothing succeeds like revenue. If you have something worth paying for, people will pay for it. If it can&#8217;t sustain itself, find something else to do.</li>
</ol>
<p>I&#8217;m sure there were more, but those are the ones that stuck with me. As a survivor of 35+ years in the software development business, I can personally attest to the practicality of these guidelines. I have seen the opposite fail miserably for my whole career, but every once in a while, I managed to become part of something that didn&#8217;t obey the rules, and those were the memorable successes.</p>
<p>Don&#8217;t let the management, marketing and financial suits tell you any different. Do what you know is right. If it doesn&#8217;t work, learn from the experience and don&#8217;t make the same mistake again. But please, don&#8217;t think you can ever get it right without trial and error. It&#8217;s so obvious it&#8217;s painful, but there are still legions of project and product and people managers who wouldn&#8217;t have jobs if not for torturing you with requirements statements, schedules and bug reports.</p>
<p>And one thing that he swears will never be added to BaseCamp, their project management tool: Gantt Charts. Hurray!!</p>
]]></content:encoded>
			<wfw:commentRss>http://joecascio.net/joecblog/2008/10/16/thoughts-on-jason-frieds-talk-last-night/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
<!-- This Quick Cache file was built for (  joecascio.net/joecblog/tag/development/feed/ ) in 0.32402 seconds, on May 18th, 2012 at 9:51 am UTC. -->
<!-- This Quick Cache file will automatically expire ( and be re-built automatically ) on May 18th, 2012 at 10:51 am UTC -->
