<?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>Pop Art Blog &#187; Andrew Hay</title>
	<atom:link href="http://blogs.popart.com/author/andrewhay/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.popart.com</link>
	<description>Flashes of Pop, Wit and Reason</description>
	<lastBuildDate>Mon, 26 Jul 2010 21:16:43 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Holiday&#160;Concerts</title>
		<link>http://blogs.popart.com/2009/12/holiday-concerts/</link>
		<comments>http://blogs.popart.com/2009/12/holiday-concerts/#comments</comments>
		<pubDate>Wed, 23 Dec 2009 22:44:23 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/2009/12/holiday-concerts/</guid>
		<description><![CDATA[So, what’s making all that noise outside my office?
 
]]></description>
			<content:encoded><![CDATA[<p>So, what’s making all that noise outside my office?</p>
<p> <object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/bK0Jzg55T3s&amp;hl=en_US&amp;fs=1&amp;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/bK0Jzg55T3s&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/12/holiday-concerts/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>So, You Asked for a&#160;CMS</title>
		<link>http://blogs.popart.com/2009/11/so-you-asked-for-a-cms/</link>
		<comments>http://blogs.popart.com/2009/11/so-you-asked-for-a-cms/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 07:50:12 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/2009/11/so-you-asked-for-a-cms/</guid>
		<description><![CDATA[In my position, I get to respond to a bunch of RFP’s. If there’s a marketing/brochure web site involved, you can make a reasonable bet that the RFP includes a content management system (CMS). These solutions are super easy to build and deploy, but organizations are often unaware of the entire bargain.
The promise of a [...]]]></description>
			<content:encoded><![CDATA[<p>In my position, I get to respond to a bunch of RFP’s. If there’s a marketing/brochure web site involved, you can make a reasonable bet that the RFP includes a content management system (CMS). These solutions are super easy to build and deploy, but organizations are often unaware of the entire bargain.</p>
<p>The promise of a CMS is as follows:</p>
<ul>
<li>You can update content on your own and respond to change whenever you like</li>
<li>You don’t need to understand web development or HTML</li>
<li>You can deploy changes at any time</li>
</ul>
<p>Organizations are often tied up in the subtle nuances of selecting the right CMS solution and wrangling all the content that needs to end up on the web site. In my experience, there are a series of lurking issues that apply to any CMS solution. You would do well to get a handle on them up front.</p>
<p><strong>Any CMS Uses Templates</strong></p>
<p>The truth of the matter is that any CMS uses templates. That’s where they derive value. Just create 3 to 5 great templates, spread them out over your site and you’re golden; or so it would seem. Templates are great as long as you make use of them today, tomorrow and the next day. A template defines the layout of the page and how it looks. </p>
<p>If you want to move the large photo over a smidge and embed another transparent image on the page, you’re out of luck, unless the template accounted for it. One aspect that’s often overlooked is that templates are done before you launch. The developer has gone home and already cashed their check. Game over. Changes cost money. Perhaps organizations take those changes in house or return for a refresh, either way, its time and money.</p>
<p>If you can force yourself to live with the decisions of today for the next six to twelve months, then you’re doing better than most. It can be tough to explain to your boss why editing content “over here” is easy, but moving content “over there” costs money and requires a developer.</p>
<p><strong>Good HTML/CSS is Hard</strong></p>
<p>In my years here at Pop Art, I’ve worked with some seriously good HTML/CSS developers. Experts you might say. They’ve honed their craft and work continuously to stay sharp. It’s not easy; especially with the wicked cool designs emanating from our creative folks.</p>
<p>These experts use complicated text editors with lots of features to help them work, but it really all comes down to understanding how those angle brackets work in a variety of browsers. That takes time to learn and attention to detail. You’re not going to be able to hold a candle to what they can do with the flimsy HTML editor provided in most CMS solutions, so you need to have the proper expectations.</p>
<p>One point I like to make is that the system we provide is a “content” management system. You’re managing content. You’re not managing other aspects such as layout, style and design. Content means you can change “the quick brown fox” into “the lazy dog”. If you start your expectations from that point, you’ll be headed in the right direction.</p>
<p><strong>You Have to Buy Into the CMS Framework</strong></p>
<p>No matter what CMS you pick (Ektron, TeamSite, Drupal, DotNetNuke, Umbraco, etc), you have to buy into that framework. The story of the CMS you picked has to resonate with you because every change from the vanilla installation costs you money and generally causes maintenance concerns over time.</p>
<p>For example, you’ll have to buy into the way your given CMS does the following tasks:</p>
<ul>
<li>Author HTML content with an editor</li>
<li>Create a new page</li>
<li>Update an existing page</li>
<li>Retire/Delete a page</li>
<li>Restore a prior version of a page</li>
<li>Deploy a change to the public</li>
<li>Authenticate and authorize a new editor/reviewer</li>
<li>Reviewing and approving changes</li>
<li>Manage large amounts of images, audio and video content</li>
<li>Integrate with 3rd party solutions (Twitter, Facebook, your own systems, etc)</li>
<li>Customizations, additions and enhancements</li>
<li>Security updates</li>
<li>Backup and recovery</li>
</ul>
<p>Every CMS does these tasks a little different. You’ll have to find one that resonates with you and matches the way you want to operate for the next couple of years. Swapping out your CMS in less than a 24 month period should give you pause require a pretty good business case.</p>
<p>For that matter, how long to plan on using this CMS? In my experience, you should plan on replacing it (or installing the next version) every three to five years on the long side. New features come out all the time. The developers of your CMS might release features weekly, quarterly, or annually. You should plan for ways to take advantage of these new features in a reasonable and effective manner that suits your organization.</p>
<p><strong>You Need Training</strong></p>
<p>The reason you’re interested in a CMS is because you want to make changes on your own and your people don’t know how to edit HTML directly. In many cases, if they did know HTML, you would be better off installing Visual Studio and showing them how to use your favorite source control repository. But they don’t know HTML, and its not practical to spend all that time learning it, so that’s why we’re here in the first place.</p>
<p>Since you’re people don’t know HTML, its probably fair to say they also don’t understand web development in general. That’s fair, they’re probably focused on delivering your products and services to your customers. You can’t be all things to all people.</p>
<p>So, the salient point here is that you’re people are going to need training. They’re also going to need mentoring and standards enforcement. It’s just too easy to deploy a page using Comic Sans font after a couple of months. Furthermore, when you encounter turn over, you’re going to need more training. You should account for these costs in time, money and productivity.</p>
<p><strong>Patches Should be Installed</strong></p>
<p>Every system worth installing and running for a couple of years will have patches. The developers of the CMS will discover flaws, fix them, and make a patch available to you. You’re expected to install the given patch before (1) the bad guys discover you run the given CMS and (2) your system is vulnerable because you haven’t installed the patch yet.</p>
<p>This isn’t a tough thing to do, but it does consume time and requires a consistent process. You should have a plan for installing these patches as they become available. Don’t be ignorant and think the system you launched two years ago is as secure as it was two years ago.</p>
<p><strong>Whoops!</strong></p>
<p>You’re likely to deploy something to your public site that you need to fix ASAP. Its the nature of a CMS. It’s so easy to deploy changes, even when you have a serious reviewer/editor policy in place. Something will happen where you say “Whoops! We need to fix that ASAP.” </p>
<p>You should have a plan in place that states how to handle changes that need to happen immediately; even if it’s just a service level agreement (SLA) with yourself. How are you going to restore the previous version of the page? Is that even possible? How often can you publish changes? How long does it take for them to appear. These are all questions that you should know the answer to before you need to execute them.</p>
<p><strong>Summary</strong></p>
<p>So, to be clear, content management systems are good, but make sure you’re aligned with what they can do. Don’t get too caught up in those common challenges of gathering copy and providing feedback on the graphic compositions without spending sufficient time understanding the total cost of ownership and the capabilities of your CMS.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/11/so-you-asked-for-a-cms/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Thanks&#160;USAA!</title>
		<link>http://blogs.popart.com/2009/11/thanks-usaa/</link>
		<comments>http://blogs.popart.com/2009/11/thanks-usaa/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 16:24:49 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Web Development]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/2009/11/thanks-usaa/</guid>
		<description><![CDATA[My bank, USAA, is better than your bank. No, they don’t have any branches, except for that one in Texas, but they do have: 

Awesome online banking
Free ATM withdraws (no matter which one you decide to use that day)
An iPhone app
Check deposit at home (on your scanner or iPhone)
Customer service that can’t be beat.

This is [...]]]></description>
			<content:encoded><![CDATA[<p>My bank, <a href="https://www.usaa.com">USAA</a>, is better than your bank. No, they don’t have any branches, except for that one in Texas, but they do have: </p>
<ul>
<li>Awesome online banking</li>
<li>Free ATM withdraws (no matter which one you decide to use that day)</li>
<li>An iPhone app</li>
<li>Check deposit at home (on your scanner or iPhone)</li>
<li>Customer service that can’t be beat.</li>
</ul>
<p>This is how to do business on the web.</p>
<p>Case in point: I use online bill pay. I paid someone in September and I just got a nasty-gram about not paying my bill. I was able to sign into USAA, see the bill I paid, find and click a button for “payment inquiry”, select one radio button, one drop down list item and click submit. This is something I do once a year on average and it was super easy to figure out.</p>
<p>From that simple action, I set some grand wheels in motion. USAA is going to contact me in 24 hours and they’ll probably contact my nasty-gram author on my behalf (This has happened before). Make no mistake, that’s how to do business on the web.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/11/thanks-usaa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Trust, but&#160;Verify</title>
		<link>http://blogs.popart.com/2009/09/trust-but-verify/</link>
		<comments>http://blogs.popart.com/2009/09/trust-but-verify/#comments</comments>
		<pubDate>Wed, 16 Sep 2009 04:50:49 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[pop art]]></category>
		<category><![CDATA[quotes]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=769</guid>
		<description><![CDATA[Greg Hughes, one of the rock stars I had the pleasure of working with on a gig has a nice phrase that he likes to whip out from time to time: trust, but verify.
Greg didn&#8217;t coin the term. Wikipedia says Ronald Regan used it and others before him. The term indicates you should trust what [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.greghughes.net">Greg Hughes</a>, one of the rock stars I had the pleasure of working with on a gig has a nice phrase that he likes to whip out from time to time: trust, but verify.</p>
<p>Greg didn&#8217;t coin the term. <a href="http://en.wikipedia.org/wiki/Trust,_but_Verify">Wikipedia says Ronald Regan used it</a> and others before him. The term indicates you should trust what people are doing or saying, but verify it nonetheless. I had one such opportunity recently and I&#8217;m sorry to say that I failed miserably.</p>
<p>The check-engine light went on in my car last Friday. I took it to a repair shop early Saturday morning and left it there. They called back in a couple of hours with an estimate to fix this, that, and the other thing. I winced, but said sure, go ahead. This is over the phone, mind you.</p>
<p>They called back a few hours after that and said there&#8217;s one more thing. I asked for the total, winced again, and said sure, go ahead. Again, on the phone. This time, the part was offsite and the delivery truck couldn&#8217;t arrive until Monday. No worries, we had the spare car thing worked out.</p>
<p>I get a call on Monday. The truck arrived, but not the part; weird. Apologies were offered by the repair shop, but I say, no problem, I’ll get the car on Tuesday.</p>
<p>Tuesday arrives and I get a call in the late afternoon. The car is ready, please come and get it. I was in a meeting, so I learned this by listening to the voice-mail the kind man left on my phone. I leave work, pick up the H-man from daycare, drive home to get the wife and drive over to the dealership.</p>
<p>We&#8217;re less than a mile from the repair shop when I notice I have another voice-mail from them. In this one, the kind man explains that they close at 6pm, but I have until 8pm to pick up the car before the gates close. He explained that I can call him back and pay over the phone if I plan on picking up the car between 6pm and 8pm tonight. He also says the amount on the call. It&#8217;s two times the amount he quoted me on Saturday. I&#8217;m instantly furious.</p>
<p>I park and walk into the repair shop, the service desk directs me to the cashier. The cashier grabs my file and asks for the 2X amount. I respond politely with &#8220;I can&#8217;t pay that amount&#8221;. She furrows her brow, understandably at 15 minutes to closing time, and returns with the service desk representative.</p>
<p>I ask for the amount he quoted me over the phone and he points to the 2X amount. Again, with all the politeness I can muster, as if I&#8217;m speaking to my grandma, I ask if he quoted me the 1X amount. He scratches his head and explains, it&#8217;s all right there. His document identifies who called, when they called, who they talked to, and the amount of the estimate.</p>
<p>I&#8217;m baffled and I begin to doubt myself. But I&#8217;m also resilient and tell myself that if the man estimated 2X for the repairs, I surely would have declined and pursued other options. It&#8217;s an old car and we&#8217;re thinking of trading it soon. I was very sure, even now, that I asked him for the full amount. I was also sure that he never said anything resembling 2X in response to my question about the full amount. Under no circumstances could 1X be mistaken for 2X, even on a bad phone connection.</p>
<p>He explains that he&#8217;ll have to get the manager, so he&#8217;s off and I stand around for a few minutes perusing the repair sheets he left on the desk. It&#8217;s all right there on the documents, how could two parties be so far apart on an essential matter?</p>
<p>A large burly man in a nice looking suit emerges from the back offices, introduces himself and asks me about my problem. I explain the situation and he takes it all in. Then he turns to the service representative and repeats what I said. Then he turns to me and repeats what the service manager said. Then, he repeated what the service manager said two more times, then he repeated what I said one more time followed by repeating what the service manager said and ending with a finale of &#8220;in all of my 20 years here&#8230;&#8221;, you get the idea.</p>
<p>Those of you who have met me will know that I have a pretty good face for these types of things. I&#8217;m not too pretty, it&#8217;s hard to tell what I&#8217;m thinking if I don’t let you and the whiskers don&#8217;t hurt either. Plus, for whatever reason, I decided to wear a nice button-down blue shirt and dockers today. I looked professional and not like some punkass kid trying to skip out on part of the bill. Plus, I sincerely felt that I was right.</p>
<p>In any case, 2X is a lot of money to screw up.</p>
<p>The manager explains that the documents with the who-what-when-and-how-much are legal documents in the state of Oregon. I don&#8217;t bite. I&#8217;m not in any mood to debate the matter. My position is clear and so is his. No quick, witty comment or sly argument from me is going to win him over. My only rebuttal is that estimates over the phone are inherently prone to these types of mistakes. He picks up on this nibble of an argument and thoroughly explains that in all his years, they&#8217;ve never had a problem like this. Again, I refuse to argue the point. It&#8217;s futile to do so.  </p>
<p>So, he explains that he has to go to the general manager of the repair shop. Again, I’m left alone near the cashier&#8217;s desk. This time for about 15 minutes, the standard time one would sit in an office of a car dealership, waiting to see if the manager would accept your offer on the car. The old wear-you-down trick.</p>
<p>In the mean time, I think about what to do. I really do like jury duty. It&#8217;s a lot of fun. I wonder of small claims court would be as much fun. There&#8217;s the anxiety of getting over the problem, the possibility of losing my first case (I was a business law major until I took my first computer science course in college) and just the general hassle. Plus, I&#8217;m beginning to doubt myself. Did that guy really tell me the full amount on the phone and I just wasn&#8217;t paying attention? I decided that they would offer to split the difference and I&#8217;d accept it.</p>
<p>Damn!</p>
<p>So, the manager returns, right on time. He repeats what I told him; then he repeats what the service representative said one more time. Finally, the manager then says the general manager offered to split the cost with me. I asked if he was offering me 1.5X and I’m corrected. The general manager is offering it and the manager is merely saying it to me. </p>
<p>Whatever. </p>
<p>I put up the stop hand and said, I think this is the best solution for both of us. The manager knows to stop selling when the sale is over, so he turns to the cashier and firmly states that this customer is going to only pay 1.5X of the amount on the bill.</p>
<p>I&#8217;m relieved that the issue resolved, yet still disappointed that it happened at all. I&#8217;m out 0.5X, but I do have a few extra repairs on the car. Upon further review, I think some of the repairs are a little suspect. For example, my car is perfect on oil. It doesn&#8217;t burn oil and my drive way is void of any oil spots. Why didn&#8217;t I think of that when the guy said the oil pan gasket was leaking on the phone? Arrrgg!!</p>
<p>This is when Greg&#8217;s term &#8220;trust, but verify&#8221; really became clear to me. My super smart wife pointed out that I could have asked him to e-mail me the estimate. I also could have asked him to call me back and leave the full estimate as a voice-mail on my phone if they were email-impaired. The amount of money is large enough and use of my car is important enough that I really should have been more diligent. I should have verified the estimate instead of just trusting what I heard on the phone.</p>
<p>Rats. Well, they say the awesome people can tell you all about their mistakes and the incompetent never see their own mistakes. Here&#8217;s one more thing on the pile that I can learn from. I&#8217;m going to be riding the &#8220;trust, but verify&#8221; horse into the ground for the next couple of weeks. Apologies, in advance, to all my teammates.</p>
<p>I don&#8217;t explain the identity of the repair shop or the amount here because you&#8217;re going to trust, but verify next time right? So, in that case, it doesn&#8217;t matter who I dealt with.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/09/trust-but-verify/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to Do Something You&#8217;ve Never Done&#160;Before</title>
		<link>http://blogs.popart.com/2009/08/how-to-do-something-youve-never-done-before/</link>
		<comments>http://blogs.popart.com/2009/08/how-to-do-something-youve-never-done-before/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 15:36:54 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Business]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[advice]]></category>
		<category><![CDATA[challenges]]></category>
		<category><![CDATA[coding]]></category>
		<category><![CDATA[communication]]></category>
		<category><![CDATA[howto]]></category>
		<category><![CDATA[research]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=662</guid>
		<description><![CDATA[As a technologist, I’m often asked to do something that I’ve never done before and have no specific competency in performing; tasks which I’m completely unqualified to execute.
The more palatable way of saying the same thing is:
As a consultant, technical lead, solutions engineer or a business analyst, I’m given challenges that require me to identify [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_664" class="wp-caption alignleft" style="width: 250px"><a href="http://blogs.popart.com/wp-content/uploads/2009/08/waterhose.jpg"><img class="size-full wp-image-664  " src="http://blogs.popart.com/wp-content/uploads/2009/08/waterhose.jpg" alt="This Is New" width="240" height="161" /></a><p class="wp-caption-text">Now This Is New</p></div>
<p>As a technologist, I’m often asked to do something that I’ve never done before and have no specific competency in performing; tasks which I’m completely unqualified to execute.</p>
<p>The more palatable way of saying the same thing is:</p>
<p>As a consultant, technical lead, solutions engineer or a business analyst, I’m given challenges that require me to identify the “how” part of the solution in addition to the “what”. My job requires me to learn new things today so I can leverage that knowledge when I learn something new tomorrow.</p>
<p>It seems odd to lay it out there like that, but that’s what I deal with on a regular basis and I absolutely love this part of my job. I use the skills and experience I’ve gained over time to tackle new challenges. There is no manual that describes how to assemble a new business process or software application for my clients. I take a guess at what has a good chance of working, test it, and then make a decision to trash it and start over, optimize it, or brush off my hands and ask for what’s next. I love innovation.</p>
<p>Sometimes the new challenges are just clones of old problems cloaked in a new buzz word (social media anyone?). I couldn’t work in a job that does the same repetitive task every day. I’d get yelled at too much for trying to optimize it. That’s just how I work; I can still respect those that love repetition. That’s just how they’re wired; but it ain’t me.</p>
<p>Here are a couple of tips for how to execute a task that you’ve never done before:</p>
<p><strong>Communicate</strong></p>
<p>You have to be transparent. Look for ways to express the work item you’re solving now and what the queue looks like for the hours or days ahead. The worst possible action you can take is to “go dark” for a period of time and head down the rabbit hole without telling anyone. Chances are that one or more people know various bits and pieces about the proper way to perform your task. You have to elicit that information wherever it exists. Sometimes I might even ask your mom.</p>
<p><strong>Search</strong></p>
<p>Google, Bing, Yahoo, email, shared folders on the network, books, magazines, subject matter experts, Word documents, opinion polls and the backs of Cracker Jack&amp;trade; boxes. You have to do some leg work. The reason we’re asking you to do it is because we don’t want to. Learn how to use advanced search engines queries to search for web pages after a certain date, from a specific URL, contain a specific phrase or don’t contain a certain keyword. Don’t show up empty handed without a really good sob story of how you worked super hard and didn’t find anything even close to what you were looking for.</p>
<p><strong>Show Your Work</strong></p>
<p>Its one thing to rattle off what you did and let your communication chops shine, but you need to turn in your homework too or we might call your bluff. In addition to the correct answer, write down the dead ends you went down or where the trail went cold. This lets us know you’re thorough and you’re thinking at the appropriate depth. I know I gave you a task that you’ve never done before, so I need to see some warts along with the elegant answer or I’ll feel like I might get blind-sided later by something you didn’t consider. I need to see some opposing views that give flavor and context to the situation. Most importantly, you’re going to forget some details in 3 to 6 months, so just write it down now while its fresh.</p>
<p><strong>Learn my Language</strong></p>
<p>So you’re given a challenge and you solve it. Now it’s time for the final report. You have to tailor your story to my language. You lose points if you make me feel lost or beneath your greatness. You earn bonus points if the story keeps my interest and I can explain key points to my constituents later when you’re not around. This story you tell depends greatly on who I am. You might have to explain it to my constituents too, and they might not speak the same language as me.</p>
<p><strong>Listen</strong></p>
<p>Make a conscious effort to listen instead of waiting for the other person to pause so you can start talking again. Read that previous sentence again a few times.</p>
<p><strong>Know the Down and Yards to Go</strong></p>
<p>That’s American football parlance for knowing the objective. Your end game has to be aligned with the stakeholders, even the mystery stakeholder that pops up unexpectedly at the end of the project. Don’t be surprised, you know it’s going to happen. Done means done. Do you know what done is? You better have a document to prove it because I’ll choose my opinion over your opinion any day of the week.</p>
<p><strong>Have Fun</strong></p>
<p>If you’re not enjoying the work, then get out or change your attitude. You have to find something interesting in the challenge to keep you motivated and smiling through the day. Otherwise, I’ll pick up on your loathing and I’ll start to reflect your demeanor. This isn’t about faking a smile; you sincerely have to be the type of person who can motivate yourself and others. You have the ability to be the bright spot of my day. Do your best Tony Robbins performance and set the positive tone with your sheer will power.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/08/how-to-do-something-youve-never-done-before/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Where are all the Mac&#160;Developers?</title>
		<link>http://blogs.popart.com/2009/07/where-are-all-the-mac-developers/</link>
		<comments>http://blogs.popart.com/2009/07/where-are-all-the-mac-developers/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 04:28:44 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[developers]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[macintosh]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=551</guid>
		<description><![CDATA[I heard an interesting quote on a recent podcast of RunAsRadio.com, where the guest talking with Richard and Greg said:
We&#8217;re the second largest Mac development shop in the world behind Apple.  We have more Mac developers than anybody except Apple.
Who is &#8220;we&#8221;? Well, Microsoft of course!
This seemed counter-intuitive at first, but after you consider everything [...]]]></description>
			<content:encoded><![CDATA[<p>I heard an interesting quote on <a href="http://www.runasradio.com/default.aspx?showNum=111">a recent podcast of RunAsRadio.com</a>, where the guest talking with Richard and Greg said:</p>
<blockquote><p>We&#8217;re the second largest Mac development shop in the world behind Apple.  We have more Mac developers than anybody except Apple.</p></blockquote>
<p>Who is &#8220;we&#8221;? Well, Microsoft of course!</p>
<p>This seemed counter-intuitive at first, but after you consider everything Microsoft does and who else might possibly be capable of holding second place in the measurement, it all fits together. Now I can feel just a little more smug developing Microsoft .Net applications on my MacBook Pro.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/07/where-are-all-the-mac-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JavaScript Injection&#160;Attacks</title>
		<link>http://blogs.popart.com/2009/07/javascript-injection-attacks/</link>
		<comments>http://blogs.popart.com/2009/07/javascript-injection-attacks/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 05:57:15 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=537</guid>
		<description><![CDATA[A little over a week ago, I described Cross-Site Request Forgery attacks and how they can damage your site with just a simple website request using any modern browser available today. This time, I&#8217;ll describe another type of JavaScript attack that can cause equal harm to your site.
Lots of sites, including blogs, accept user input. [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_543" class="wp-caption alignright" style="width: 190px"><a href="http://blogs.popart.com/wp-content/uploads/2009/07/pinch.jpg"><img class="size-full wp-image-543" src="http://blogs.popart.com/wp-content/uploads/2009/07/pinch.jpg" alt="Don't Get Pinched by JavaScript Injection Attacks" width="180" height="120" /></a><p class="wp-caption-text">Don&#39;t Get Pinched by JavaScript Injection Attacks</p></div>
<p>A little over a week ago, I described <a href="http://blogs.popart.com/2009/06/cross-site-request-forgery/">Cross-Site Request Forgery attacks</a> and how they can damage your site with just a simple website request using any modern browser available today. This time, I&#8217;ll describe another type of JavaScript attack that can cause equal harm to your site.</p>
<p>Lots of sites, including blogs, accept user input. Visitor are invited to enter values into fields and click a button to submit the web form. This might be a simple as leaving a comment on a blog or purchasing a t-shirt with a stolen design.</p>
<p>The fundamental rule in website development is to <strong>NEVER TRUST USER INPUT</strong>. To say that another way, you should always assume the data on a web form is intended to harm your site. The bad guys have some clever ways of doing this with a plain ordinary browser; they don&#8217;t need elaborate tools to try this type of attack. Furthermore, you only need to fail in one spot on your website and you&#8217;re done. The shared computer at the local coffee shop will do just fine for their attack vehicle.</p>
<p>Let&#8217;s take a look at a simple blog comment. Imagine that your blog contains a form that takes a name and a comment.  You&#8217;re expecting visitors to enter a value in both fields and click a button.  You might even implement some validation to make sure that both fields have a value before the form can be posted.</p>
<p>Now let us put the fundamental rule described above into play: <em>You should never trust user input</em>.  While the form will warn the user when the field is missing, visitors can still enter gibberish and there&#8217;s little you can do to stop them. It&#8217;s a web form, they&#8217;re on the website you gave them, and that&#8217;s why you moderate comments on a blog.  While it&#8217;s healthy to see comments from people who agree and disagree with you, you still try to keep the signal-to-noise ratio at a reasonable level.</p>
<p>JavaScript injection attacks are one of the primary reasons should never trust user input.  Let&#8217;s suppose the blog saves the web form fields to a database. When subsequent visitors request the blog page, all of the comments are shown in chronological order under the blog post. Pretty typical so far, right?</p>
<p>Herein lies the rub: suppose instead of a comment, our nefarious visitor entered the following JavaScript:</p>
<p><code>&lt;script&gt;alert('hello world');&lt;/script&gt;</code></p>
<p>Everyone who visits the blog page containing the previous JavaScript is going to see a message box that say&#8217;s &#8220;Hello World&#8221;. This is an example of one of the most dangerous attacks on the web today.  The attack is easy to try and you only need to miss one place on your entire web site to be vulnerable.</p>
<p><a href="http://blogs.popart.com/wp-content/uploads/2009/07/helloworld.jpg"><img class="alignnone size-full wp-image-547" src="http://blogs.popart.com/wp-content/uploads/2009/07/helloworld.jpg" alt="helloworld" width="407" height="175" /></a></p>
<p>If a visitor is able to get your web page to execute the their JavaScript, they can do some really bad stuff.  For example, they could write a JavaScript that let&#8217;s them impersonate you and perform every task you can do on the website. All you need to do is visit the page (on your own website) that contains their JavaScript. You&#8217;re likely to read the comments on your blog, so that part is fairly easy, right?</p>
<p>Here&#8217;s how they do it: After you sign in, lots of web sites will issue a temporary token to you in the form of a cookie.  Your browser sends this cookie along with each page request in order to validate who you are. If you close your browser, you might have to sign in again and get a new cookie. Alternatively, the website might have issued a more durable cookie. In this case, the website might have instructed the browser to store the cookie for several days. This is how Google keeps you signed in for several days.</p>
<p>Since JavaScript has access to cookies, the JavaScript written by the bad guys can be written in such a way that it <strong>sends your cookie to their website</strong>. They&#8217;ll be waiting for cookies to come in and looking for a juicy one that has a lot of authorization. Once they have it, there&#8217;s nothing much you can do, short of turning off the web server. They own your site. Furthermore, there&#8217;s no email notification of this event. You won&#8217;t know about it.</p>
<p>Scary stuff huh?</p>
<p>You need to protect your site from these types of attacks. The best practice is to process every byte from a visitor. You should never show raw content provided by an untrusted user. In this case, <em>untrusted users</em> are everyone but you. Since your at it, why not protect the site from yourself too, just to be sure.</p>
<p>One way of implementing this best practice is to <strong>encode fields before they are displayed</strong> on the web page. Encoding text will convert turn a &#8220;&lt;&#8221; character into to safer eqivalent of &#8220;&amp;lt;&#8221;. The JavaScript example above will appear like this:</p>
<p><code>&amp;lt;script&amp;gt;alert('hello world');&amp;lt;/script&amp;gt;</code></p>
<p>This encoded JavaScript will not execute in the browser. If you&#8217;re aware of the potential danger here, you&#8217;ll delete the comment immediately and review your website for holes. Again, you only have to forget to plug one hole and they&#8217;ve got you.</p>
<p>JavaScript injection attacks are a nasty threat to any website that accepts input from visitors. The bad guys already know this, so training the good guys is how we&#8217;re going to plug these holes. No doubt they&#8217;ll come up with more clever ways of bring down you&#8217;re site, so keep you&#8217;re skills up to date and spread the knowledge.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/07/javascript-injection-attacks/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Why Projects&#160;Fail</title>
		<link>http://blogs.popart.com/2009/07/why-projects-fail/</link>
		<comments>http://blogs.popart.com/2009/07/why-projects-fail/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 22:12:12 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[best practices]]></category>
		<category><![CDATA[Project Management]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=521</guid>
		<description><![CDATA[I listened to a recent podcast (several times in fact) featuring Patrick Hynds on DotNetRocks.com. I thought I would share some real gems I found in there. The following info was culled from that interview.
Let’s start with some agonizing realities:

About 50% of software development projects fail
About 60% of off shore projects fail, but they’re cheap, so people [...]]]></description>
			<content:encoded><![CDATA[<p>I listened to a recent podcast (several times in fact) featuring <a href="http://www.patrickhynds.com">Patrick Hynds</a> on <a href="http://www.dotnetrocks.com/default.aspx?showNum=438">DotNetRocks.com</a>. I thought I would share some real gems I found in there. The following info was culled from that interview.</p>
<p>Let’s start with some agonizing realities:</p>
<ul>
<li>About 50% of software development projects fail</li>
<li>About 60% of off shore projects fail, but they’re cheap, so people keep trying</li>
<li>Agile methodologies improve success, yet about 30% of those projects fail</li>
</ul>
<p>Patrick lays out some fundamental principles that resonated with me. These principles tend to leave deep scars when you deviate from them. I encourage you to listen to the podcast the next time you’re on a drive, riding the bus, or washing the dishes after a meal. Just to whet your appetite, here are some of the high points.</p>
<p><strong>Status</strong><br />
No status, no check. The team needs to communicate status to the project manager. If you don’t report on your status, Patrick assumes you were not working and fires you for job abandonment. What doesn’t get checked doesn’t get done. Most people do a status check, but not until late in the project when things are hard to fix. Do them early and often.</p>
<p><strong>Never Assume</strong><br />
When you assume, you make an ass out of you and me. When you make a statement and have no proof, then I’ll pick my opinion over yours any day of the week. You must have evidence to back up your statement.</p>
<p><strong>Don’t Be Wishful</strong><br />
A project is not done until after the coding is done, followed by *lots* of other things. When Patrick asks if something is done, the answer is either “yes” or “no, and this is why”. There are no “yes, buts”. Everyone needs the same definition of “done”. If you haven’t confirmed it with the customer, then it’s not true.</p>
<p><strong>No Spec, No Estimate</strong><br />
Patrick will happily work for you from now until the end of time to rewrite, redesign, or recode anything you ask of him on a T&amp;M basis. A lot of people want a fixed bid price when they give a T&amp;M spec.</p>
<p>Here’s a great analogy for when a client might bring you onsite, walk you through their existing application, explain what they didn’t like about it, and then expect a fixed price bid proposal for the new system:</p>
<blockquote><p>Suppose I asked you to build my next house. I show you my current house, and explain what I hate about the doors, the stairs and windows. Can you give me a fixed bid on my new house? Of course not. You only know what annoys me. I haven’t told you what type of materials I do like or what type of building would make me happy. Software applications are a close analog to this.</p></blockquote>
<p>And here’s what I found most inspirational in Patrick’s statements:</p>
<p>“If we can reign in that failure rate, so that we fail just 5% of the time, think about the productivity boost to the country and the world.”</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/07/why-projects-fail/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cross-Site Request&#160;Forgery</title>
		<link>http://blogs.popart.com/2009/06/cross-site-request-forgery/</link>
		<comments>http://blogs.popart.com/2009/06/cross-site-request-forgery/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 15:24:51 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[ASP.Net MVC]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[security]]></category>

		<guid isPermaLink="false">http://blogs.popart.com/?p=482</guid>
		<description><![CDATA[In this post I’d like to explain one of the most common ways the bad guys can steal your information on the Internet today. I’ll use the literary technique of schizophrenial-paragraphs to help explain the hacker’s technique.]]></description>
			<content:encoded><![CDATA[<p>In this post, I’ll explain a common way the bad guys steal your information. I’ll use the literary technique of schizophrenial-paragraphs to help explain the hacker’s technique.</p>
<p>The techie guys gave it an acronym: CSRF, because that’s one of the things that give them pleasure. All spelled out, CSRF looks like this:</p>
<p><strong>Cross-Site Request Forgery</strong></p>
<p><em>Myself:</em> Sounds like a big technical mumbo-jumbo thing. Do I really care?</p>
<p><em>Me:</em> Well, would you normally change the email address of your account to that of a hacker that lives three states over and you’ve never met? Probably not.</p>
<p><em>Myself:</em> Ok, I’ll take the first bite, but don’t lose me, got it?</p>
<p><em>Me:</em> Sure, no problem. Bad guys can try to get your information or trick you into doing something you wouldn’t ordinarily do through a CSRF attack. I’ll lay it out so you can see how it works. It’s not that complicated.</p>
<p><em>Me:</em> Let’s say you open your favorite browser and surf away like you normally do. You find a site that you’ve never been to before, but it looks interesting enough so you sign up for a newsletter. You enter your email address and click the submit button. Wham! You’re done.</p>
<p><em>Myself:</em> Damn! Done, eh?</p>
<p><em>Me:</em> Yep. Those little buggers are quick.</p>
<p><em>Myself:</em> So, what happened?</p>
<p><em>Me:</em> Ok, let’s replay that attack. You browsed a site you didn’t know, or have reason to trust, for that matter. When you submitted that web form, you didn’t know it was actually posting information to your favorite social media website. This is to say, directly from your browser to the social media site. It wasn’t really adding your email address to their newsletter list as you assumed.</p>
<p><em>Myself:</em> Well, that’s weird, but so what?</p>
<p><em>Me:</em> I&#8217;ll say this again a different way: instead of posting info from your browser to Site A, it was actually posting info from your browser to Site B, where A is the hacker&#8217;s site and B is your trusted social media site.</p>
<p><em>Myself:</em> Web pages can do that?</p>
<p><em>Me:</em> Yep, it’s just an HTML &lt;form&gt; tag, you can point them wherever you want.</p>
<p><em>Myself:</em> Ok, so if this is true, then why isn’t the sky falling right now?</p>
<p><em>Me:</em> Well, there are ways to help prevent this attack, plus it’s somewhat new in terms of main stream threats, and most importantly, not every hacker in the world is out to get you at this very minute.</p>
<p><em>Myself:</em> So what did it post to my favorite social media website and why do I care?</p>
<p><em>Me:</em> Well, it posted your email address.</p>
<p><em>Myself:</em> Great! I got news for you. My email address is already on my social media website. I don’t think I’ve lost much.</p>
<p><em>Me:</em> Well, it posted some other stuff too. Actually your current email address isn’t what you think it is.</p>
<p><em>Myself:</em> Uhmmm, go on.</p>
<p><em>Me:</em> The hacker took a chance that you might actually be logged into your social media website at the time you submitted the form on his site.</p>
<p><em>Myself:</em> Is this like the phishing thing I’ve been hearing about?</p>
<p><em>Me:</em> Kind of, but let’s not muddy the waters by introducing new terms.</p>
<p><em>Myself:</em> Fair enough, keep going, forget I said anything.</p>
<p><em>Me:</em> Ok, so you were logged on to your favorite social media website when you submitted this form on the other site. This means that the social media site makes several features available to you like updating your status, posting a photo or interacting with a friend. You can only do that stuff when you&#8217;re signed in, right?</p>
<p><em>Myself:</em> Yep. Got it.</p>
<p><em>Me:</em> The hacker’s site posted your email address to the CHANGE EMAIL ADDRESS FORM on the social media site. In addition to your email address, he posted his email address as the new email address. When your browser posted that form, you sent the cookies and everything else along for the ride to the social media site. It looked like a totally legit request from the point of view of the social media website. All the form fields lined up and there was no reason to suspect it.</p>
<p><em>Myself:</em> Well that little piece of..</p>
<p><em>Me:</em> Hold on, G rated audience here.</p>
<p><em>Myself:</em> Sorry.</p>
<p><em>Me:</em> No worries, you’re right to be upset. You see, the social media website should have been anticipating this type of attack.</p>
<p><em>Myself:</em> Huh, go on.</p>
<p><em>Me:</em> Well, because this type of attack works in any browser, it’s very likely that it will happen.</p>
<p><em>Myself:</em> So, how can CSRF attacks be prevented?</p>
<p><em>Me:</em> Well, one way is with the anti-forgery tokens inside Microsoft ASP.Net MVC.</p>
<p><em>Myself:</em> One sec, you said you wouldn’t get technical.</p>
<p><em>Me:</em> I’m not; it’s just a brand name, Microsoft ASP.Net MVC. You like brands don’t you?</p>
<p><em>Myself:</em> Well, yeah. Sorry.</p>
<p><em>Me:</em> No problem. Ok, we were going over anti-forgery tokens. Let’s say your cookie contained a long number. Let’s call that number a GUID.</p>
<p><em>Myself:</em> Oh! Oh! Oh! A GUID is a globally unique identifier, right?</p>
<p><em>Me:</em> Yes, very good. So the cookie contains a GUID, or a long number, right?</p>
<p><em>Myself:</em> Yep. GooooooooooID. It’s fun to say.</p>
<p><em>Me:</em> Focus please.</p>
<p><em>Myself:</em> Sorry.</p>
<p><em>Me:</em> Ok, the programmer who built the web form for the social media website&#8217;s change email address form could have placed another long number, or GUID, in the web form as a hidden field. The person filling out the form doesn’t need to know about the field, so it’s hidden and sent back to the web server when the form is posted. Just to clarify, the web form consists of all the fields you can see, plus the values in the cookie and the token value inside the hidden field.</p>
<p><em>Me:</em> When the web server receives a post, it evaluates posted fields and looks for normal problems. Of course it makes sure required fields are populated and stuff like that. The web server also performs a mathematical computation on the two GUIDs that it received. One GUID came from the cookie and the other from the token.</p>
<p><em>Me:</em> It’s really hard for a hacker to have both numbers. The hacker can’t successfully guess the numbers either. They might as well guess your password. If the numbers don’t jive, then the web server stops processing the request, because it’s probably fraudulent. In the first case where the hacker won, they got you to give up your cookie. However, they wouldn’t be able to post a valid token because that second number changes all the time. Wait, you’re using a complex password right?</p>
<p><em>Myself:</em> Um, yeah sure.</p>
<p><em>Me:</em> Ok, we’ll talk about that one next time. For now, it’s just important that you’re aware of where you’re surfing on the net and to think about your actions. It takes everyone to help secure the Internet.</p>
<p><em>Myself:</em> So, maybe I do need a stronger password, but if I understand you right, you’re saying that developers can help protect the sites they build from this type of shenanigans by using the anti-forgery tokens inside Microsoft ASP.Net MVC right?</p>
<p><em>Me:</em> Yep. It’s really easy.</p>
<p><em>Myself:</em> Cool, thanks for explaining how a CSRF attack works and how to prevent them.</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/06/cross-site-request-forgery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>You Can Build Software&#160;Too</title>
		<link>http://blogs.popart.com/2009/02/you-can-build-software-too/</link>
		<comments>http://blogs.popart.com/2009/02/you-can-build-software-too/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 00:11:00 +0000</pubDate>
		<dc:creator>Andrew Hay</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">/andrew-hay/archive/2009/02/18/you-can-build-software-too.aspx</guid>
		<description><![CDATA[A common misconception in software development is that you need a programmer, developer or any other similar name that sounds technical. Sure, we read books on the subject, attend conferences, conduct lectures, and compile our fair share of bits, but the truth is that a good deal of building software doesn&#8217;t involve programming. Actually, most [...]]]></description>
			<content:encoded><![CDATA[<p>A common misconception in software development is that you need a programmer, developer or any other similar name that sounds technical. Sure, we read books on the subject, attend conferences, conduct lectures, and compile our fair share of bits, but the truth is that a good deal of building software doesn&#8217;t involve programming. Actually, most of it isn&#8217;t programming work.</p>
<p>Building software involves rational thoughts. This presumes the point that you have a compelling interest in building software. I suspect that if you&#8217;re reading this blog post, then you have some stake in the topic. With a few pointers in the right direction, you too can be a contributing member of the software development team.</p>
<p>Let&#8217;s start with a fresh project, contrived especially for us. Software automates tasks that you might otherwise do with pen and paper, right? So begin by asking, or more importantly, writing down some questions. Here&#8217;s 20 to start; all related to the pen.</p>
<ol>
<li>Who would hold the pen? </li>
<li>Where does the pen belong? </li>
<li>How many pens are there? </li>
<li>What color is the ink in the pen? </li>
<li>What do you do when the pen runs out of ink? </li>
<li>What if its too dark to see what you&#8217;re writing? </li>
<li>How can you tell if the pen fits your hand? </li>
<li>How long do you have to use the pen? </li>
<li>Who is protecting the pen from thieves who like to steal pens?</li>
<li>What happens if you lose the pen? </li>
<li>Are you using the right pen? </li>
<li>What kind of pens do others use? </li>
<li>Should your pen have a clip for your pocket?</li>
<li>Should you be wearing a pocket protector in case your pen drips ink?</li>
<li>Is a clicker pen better than a pen with a cap?</li>
<li>Why is a pen better than a pencil?</li>
<li>Can this pen write upside down?</li>
<li>How long should you expect this pen to last?</li>
<li>How much do I have to write to make a profit?</li>
<li>Should my pen make check marks from left to right, or from right to left?</li>
</ol>
<p>Building software is a lot like this type of interrogation, rationalization, recollection from prior experiences that went well or poorly and the overall willingness to ask questions. You might apply the questions about the pen to a web site, an order form, or a new iPhone application. Curiosity is a good, succinct requirement for building software. If your goal is to build good software and your curious about your subject matter, you can be a valuable member of the project team.</p>
<p>It&#8217;s not really about&nbsp;deciding between&nbsp;&#8221;for loops&#8221;&nbsp;or &#8220;do while loops&#8221; or even about calling complex database queries. Don&#8217;t get me wrong, we still do that and gosh, its one of the coolest things I do, but today&#8217;s technology makes that such a sweet and pain-free experience that the real job is understanding your problem domain. This has always been the problem domain. You reach an understanding of the problem domain by asking questions and writing down answers. You don&#8217;t need to be a developer to have an impact.</p>
<p>Lastly, the document that asks and seeks to answer these questions really ought to be written in the domain of the given business problem. It won&#8217;t have any technical implementation details, so by definition, anyone familiar with the business should be able to read this document. Again, this presumes you have an incentive or interest in reading documents. If you dislike documents, contracts, processes or business rules, then you&#8217;ll probably self-select out of the situation. If you&#8217;re wondering where to get started, imagine that your the prosecuting attorney on a case and the business problem is in the witness chair. What questions would you ask them?</p>
]]></content:encoded>
			<wfw:commentRss>http://blogs.popart.com/2009/02/you-can-build-software-too/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
