<?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>subbu.org &#187; Software Engineering</title>
	<atom:link href="http://www.subbu.org/blog/category/software-engineering/feed" rel="self" type="application/rss+xml" />
	<link>http://www.subbu.org</link>
	<description>HTTP, REST and some Cycling</description>
	<lastBuildDate>Tue, 13 Jul 2010 00:09:15 +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>Another Gem from The Programmers&#8217; Stone</title>
		<link>http://www.subbu.org/blog/2008/08/another-gem-from-the-programmers-stone</link>
		<comments>http://www.subbu.org/blog/2008/08/another-gem-from-the-programmers-stone#comments</comments>
		<pubDate>Wed, 13 Aug 2008 18:19:02 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://www.subbu.org/?p=273</guid>
		<description><![CDATA[Here is another gem from Alan Carter of the Programmers&#8217; Stone fame:
The Effects of Stress on Programmers&#8217; and Groups&#8217; Performance
]]></description>
			<content:encoded><![CDATA[<p></p><p>Here is another gem from Alan Carter of the <a href="http://www.datamodel.co.uk/Reciprocality/www.reciprocality.org/Reciprocality/index.html">Programmers&#8217; Stone</a> fame:</p>
<p><a href="http://the-programmers-stone.com/2008/07/24/oscon-2008-slides/">The Effects of Stress on Programmers&#8217; and Groups&#8217; Performance</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2008/08/another-gem-from-the-programmers-stone/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Obvious Choices</title>
		<link>http://www.subbu.org/blog/2008/06/obvious-choices</link>
		<comments>http://www.subbu.org/blog/2008/06/obvious-choices#comments</comments>
		<pubDate>Wed, 18 Jun 2008 11:33:36 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2008/06/obvious-choices/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>One downside of working with experienced people is that, some experienced people tend to be opinionated, and the trouble with opinions is that opinions are, well, instantaneous reactions based on things they learned in the past. You can wake up an opinionated person and ask a question that you know this person has an opinion on, and that person (self included, on occasion) will most likely blurt out that opinion without even understanding the context. Unless careful, it is easy to get trapped into that mindset, and start enjoy being opinionated, and consequently, making or advocating &quot;obvious&quot; choices. Welcome to my soft rant!</p>
<p><span id="more-186"></span></p>
<p>Here is one opinion heard several times on the blogosphere. If X says that he/she had performance issues with this new cool website, the &quot;opinionated&quot; would immediately ask, &quot;is that Rails based?&quot; and without even waiting for an answer, would offer his/her expert opinion that &quot;Rails is slow&quot; and that X should use Grails, PHP, or whatever that person is currently a fan of.</p>
<p>No offense to the commenter, but I received such a comment when I <a href="http://www.subbu.org/weblogs/main/2008/03/dreamhost_to_sl.html">blogged</a> that I had performance issues with DreamHost. I did not buy the comment that Rails is slow then, and I don&#8217;t buy it now. There are other things that influence scalability and these vary from case to case.</p>
<p>Here is another example. In response to <a href="http://blog.doloreslabs.com/2008/06/facestat-scales/">FaceStat scales!</a>, the first commenter asks &quot;Why on earth didn&#8217;t you use something like Grails that actually DOES scale?&quot;. I doubt if this commenter fully understands the architecture of FaceStat. To me, that is an automatic reaction, and so, I would be suspicious of that &quot;obvious&quot; choice that Grails or some other alternative would magically fix the scalability problems.</p>
<p>Say, for instance, if a PHP or a rails app is slow, an &quot;obvious&quot; choice is to throw memcache. But no amount of caching would rescue a poorly architected app. In fact, MySQL <a href="http://dev.mysql.com/tech-resources/articles/mysql-query-cache.html">query caching</a> may be sufficient for typical caching needs.</p>
<p>After writing the initial prototype of <a href="http://www.cyclogz.com">Cyclogz</a>, I wanted to check if there are similar sites, and if so, how they are approaching the problem. The problem was simple &#8211; retrieve a large amount of data from a GPS, and then extract lots of info from it for both presentation and analysis purposes. I came across two sites (one of which is <a href="http://www.motionbased.com">MotionBased<a>, owned by Garmin). Both these sites did what seemed like an &quot;obvious choice&quot;. Both sites upload all the data (in megabytes) to a server, store it in the database, and then kick off a background process to analyze and extract the data. This approach requires more hardware on the server side, more code to manage the background work, and more importantly, takes away instant gratification from the user. I won&#8217;t describe alternatives here in detail, but better and more scalable design choices do exist. It was also fun thinking about the alternatives, and implementing those.</p>
<p>In the REST community, there is a similar pattern. Every now and then someone comes along with a need to do batch processing asserting that making &quot;n&quot; connections is slower than POSTing all requests in a single batch. When told of the problems with this approach, that person would immediately conclude that REST and/or HTTP is broken and that he/she &quot;needs&quot; to do batch processing.</p>
<p>So, if a choice seems too obvious to be incorrect, and is given by a smart but opinionated person, I say, take a step back, question and ponder. The obvious is not necessarily the best choice. The fun in writing software is figuring out those non-obvious choices. Repeating obvious choices is not fun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2008/06/obvious-choices/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Avoid Versioning &#8211; Please</title>
		<link>http://www.subbu.org/blog/2008/05/avoid-versioning-please</link>
		<comments>http://www.subbu.org/blog/2008/05/avoid-versioning-please#comments</comments>
		<pubDate>Mon, 19 May 2008 20:12:49 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2008/05/avoid-versioning-please/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>Peter Williams recently made a <a href="http://pezra.barelyenough.org/blog/2008/05/versioning-rest-web-services/">good proposal</a> suggesting content-negotiation as a means to advertise and ask for version support. This is in contrast to using version identifiers in URIs as is commonly done. This is a neat idea. Peter&#8217;s post prompted some <a href="http://www.ebpml.org/blog/89.htm">debate</a> and a <a href="http://pezra.barelyenough.org/blog/2008/05/resthttp-service-versioning-reponse-to-jean-jacques-dubray">rebuttal</a>. But I find that this debate is a distraction.</p>
<p><span id="more-182"></span></p>
<p>In my view, the real problems that every interface designer must be concerned about every day are (a) maintaining compatibility with the interface&#8217;s clients, and (b) avoiding versioning.</p>
<p>Yes, avoiding versioning!</p>
<p>Versioning is a hack and is a clever disguise to hide the fact the interface has broken its contract with its clients, and needs clients to start all over again (i.e. upgrade to a newer version of the contract).</p>
<p>So, please please avoid versioning. I don&#8217;t care how pretty one versioning solution is over another versioning solution, if it requires clients to change their code. If it does not require clients to change their code, the changes to the interface are, after all, compatible, and hence do not require a change in the version.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2008/05/avoid-versioning-please/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Programers and Colors</title>
		<link>http://www.subbu.org/blog/2007/10/programers-and-colors</link>
		<comments>http://www.subbu.org/blog/2007/10/programers-and-colors#comments</comments>
		<pubDate>Tue, 09 Oct 2007 08:06:39 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2007/10/programers-and-colors/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p><a href="http://www.betaversion.org/~stefano/linotype/news/108/">Stefano Mazzocchi</a> has a good write up about programmers and picking up colors. He is right. All the programmers I know, myself included, are awful at designing user interfaces with pleasing colors, fonts and layouts. Most programmers may not realize this &#8211; but programmers can&#8217;t get away from having these skills. </p>
<p>It is true that software companies hire skillful designers when it comes to user interface design. The designers can not only pick right colors and fonts, but also help improve usability and accessibility. However, there are times when a programmer needs to create an eye-pleasing user interface to sell his/her ideas to others. Given two equally competent programmers, the one with better user interface design skills may have a better shot at convincing that his/her ideas are worth taking serious. Imagine walking into a room full of skeptics ready to bash your ideas, and that first thing they notice on your demo are awful colors!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2007/10/programers-and-colors/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Makes Software Legacy?</title>
		<link>http://www.subbu.org/blog/2007/08/what-makes-software-legacy</link>
		<comments>http://www.subbu.org/blog/2007/08/what-makes-software-legacy#comments</comments>
		<pubDate>Thu, 23 Aug 2007 14:53:35 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2007/08/what-makes-software-legacy/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>What makes software legacy? Two most popular answers are the age of the software, or the technology it was built upon. Looking at this question more critically, neither of these answers make any sense. For instance, some of the internet technologies are over 10 years old &#8211; does it make those legacy? Is Apache web server legacy? How about mainframes or Unix? Apparently these are not called legacy either &#8211; although each of these are quite old &#8211; way older than the latest buzz technology. How about software built using C or Perl? In fact, EJB 1.0, which is younger than, let&#8217;s say, C language, is considered legacy now. So, it is neither the age of the software nor the age of the underlying technology that make software legacy.</p>
<p><span id="more-112"></span></p>
<p>So, what makes software legacy? IMO, what makes software legacy is the change in assumptions. Most software is built around some assumptions (or use cases, in some cases) about its usage, its environment and so on. For instance, take my once-favorite editor <a href="http://www.gnu.org/software/emacs/">Emacs</a>. There may be still a large number of users vouching for Emacs, but I consider it legacy. In my view, it was designed for a different era for a different kind of software development with a different set of technologies in mind. For now, I think that is what makes software legacy.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2007/08/what-makes-software-legacy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Frameworks and Scalability &#8211; Antithesis?</title>
		<link>http://www.subbu.org/blog/2007/08/frameworks-and-scalability-antithesis</link>
		<comments>http://www.subbu.org/blog/2007/08/frameworks-and-scalability-antithesis#comments</comments>
		<pubDate>Thu, 16 Aug 2007 15:05:00 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2007/08/frameworks-and-scalability-antithesis/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>I was thrilled to read about <a href="http://www.plentyoffish.com">PlentyOfFish</a> <a href="http://highscalability.com/plentyoffish-architecture">architecture</a> at <a href="http://highscalability.com">http://highscalability.com</a> today. What impressed me most was the fact that an incredible amount of scalability was achieved completely ignoring a number of design qualities that web frameworks try to provide via layers of abstractions. This architecture just reinforces the idea that complex problems can be solved without complex abstractions.</p>
<p><span id="more-111"></span></p>
<p>I wonder if developers really need all those frameworks that try to hide the <a href="http://Springframework.org"><code>new</code></a> from Java, the <a href="http://java.sun.com/javaee/javaserverfaces/"><code>&lt;a href=&quot;...&#038;quot"&gt;...&lt;/a&gt;</code></a> from HTML or <a href="http://java.sun.com/javaee/technologies/jdo/"><code>SELECT A, B, C from FOO</code></a> from code?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2007/08/frameworks-and-scalability-antithesis/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Developer&#8217;s Misery</title>
		<link>http://www.subbu.org/blog/2007/06/developers-misery</link>
		<comments>http://www.subbu.org/blog/2007/06/developers-misery#comments</comments>
		<pubDate>Sun, 10 Jun 2007 19:36:31 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2007/06/developers-misery/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>During my years of software development experience, I have come across a number of developers and teams that feel unhappy that they don&#8217;t get to build a grand (and right) architecture to solve a given problem. At one point I used to agree with that camp, but over the last couple of years, I began to see this differently, and I now disagree with this attitude. During this time, I have come to accept one fact &#8211; that most software developers operate in bubbles and that their understanding of reality is imprecise, and that makes the developer unhappy and miserable.</p>
<p><span id="more-100"></span></p>
<p>Here I am not referring to small software initiatives that are run end-to-end by a small team. I am talking about larger initiatives that cost money and time to build, and you need real customers paying real money lined up to buy the software. I am also not talking about software that must live for decades after it is built without changes.</p>
<p>Let me take a simple scenario. Let&#8217;s say, a developer Joe walks up to to a program/product manager Bob and asks him this question &#8211; &#8220;Hi Bob, do you think this feature would be cool for product.&#8221; Bob may respond &#8220;yes&#8221; without realizing that that &#8220;cool feature&#8221; would add up x-amount of complexity or cost to the product without returning y-amount of benefit or revenue. An affirmative answer from Bob would make the Joe happy. In his view, it is the right thing to do, and Bob has just agreed. He would then go and build it happily for the next several months.</p>
<p>Instead, let us assume that Bob starts asking some probing questions &#8211; like the nature of the implementation, how would a user use it, how many users would love to see such a feature in the product, impact on schedules, market realities, what it means to the product road map and so on. In Joe&#8217;s mind, these questions are not so important because &#8220;implementing his idea is the right thing to do&#8221; for the product. At the end of a long and frustrating debate (frustrating for Joe, that is), let us imagine that Bob vetoes the proposal to build that cool feature. Depending on your team structure, Joe may be a product/program manager or someone who is a stakeholder that can veto product changes. A negative answer from Bob would make the developer Joe very unhappy. He would be thinking &#8220;these guys don&#8217;t understand why this is so important to do&#8221; and so on. Unfortunately, Joe is most likely wrong in drawing such a conclusion and here is why.</p>
<p>One important point to notice here is that the developer&#8217;s reality is different from the reality of whoever vetoed the developer&#8217;s proposal. The developer wanted to do some really important changes to product, that in his view would help the product in the long term. From a purely technical point of view, he may very well be right. The trouble here is that his view of the reality is partial and skewed. As a developer, he is very likely isolated from end users, their use cases, and their real problems. He is also most likely isolated from the cost of development and the operating realities. As a result, he may not have enough data to make a case for his proposals other than saying that he is technically right. The net result is misery.</p>
<p>My take on this avoiding this misery is to focus on funding and support.</p>
<p> As a developer, you have to get your users and other stakeholders fund your ideas. If you are unable to make this happen, and consequently if you are not allowed to implement your ideas, it is nobody&#8217;s fault other than yours. Your idea may be great on paper, but it may not be worthy of implementation if you are unable to convince other stakeholders and get funding. But how would you get funding?</p>
<p>That seems like a hard question &#8211; but there is very simple solution. Take one step at a time. Instead of trying to build the entire solution correctly and completely the first time, do it in iterations. Try to get the first iteration done as quickly and as cheaply as possible. Then wait for funding and support. They will happen if users and other stakeholders perceive your idea as being useful. Let users speak, and tell you what works and what does not. This has two advantages &#8211; firstly as a developer, it will let you test the waters and get a better insight into use cases. This improves your sense of reality. Secondly, it will make it easy to make the case for your ideas. In fact, your users may themselves make the case for your ideas. This approach is more realistic, pragmatic and avoids the developer&#8217;s misery.</p>
<p>This is also one reason I&#8217;m usually against building grand architectures to solve grand problems in big chunks. Grand architectures don&#8217;t matter if users are not with you. Get the users your way first, and then improve solutions bit by bit. At the end, you may not have the most elegant and clean architecture, but you will have something that works for the users who use it.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2007/06/developers-misery/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Passionate about Work vs Company</title>
		<link>http://www.subbu.org/blog/2007/02/passionate-about-work-vs-company</link>
		<comments>http://www.subbu.org/blog/2007/02/passionate-about-work-vs-company#comments</comments>
		<pubDate>Fri, 16 Feb 2007 08:43:33 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2007/02/passionate-about-work-vs-company/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>Here is an excellent post titled <a href="http://headrush.typepad.com/creating_passionate_users/2007/02/dont_ask_employ.html">Don&#8217;t ask employees to be passionate about the company!</a>. Management of a number of companies value loyalty to the company/team/group (i.e. passionate about the company) more than the employees being passionate about work.  This post makes a comparison between good companies and good UI.</p>
<p><span id="more-94"></span></p>
<p>I am certain that one of the key differences between successful companies and not so successful companies is the way loyalty is treated. This quote from this post says it best.</p>
<div class="note">
The company should behave just like a good user interface &#8212; support people in doing what they&#8217;re trying to do, and stay the hell out of their way. Applying the employer-as-UI model, the best company is one in which the employees are so engaged in their work that the company fades into the background.
</div>
<p>I can not agree more. Companies should behave like a good interface, letting employees explore their creativity without getting interrupted with popups, alerts, crashes, hangs and so on. Companies should be like Mac OS X, and not like Vista, i.e. stay in the background and let me do my job better. Don&#8217;t keep interrupting me with things happening in the OS. Having switched to Mac from Windows+Linux about two months ago, I can now appreciate the role an OS provides its user. The Mac is like my place of work, not a tool I have to work with.</p>
<p>The sad part is that companies are not homogeneous in their values. There are always folks who value company/team loyalty over being competent, open and future-minded. When those folks start taking charge, watch out. That is one of the early signs of doom.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2007/02/passionate-about-work-vs-company/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Service API Design &#8211; Context vs State</title>
		<link>http://www.subbu.org/blog/2006/12/service-api-design-context-vs-state</link>
		<comments>http://www.subbu.org/blog/2006/12/service-api-design-context-vs-state#comments</comments>
		<pubDate>Sun, 24 Dec 2006 20:45:26 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[REST]]></category>
		<category><![CDATA[Software Engineering]]></category>
		<category><![CDATA[Web Services]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2006/12/service-api-design-context-vs-state/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>Carlos Perez at <a href="http://www.manageability.org">manageability.org</a> posted an interesting discussion on <a href="http://www.manageability.org/blog/stuff/object-oriented-interaction-harmful">OO-styled interactions</a>, and I can&#8217;t agree more.</p>
<p>It is very common to find most people listing <em>stateless</em>ness as one of the key principles of service API design. Statelessness is an overloaded term. To my experience, when someone says that a service is stateful, he/she usually means that the service <em>maintains</em> some internal state. We can argue all day long on whether maintaing state is good or bad &#8211; the answer usually depends on what the service is doing. In most cases, whether a service needs to maintain state or not is a service implementation choice &#8211; service users do not need to know or care about it.</p>
<p><span id="more-82"></span></p>
<p>From the client&#8217;s point of view, statefulness of a service usually implies that interactions with the service need to happen in some sequence to be meaningful, i.e. the client maintains some context with the service it is interacting with. Context is what a client should care about &#8211; not about whether the service is stateful or stateless.</p>
<p>Shared context makes service invocation interesting and meaningful. The service needs to define the context which may then be updated by the service or the client, and may even include references to any internal state maintained by the service itself. Services that don&#8217;t require any client-managed context are usually general-purpose utility services. Most usuful services need to depend on some share context to be useful. Context is what makes it possible to break a task into sub-tasks and let the client invoke sub-tasks in some defined sequence.</p>
<p>Some designers may prefer combining shared context with the inputs and outputs of service invocations. IMO, keeping the context separate from the data being processed and returned makes the service interface definition lot more cleaner, easier to understand, and extend. One problem with most programming models used for implementing services is that they don&#8217;t provide for shared context.  For instance, take stateful EJBs. They are becoming extinct (rightly so) because they emphasize on the stateful nature and not on the shared context. With stateful EJBs, sharing the context meant that the client held onto the bean till the work is done. That is not the same as the shared context. Unfortunately, later layers like Java web services extended the same notion, and don&#8217;t provide for shared context within the supported programming models. You can easily bind a web service implementation to a class or a EJB, but you need to invent your own mechanisms for supporting shared context. Then there is the <a href="http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=ws-caf">Web Servces Composite Application Framework</a>, but I don&#8217;t think that is what service developers really want to worry about.</p>
<p>This also reminds me of <a href="http://www.w3.org/2001/03/WSWS-popa/paper29">The Need for Shared Context</a> by Anne Thomas Manes, which argued for the need for defining a shared context.</p>
<p>Another harmful aspect OO-styled interactions that Carlos did not mention is idempotency. One of the problems with object-oriented  development is that it is difficult to tell whether a given service invocation is idempotent or not.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2006/12/service-api-design-context-vs-state/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Joel&#8217;s Field Guide</title>
		<link>http://www.subbu.org/blog/2006/09/joels-field-guide</link>
		<comments>http://www.subbu.org/blog/2006/09/joels-field-guide#comments</comments>
		<pubDate>Thu, 07 Sep 2006 08:14:57 +0000</pubDate>
		<dc:creator>Subbu Allamaraju</dc:creator>
				<category><![CDATA[Software Engineering]]></category>

		<guid isPermaLink="false">http://wp.subbu.org/2006/09/joels-field-guide/</guid>
		<description><![CDATA[
]]></description>
			<content:encoded><![CDATA[<p></p><p>Another nice articiel only Joel Spolsky can write <a href="http://www.joelonsoftware.com/articles/FieldGuidetoDevelopers.html">A Field Guide to Developers</a>. Here is my favorite part of this article:</p>
<p><span id="more-79"></span></p>
<div class="note">
Programmers have very well-honed senses of justice. Code either works, or it doesn’t. There’s no sense in arguing whether a bug exists, since you can test the code and find out. The world of programming is very just and very strictly ordered and a heck of a lot of people go into programming in the first place because they prefer to spend their time in a just, orderly place, a strict meritocracy where you can win any debate simply by being right.
</div>
<p>I don&#8217;t hear people preaching this style argument often, but the best programmers I know and admire do follow this line of thinking.</p>
<p>Joel is so right about developers&#8217; perception of politis. It is all about making <em>just</em> choices . Ranting of any kind usually starts with something or other not being, well, <em>just</em> &#8211; listen up managers!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.subbu.org/blog/2006/09/joels-field-guide/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
