<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Making the Complex Simple &#187; Uncategorized</title>
	<atom:link href="http://simpleprogrammer.com/category/uncategorized/feed/" rel="self" type="application/rss+xml" />
	<link>http://simpleprogrammer.com</link>
	<description>Software Development from John Sonmez&#039;s Perspective</description>
	<lastBuildDate>Tue, 07 Feb 2012 17:47:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='simpleprogrammer.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Making the Complex Simple &#187; Uncategorized</title>
		<link>http://simpleprogrammer.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://simpleprogrammer.com/osd.xml" title="Making the Complex Simple" />
	<atom:link rel='hub' href='http://simpleprogrammer.com/?pushpress=hub'/>
		<item>
		<title>Inversion of Control Course Published on Pluralsight</title>
		<link>http://simpleprogrammer.com/2011/08/15/inversion-of-control-course-published-on-pluralsight/</link>
		<comments>http://simpleprogrammer.com/2011/08/15/inversion-of-control-course-published-on-pluralsight/#comments</comments>
		<pubDate>Tue, 16 Aug 2011 02:34:45 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2011/08/15/inversion-of-control-course-published-on-pluralsight/</guid>
		<description><![CDATA[Just published my 4th course for Pluralsight, Inversion of Control. I was pretty excited to get the opportunity to do this course, because there is a large amount of misunderstanding out there about: Inversion of Control Dependency Injection Dependency Inversion Principle Inversion of Control Containers I cover each of these topics in this course and [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1384&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Just published my 4th course for <strong>Pluralsight</strong>, <a href="http://www.pluralsight-training.net/microsoft/courses/tableofcontents?courseName=inversion-of-control">Inversion of Control</a>.</p>
<p><a href="http://www.pluralsight-training.net/microsoft/courses/tableofcontents?courseName=inversion-of-control"><img style="background-image:none;border-bottom:0;border-left:0;padding-left:0;padding-right:0;display:inline;border-top:0;border-right:0;padding-top:0;" title="image" border="0" alt="image" src="http://complextosimple.files.wordpress.com/2011/08/image.png?w=470&#038;h=355" width="470" height="355" /></a></p>
<p>I was pretty excited to get the opportunity to do this course, because there is a large amount of misunderstanding out there about:</p>
<ul>
<li>Inversion of Control</li>
<li>Dependency Injection</li>
<li>Dependency Inversion Principle</li>
<li>Inversion of Control Containers</li>
</ul>
<p>I cover each of these topics in this course and then we even build our own IoC container.</p>
<p>If you liked the <a href="http://simpleprogrammer.com/back-to-basics-series/">Back to Basics series</a>, you’ll like this course.&#160; I go and dive a pretty deep into the real meat of the patterns and principles behind IoC containers.&#160; Then I cover using <a href="http://msdn.microsoft.com/en-us/library/ff663144.aspx">Unity</a> and Castle <a href="http://www.castleproject.org/container/">Windsor</a>.</p>
<p>I think it is pretty important that we understand clearly why we are using a particular technology or pattern and what problem it is trying to solve.</p>
<p>I see too many people jumping on the bandwagon of so many popular technologies without really taking the time to learn the background about the technology to understand why it is an effective solution to a problem and what problems it attempts to address.</p>
<p>As always I welcome any feedback or suggestions for future courses.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1384/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1384/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1384/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1384/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1384/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1384/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1384/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1384/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1384&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2011/08/15/inversion-of-control-course-published-on-pluralsight/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/08/image.png" medium="image">
			<media:title type="html">image</media:title>
		</media:content>
	</item>
		<item>
		<title>iOS For .NET Developers Course Published</title>
		<link>http://simpleprogrammer.com/2011/07/11/ios-for-net-developers-course-published/</link>
		<comments>http://simpleprogrammer.com/2011/07/11/ios-for-net-developers-course-published/#comments</comments>
		<pubDate>Tue, 12 Jul 2011 04:22:34 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2011/07/11/ios-for-net-developers-course-published/</guid>
		<description><![CDATA[It has been quite a bit of work and a learning experience, but today my course on iOS development for .NET developers course was published on Pluralsight! This course was designed to help someone that is familiar with .NET get up to speed and start building an iOS application quickly. Having gone through the learning [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1363&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>It has been quite a bit of work and a learning experience, but today my course on <a href="http://www.pluralsight-training.net/microsoft/courses/TableOfContents?courseName=ios-intro">iOS development for .NET developers</a> course was published on Pluralsight!</p>
<p><img style="background-image:none;padding-left:0;padding-right:0;display:block;float:none;margin-left:auto;margin-right:auto;padding-top:0;border-width:0;" border="0" alt="Pluralsight" src="http://complextosimple.files.wordpress.com/2011/04/logomedium-e1302667267723.png?w=175&#038;h=42" width="175" height="42" /></p>
<p>This course was designed to help someone that is familiar with .NET get up to speed and start building an iOS application quickly.</p>
<p>Having gone through the learning process myself, I tried to distill what I thought was the most essential things to learn from someone having more of a C# background like myself.</p>
<p>It can be really hard to learn a new operating system, technology, programming language and IDE all at the same time, so I try to break it down and really spend some quality time discussing each of these things.</p>
<p>I think the end result turned out really good.&#160; I am already started on part 2 of this course, which will dive a bit deeper into actually writing code and implementing features, while this course was designed more to lay a good foundation.</p>
<p>If you have already taken my <a href="http://www.pluralsight-training.net/microsoft/courses/TableOfContents?courseName=android-intro">Android development for .NET developers</a> course you’ll notice I am trying to take the same kind of approach as we even build the same protein tracking application.</p>
<p>I found it pretty difficult to map some of the concepts in Android to iOS when I was first porting my <a href="http://pacemakerapp.com/">PaceMaker</a> application to the iPhone, so I tried to create a pretty good mapping between the two courses.&#160; It definitely can be frustrating when you know how to do something in one technology, but can’t even find the words to Google for that same concept in another technology.</p>
<p>I also wanted to take a minutes in this post to highlight value of a video training site like <a href="http://www.pluralsight-training.net/microsoft/">Pluralsight</a>.&#160; I definitely think it is something every developer should have access to.&#160; </p>
<p>Having watched many of the courses on Pluralsight, and developed 2 courses for the site myself, I have come to realized that the true value in these courses is that you are getting a distilled and practical knowledge as opposed to many books that really are more reference based trying to cover all of a technology.</p>
<p>Obviously I am affiliated with Pluralsight, so I am going to say they are great, but I definitely think these kind of real world focused videos are a great way to learn a new technology or enhance your skills.</p>
<p>Anyway, I hope you like the course and if you have any questions or comments about it, feel free to email me or ask them here.</p>
<p>Look for part 2 to be coming in the near future.</p>
<h6>As always, you can subscribe to this <a href="http://feeds.feedburner.com/MakingTheComplexSimple">RSS feed</a> to follow my posts on Making the Complex Simple.&#160; Feel free to check out <a href="http://elegantcode.com/">ElegantCode.com</a> where I post about the topic of writing elegant code about once a week.&#160; Also, you can follow me on twitter <a href="http://twitter.com/jsonmez">here</a>.</h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1363/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1363/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1363/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1363&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2011/07/11/ios-for-net-developers-course-published/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/04/logomedium-e1302667267723.png" medium="image">
			<media:title type="html">Pluralsight</media:title>
		</media:content>
	</item>
		<item>
		<title>Introducing PaceMaker for Android</title>
		<link>http://simpleprogrammer.com/2011/01/04/introducing-pacemaker-for-android/</link>
		<comments>http://simpleprogrammer.com/2011/01/04/introducing-pacemaker-for-android/#comments</comments>
		<pubDate>Tue, 04 Jan 2011 20:42:26 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2011/01/04/introducing-pacemaker-for-android/</guid>
		<description><![CDATA[I’ve been working on a secret side project. You can find it on your android market by searching for “PaceMaker” or using this AppBrain link. Or if you are reading this on your phone, try this link. If you have seen a few of my posts on Android development, you might have guessed it is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1216&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I’ve been working on a secret side project.</p>
<p><a href="http://www.appbrain.com/app/pacemaker-(running)/com.pacemaker.android"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="ic_launcher_pacemaker72x72" src="http://complextosimple.files.wordpress.com/2011/01/ic_launcher_pacemaker72x72.png?w=42&#038;h=42" border="0" alt="ic_launcher_pacemaker72x72" width="42" height="42" /></a></p>
<p>You can find it on your android market by searching for “PaceMaker” or using <a href="http://www.appbrain.com/app/pacemaker-(running)/com.pacemaker.android">this AppBrain link</a>.</p>
<p>Or if you are reading this on your phone, try <a href="http://market.android.com/search?q=pname:com.pacemaker.android">this link</a>.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/01/qr.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="qr" src="http://complextosimple.files.wordpress.com/2011/01/qr_thumb.png?w=200&#038;h=200" border="0" alt="qr" width="200" height="200" /></a></p>
<p>If you have seen a few of my <a href="http://simpleprogrammer.com/category/mobile/android/">posts on Android development</a>, you might have guessed it is an Android application.</p>
<p>If you have seen my <a href="http://simpleprogrammer.com/2010/08/24/programmer-fitness-journey-a-lifestyle-change-not-a-diet/">post on fitness</a>, you might have guessed it is a fitness app.</p>
<h2>Why another running app?</h2>
<p>You probably are already familiar with the running applications that are out there, and several of them are really good.</p>
<p>So the question remains, why would I create another running application?</p>
<p>Let me tell you about my own experience trying to get back into shape and when I starting running and see if that answers the question.</p>
<p>Early last year, I decided to start running to get back into shape.  I used a running program called Couch to 5k to get up to being able to run 5k.</p>
<p>I was able to use several of the running applications available for my phone at the time to chart my runs and even post them online.  This was great, but one of the big things I was struggling with was knowing if I was running at the right pace.</p>
<p>On a treadmill this is easy, you can set the MPH you would like to run or the pace and the treadmill will hum along at that pace.  If you want to be running at a 10:00 minute / mile pace, you can easily do it.</p>
<p>When you are outside running, you can’t just run at 10:00 minutes per mile.  You can guess that you are running about that fast, but it is very hard to know.</p>
<p>It’s pretty important to be able to run at a desired pace, for two main reasons:</p>
<ol>
<li>Making it the whole distance (you don’t want to run too fast or you will die out)</li>
<li>Improving your running (you need to start running at a faster pace gradually in order to get faster)</li>
</ol>
<p>So as I was running I found that I needed to know what pace I was running, so that I could speed up or slow down if I was running too far above or below that pace.</p>
<p>Once I could run 5k, this became really important, because I wanted to improve my time, but I didn’t want to increase my distance.  (Most experts say running more than about 5k tends to lead to muscle loss, I don’t want to lose muscle, just fat!)</p>
<p>I tried using a Garmin watch to monitor my pace, but that didn’t work out well for a few reasons:</p>
<ul>
<li>It’s clunky and you have to keep trying to look at your wrist while running which causes you to slow down.</li>
<li>It’s hard to read small numbers on your bobbing wrist, especially in bright light.</li>
<li>The GPS on it took forever to get a lock.</li>
<li>The batteries were always dead when I wanted to run.</li>
</ul>
<p>I set out to make a running application that was mainly geared around tracking your pace.  What I wanted was audio notifications or vibrations which indicated when I was over or under my desired pace by a certain amount.  I couldn’t find any application that would do this, so I created one.</p>
<p>PaceMaker is designed to solve a very specific problem, running at a desired pace outside.  Sure, it tracks your run and will show it on a map, but the primary focus of this application is to help you run at your desired pace.</p>
<h2>How does it work?</h2>
<p>Once you download the application, it is very simple to use.</p>
<p>The main screen shows your current pace, your target pace, how long you have been running, the distance you have run so far and how many seconds below or above the current pace you are.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/01/main.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="Main" src="http://complextosimple.files.wordpress.com/2011/01/main_thumb.png?w=279&#038;h=492" border="0" alt="Main" width="279" height="492" /></a></p>
<p>Notice the pace is in nice large numbers, so you can read it easily while running.  If you tap the overall pace, it will show your current pace and vice versa.</p>
<p>Overall pace is the pace you have run since you started running while current pace is the approximate current pace in the last 30 seconds or so.</p>
<p>Pressing the start button will start your run, and pressing it again will stop your run, saving your run to a GPX file on your SD Card.</p>
<p>While you are running, if you are over or under your target pace by the amount you set, you will get a nice audio notification saying “Speed up!” or “Slow down!”</p>
<p>You can configure all of these settings in the settings screens.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/01/settings.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="settings" src="http://complextosimple.files.wordpress.com/2011/01/settings_thumb.png?w=285&#038;h=503" border="0" alt="settings" width="285" height="503" /></a></p>
<p>From this screen you can set the target pace in minutes and seconds, and the distance in miles or kilometers.  You can also set up the alerts.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/01/alerts.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="alerts" src="http://complextosimple.files.wordpress.com/2011/01/alerts_thumb.png?w=285&#038;h=503" border="0" alt="alerts" width="285" height="503" /></a></p>
<p>From the alerts screen, you can set the alert to fire if you are running too fast or too slow by 15, 30, 45 or 60 seconds, or choose to not alert you.</p>
<p>You can also choose which sound to play if you are running too fast or slow.  A default is provided, but you can select any ringtone on your phone.</p>
<p>Setting the vibrate function will vibrate the phone in a pattern to notify you if you are too fast or slow.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/01/history.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="history" src="http://complextosimple.files.wordpress.com/2011/01/history_thumb.png?w=282&#038;h=499" border="0" alt="history" width="282" height="499" /></a></p>
<p>All the runs on your SD card can be viewed from the history screen.  Selecting an individual run will display that run and the details on a map.</p>
<p><a href="http://complextosimple.files.wordpress.com/2011/01/history_detail.png"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="history_detail" src="http://complextosimple.files.wordpress.com/2011/01/history_detail_thumb.png?w=285&#038;h=504" border="0" alt="history_detail" width="285" height="504" /></a></p>
<h2>Comments or suggestions</h2>
<p>This is my first Android app, so it was quite a learning experience.  I would appreciate any feedback if you end up buying the application, and 5 star ratings are always appreciated.</p>
<p>I intend to fix any bugs or solve any problems that any users report as well as implement many suggestions, so if you have any please let me know.</p>
<p>If you wouldn’t mind sharing this link with anyone you know who is a runner and has an Android phone, I would be appreciative.</p>
<h6>As always, you can subscribe to this <a href="http://feeds.feedburner.com/MakingTheComplexSimple">RSS feed</a> to follow my posts on Making the Complex Simple.  Feel free to check out <a href="http://elegantcode.com/">ElegantCode.com</a> where I post about the topic of writing elegant code about once a week.  Also, you can follow me on twitter <a href="http://twitter.com/jsonmez">here</a>.</h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1216/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1216/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1216/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1216&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2011/01/04/introducing-pacemaker-for-android/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/ic_launcher_pacemaker72x72.png" medium="image">
			<media:title type="html">ic_launcher_pacemaker72x72</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/qr_thumb.png" medium="image">
			<media:title type="html">qr</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/main_thumb.png" medium="image">
			<media:title type="html">Main</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/settings_thumb.png" medium="image">
			<media:title type="html">settings</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/alerts_thumb.png" medium="image">
			<media:title type="html">alerts</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/history_thumb.png" medium="image">
			<media:title type="html">history</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2011/01/history_detail_thumb.png" medium="image">
			<media:title type="html">history_detail</media:title>
		</media:content>
	</item>
		<item>
		<title>Getting Back to Basics: Introduction and Why</title>
		<link>http://simpleprogrammer.com/2010/10/30/getting-back-to-basics-introduction-and-why/</link>
		<comments>http://simpleprogrammer.com/2010/10/30/getting-back-to-basics-introduction-and-why/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 21:21:47 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://complextosimple.wordpress.com/2010/10/30/getting-back-to-basics-introduction-and-why/</guid>
		<description><![CDATA[In the Java and .NET world today, I am starting to worry we are doing many things just because “that is how you do it.” I think this is a dangerous place to be.&#160; It is a place where education and understanding are trumped by blindly following best practices without really thinking about why or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1151&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the Java and .NET world today, I am starting to worry we are doing many things just because “that is how you do it.”</p>
<p>I think this is a dangerous place to be.&#160; It is a place where education and understanding are trumped by blindly following best practices without really thinking about why or when to apply them.</p>
<p>Not to bash Ruby here, but I think that the recent evacuations from C# and Java to Ruby are in many ways due to this degradation of practicality by so many of the experienced C# and Java developers out there.</p>
<p>I have to admit, I am guilty of it myself.&#160; I blindly add interfaces to classes that don’t need them just so I can dependency inject them into my class so that I can write my behavior driven unit tests using a mocking framework.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/10/basic.jpg"><img style="background-image:none;padding-left:0;padding-right:0;display:inline;padding-top:0;border-width:0;" title="basic" border="0" alt="basic" src="http://complextosimple.files.wordpress.com/2010/10/basic_thumb.jpg?w=492&#038;h=451" width="492" height="451" /></a></p>
<h2></h2>
<h2></h2>
<h2>What am I doing about it?</h2>
<p>I thought I would write a series of blog posts with the goal of getting back to the basics.&#160; I want to take a thorough look at:</p>
<ul>
<li>Why some of todays best practices exist </li>
<li>What problems they are trying to solve </li>
<li>What we did before relying on these techniques </li>
<li>When they are applicable </li>
</ul>
<p>I want to get back to a point where I am very clear that when I employ one of these best practices:</p>
<ul>
<li>I have a good reason for doing so </li>
<li>It is solving a specific problem </li>
<li>It has a net benefit </li>
</ul>
<p>My goal is to take a “nothing is sacred” approach to software development and pick apart anything and everything.</p>
<p>I want to start by looking at some of the basic things like interfaces and ask questions like “why should we even use an interface?”</p>
<p>Honestly, I don’t know where exactly this path will lead, but I am going to take it and see where it goes.</p>
<h2>But what about forward progress?</h2>
<p>Aren’t all of todays best practices and techniques the result of years of forward progress in the profession of software development?</p>
<p>Yes they are, but that doesn’t mean they are right.</p>
<p>It’s kind of weird how progress works.&#160; We end up going down one path for a long time thinking we are making progress until it comes to a dead end, but some of the things we learned along that path allow us to go further on a different path, or open up completely new paths altogether.</p>
<p>It is only in developing solutions to problems that we find other problems that are caused by those solutions, which in turn cause us to go back and resolve the original problems in a different way armed with this new knowledge.</p>
<p>Want a good example of this?</p>
<p>Look at how the usage of JavaScript has changed in the past 5 years.&#160; JavaScript has been around for a long long time, but the way it is being used today is completely different than that way it was being used 5 years ago.</p>
<p>The language itself has not changed, but how we use it has changed completely.</p>
<p>My only point in saying this is to open up your mind to the possibility that things we think are completely necessary today, like unit testing for example, may not end up even being considered valuable at all in the future.</p>
<h2></h2>
<h2>Why is this important?</h2>
<p>It is good to shake up your beliefs and questions them every once in a while.</p>
<p>Any belief you hold true should be able to hold up to solid reasoning.&#160; It is important to test our own beliefs every once in a while to make sure they are still valid.</p>
<p>Testing our beliefs can help us gain more confidence in the ones that are correct, and stop hanging on to those that are wrong.</p>
<h6>As always, you can subscribe to this <a href="http://feeds.feedburner.com/MakingTheComplexSimple">RSS feed</a> to follow my posts on Making the Complex Simple.&#160; Feel free to check out <a href="http://elegantcode.com/">ElegantCode.com</a> where I post about the topic of writing elegant code about once a week.&#160; Also, you can follow me on twitter <a href="http://twitter.com/jsonmez">here</a>.</h6>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1151/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1151/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1151/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1151&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/10/30/getting-back-to-basics-introduction-and-why/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/10/basic_thumb.jpg" medium="image">
			<media:title type="html">basic</media:title>
		</media:content>
	</item>
		<item>
		<title>When Scrum Hurts: Mob Achitecture</title>
		<link>http://simpleprogrammer.com/2010/03/12/when-scrum-hurts-mob-achitecture/</link>
		<comments>http://simpleprogrammer.com/2010/03/12/when-scrum-hurts-mob-achitecture/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 19:07:52 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Agile]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Scrum]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://simpleprogrammer.com/?p=499</guid>
		<description><![CDATA[If you have been following my blog, you know that I have a love/hate relationship with Scrum. I&#8217;ve previously talked about why I think Scrum will eventually die and I am still pretty much convinced of that point.  Scrum has become something you sell through training and consulting.  If you make your living off of doing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=499&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>If you have been following my blog, you know that I have a <a href="http://simpleprogrammer.com/2009/12/05/scrumbut-double-fudge-sunday-and-scrummaster-personal-trainer/">love</a>/<a href="http://simpleprogrammer.com/2010/02/23/scrum-will-die/">hate</a> relationship with Scrum.</h2>
<p>I&#8217;ve previously talked about why I think <a href="http://simpleprogrammer.com/2010/02/23/scrum-will-die/">Scrum will eventually die</a> and I am still pretty much convinced of that point.  Scrum has become something you sell through training and consulting.  If you make your living off of doing this, sorry, but you may be part of the problem.</p>
<p>What this post is really about though is the problem of good architecture when implementing Scrum.  In my experience, it is very difficult to create or maintain a good architecture and do Scrum.  There is one very simple reason for this: <strong>mobs don&#8217;t build good architectures</strong>.</p>
<h2>Why?</h2>
<p>Let me give you an example that helps to illustrate my point.  Let us take a second to think about real physical engineering and architecture.  Let us say we are going to put together a team to design and build a custom home.</p>
<p>So we get together a plumber, an electrician, a couple of framers and an architect.  Now, let&#8217;s have them start building the house.  What do you think the architecture of the building will be like?  What if the plumber and electrician know a good amount about architecture, because they studied it in highschool?  They outvote the actual architect.  In general the team is going to benefit from the real architect&#8217;s experience and guidance, but when he understands a critical component which the other team members do not see, he is going to be overridden and that will spell trouble down the line.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/03/uglyhouse.jpg"><img class="alignnone size-full wp-image-500" title="UglyHouse" src="http://complextosimple.files.wordpress.com/2010/03/uglyhouse.jpg?w=500" alt=""   /></a></p>
<p>Now, obviously this parallel does not completely apply.  I am just trying to take one aspect of it for the point of this illustration.  The idea that you don&#8217;t want a group of people, as intelligent as they are, to make a decision which could be better left in the hands of an expert. </p>
<p>At this point you might be thinking &#8220;what an arrogant jerk!&#8221;  You think a so called &#8220;software architect&#8221; knows so much better than the average developer?  No, that is not exactly the point.  The point is that <strong>there is a difference in level of experience and ability in software people, roles and labels aside, and when you use a democracy of team based decision-making methods, you get an average of the skill level and experience of the whole team as a result.</strong>  It is a mouthful, but read that over a few times until you get my point.  I think it is pretty hard to argue against, but let me give one more illustration.</p>
<p>Let us say now that you are going into a hospital to get heart surgery done.  Now, this kind of procedure is not a one man operation.  You would typically have a surgeon, an anesthesiologist, several nurses, and other doctors involved.  But let&#8217;s say for this instance that we let this surgical team operate like a Scrum team.  Instead of the surgeon or chief medical officer ultimately calling the shots, the team will make a decision as a whole.  Would you be ok with that?  The nurse has the same vote as the surgeon?  Two nurses can override the surgeon&#8217;s decision?  I think I would be a little bit alarmed, especially if I sat in on their design session.</p>
<p><a href="http://complextosimple.files.wordpress.com/2010/03/henrysurgery.jpg"><img class="alignnone size-medium wp-image-501" title="henrysurgery" src="http://complextosimple.files.wordpress.com/2010/03/henrysurgery.jpg?w=300&#038;h=283" alt="" width="300" height="283" /></a></p>
<p>I&#8217;m not trying to pick on anyone here or devalue anyone.  I am also not trying to destroy the concept of team.  Teams and teamwork are very important in the development of software.  But I hope you can see the point that Scrum can tend to lean towards a mob built architecture for a system, and that architecture is only as good as the average of the abilities of the team members.  Although more often than not it&#8217;s really just as good as the most vocal and assertive member(s) of the team.</p>
<h2>Where Scrum and Scrum-like processes fail</h2>
<p>I don&#8217;t see how a resolution to this problem fits inside of the Scrum framework, and that is a problem.  The idea of a completely self-managing team is ok for making construction type decisions about building the software, but it has no solution for the overall architecture and general best practices for the development of the application.  As much as we can despise hierarchy, it really has a value that is completely missed by Scrum.  You really want to have the more <span style="text-decoration:line-through;">senior</span> highly skilled <span style="text-decoration:line-through;">developers</span> technical people with more power over decisions and direction than your less skilled.  This isn&#8217;t mean, it isn&#8217;t spiteful or power-mongering, it is common sense.  The problem with the self-managing- everyone-is-equal team is that it levels the field.</p>
<h2>So what is the solution?</h2>
<p>Would I offer up a problem without offering up a solution?  There are several ways of dealing with this problem.  It depends on how far you are willing to step outside of Scrum.</p>
<p>Solution 1: Scrumminess Factor: 9</p>
<p>Appoint a small team of technical and business architects that have the responsibility of:</p>
<ul>
<li>Overseeing the general architecture of the system</li>
<li>Creating development best practices and guidelines</li>
<li>Attending design sessions for other teams</li>
<li>Stepping in when needed to steer a team back on the right course</li>
</ul>
<p> This solution works only if you have several Scrum teams on the project, where it would make sense to have a team dedicated to architecture.  This team is also a good one to be <a href="http://simpleprogrammer.com/2009/12/03/dedicated-developer-tools-teams/">creating developer tools</a>.  I have actually been part of a team doing this kind of role, and I think it worked out pretty well.  It doesn&#8217;t really violate Scrum, because that team is a separate Scrum team with a different kind of backlog.</p>
<p>Solution 2: Scrumminess Factor: 6</p>
<p>Appoint a technical architect to the project.  This person is in charge of the technical people on all of the teams for technical direction, but not HR duties.  This role would have the ultimate authority on any kind of development and architecture decisions for the project.  They would be a floating resource that could help teams at times where needed.  This person would be thinking about the bigger architecture picture that is being created by each of the teams.</p>
<p>Solution 3: Scrumminess Factor: 3</p>
<p>Appoint technical leads on the teams which are responsible for the architecture and ultimate technical direction of the team they are on.  If you have multiple teams, the technical leads should have a technical lead for the technical leads.  This allows for a unified vision when there is dissent among the technical team leads.  It has a low Scrum factor, because it puts a direct leadership role on the Scrum team, but it allows for the solution to the mob architecture problem, while still keeping the architecture within the team.</p>
<p>One final word here.  If you are still thinking that a central authority is not important to a business, consider this:  every company I know of has either a CEO or a president.  I have never seen a company with a Chief Executive Committee.  Sure, there is a board of directors, whom the CEO ultimately is accountable to, but you have one person setting the vision and business direction of the company.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/499/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/499/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/499/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=499&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/03/12/when-scrum-hurts-mob-achitecture/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/03/uglyhouse.jpg" medium="image">
			<media:title type="html">UglyHouse</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/03/henrysurgery.jpg?w=300" medium="image">
			<media:title type="html">henrysurgery</media:title>
		</media:content>
	</item>
		<item>
		<title>Automated UI Testing Framework&#8230; A Real Example</title>
		<link>http://simpleprogrammer.com/2010/01/05/automated-ui-testing-framework-a-real-example/</link>
		<comments>http://simpleprogrammer.com/2010/01/05/automated-ui-testing-framework-a-real-example/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 15:41:28 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Automation]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Process Improvement]]></category>
		<category><![CDATA[Testing]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Watij]]></category>

		<guid isPermaLink="false">http://simpleprogrammer.com/?p=123</guid>
		<description><![CDATA[Michael Feathers recently blogged a very interesting topic he titled &#8220;UI Test Automation Tools are Snake Oil&#8221;. &#160;This seems to have stirred up again the very controversial topic of UI automation. &#160;I had previously posted about the pro&#8217;s and con&#8217;s of using a recording tools versus creating a framework. &#160;Now I wanted to expand a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=123&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Michael Feathers recently blogged a very interesting topic he titled <a href="http://blog.objectmentor.com/articles/2010/01/04/ui-test-automation-tools-are-snake-oil">&#8220;UI Test Automation Tools are Snake Oil&#8221;</a>. &nbsp;This seems to have stirred up again the very controversial topic of UI automation. &nbsp;I had previously posted about the pro&#8217;s and con&#8217;s of <a href="http://simpleprogrammer.com/2009/12/18/automated-functional-testing-record-or-program/">using a recording tools versus creating a framework</a>. &nbsp;Now I wanted to expand a little more on using a framework by giving a concrete example of a framework I have written and I am using to actually write good automated UI tests that are not fragile.</p>
<p><strong>The project</strong></p>
<p>The project I am working on is mostly written in Java. &nbsp;It is a case management system which workers use to enter applicants information and then run their eligibility to qualify them for benefits. &nbsp;The basic use of the system is to create a new case, create people on the case with their information, income, relationships etc, and then run the eligibility and save the results. &nbsp;One other important piece here I want to mention before I get flamed about technology choices is that the product was a legacy product and only supported on IE.</p>
<p><strong>The tools</strong></p>
<p>Based on most of the developers being versed in Java and the system requiring IE, I chose to use <a href="http://watij.com/">Watij </a>for the framework. &nbsp;Watij is basically a framework built on top of IE that directly interacts with the browser through the DOM through the COM interface. &nbsp;When you are testing in Watij you are actually interacting with the browser, but since you are going through the com layer instead of clicking directly through the screens you are able to hide the browser window and run tests with the machine locked. &nbsp;I also used JUnit as the test driver to execute the tests since it is easy to run from eclipse and can easily be run from an ant build to report the results and run on the build server.</p>
<p><strong>The framework</strong></p>
<p>The basic idea behind this framework is that I wanted to make it so a non programmer could write the tests and maintain the tests without having to know much about Java or Watij. &nbsp;Even though Watij happens to be being used behind the scenes, I wanted the person writing the test scripts to only need to have domain knowledge of the application. &nbsp;With that in mind, here is a picture of the stack.</p>
<p style="text-align:center;"><a href="http://complextosimple.files.wordpress.com/2010/01/automated_testing_framework-2.png"><img class="size-medium wp-image-124 aligncenter" title="Automated Testing Framework" src="http://complextosimple.files.wordpress.com/2010/01/automated_testing_framework-2.png?w=251&#038;h=299" alt="The Stack" width="251" height="299"></a></p>
<p style="text-align:left;">You can see in the diagram that I show a technology and how you interact with it. &nbsp;IE uses HTML and CSS, Watij is built on top of IE and lets you work against the DOM. &nbsp;My application framework is build on top of Watij and lets you work with domain specific concepts such as specific screen, work flows and navigation. &nbsp;The test scripts are written against the domain specific application framework.</p>
<p style="text-align:left;">Using this type of a framework, most tests can be written in as few a 5 lines of code. &nbsp;Here is an example of a test:</p>
<p style="text-align:left;">
<p><pre class="brush: java;">
@Before
     public void SetUp()
     {
          this.caseNumber = CaseCreator.createCase( IBESDate.currentMonth(),
                                                    false,
                                                    false,
                                                    People.ADULT_MALE_1.onPrograms( Program.MEDICAID ) );
     }

     @Test
     public void taskCanBeSelected()
     {
          Tasks.addTask( TaskType.RECEIVED_458, IBESDate.monthsInFuture( 3 ) );
          WorkQueue.search( TaskType.RECEIVED_458,
                            IBESDate.monthsInFuture( 3 ),
                            IBESDate.monthsInFuture( 3 ) );

          Assert.assertTrue( WorkQueue.searchResultsHasCase( this.caseNumber ) );

     }</pre></p>
<p>Now this isn&#8217;t going to make much sense to most people who read it and I actually consider that a good thing. &nbsp;If you looked at the screens in the application it would make much more sense. &nbsp;Someone writing these tests only needs to know about the screens and they can figure out how to do something. &nbsp;There is actually a large amount of things going on in the background when you run this test. &nbsp;It will create a complete case, add the person to the case, then click through a task workflow to add a specific task, then it will go through another workflow to search by the task to see that it was added. &nbsp;There are probably about 20-25 different screen that this test ends up going through with these very few and simple lines of code.</p>
<p>The secret behind these kinds of a simple UI automation tests is abstraction. &nbsp;The framework is designed to essentially be a domain specific language. &nbsp;By abstracting away anything that has to do with the browser, html and even the dom, I am able to present a simple and stable interface for the tester to do exactly what they want and not know about all the other technology going on behind the wheel. &nbsp;Think about how complex a motor vehicle is, yet how simple the interface to the user is. &nbsp;I see many automation strategies that require the person writing the test scripts to know about all nuances of browsers and html.</p>
<p><strong>What about change?</strong></p>
<p>Most automation strategies break down when&nbsp;encountering&nbsp;UI changes. &nbsp;I welcome UI changes. &nbsp;Go ahead and change the UI, it won&#8217;t break all my tests, it will break one specific place in the framework that knows about what kind of things are on a particular screen. &nbsp;With this framework it is very easy to fix a broken UI in one place and all the tests will work again. &nbsp;Contrast this to many of the automation scenarios you have seen where a single renaming of a button requires 50 tests to be reworked. &nbsp;All of the Watij interaction is in one namespace called &#8220;UI&#8221;. &nbsp;All of the screens use UI to interact with Watij, so that I could even swap out Watij for another browser automation framework.</p>
<p><strong>Back to the snake oil</strong></p>
<p>I do have to say I agree with many of the points Michael made in his post, but I have seen them overcome. &nbsp;A tool is never going to be a magic bullet. &nbsp;Yet at the same time we should not run away from UI automation. &nbsp; We just need to correctly apply the same principles we apply to create good abstractions in our source code to our automation code.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/123/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/123/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/123/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=123&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2010/01/05/automated-ui-testing-framework-a-real-example/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>

		<media:content url="http://complextosimple.files.wordpress.com/2010/01/automated_testing_framework-2.png?w=251" medium="image">
			<media:title type="html">Automated Testing Framework</media:title>
		</media:content>
	</item>
		<item>
		<title>Making the Complex Simple</title>
		<link>http://simpleprogrammer.com/2009/11/20/hello-world/</link>
		<comments>http://simpleprogrammer.com/2009/11/20/hello-world/#comments</comments>
		<pubDate>Fri, 20 Nov 2009 17:27:41 +0000</pubDate>
		<dc:creator>jsonmez</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[I thought it rather appropriate to make my first blog post be about the title of the blog, since that is the central theme of the blog. What do I mean by making the complex simple? In my mind this is the single most important quality of a software developer.  The ability to take something [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I thought it rather appropriate to make my first blog post be about the title of the blog, since that is the central theme of the blog.</p>
<p>What do I mean by making the complex simple?</p>
<p>In my mind this is the single most important quality of a software developer.  The ability to take something that is complicated and to large to fit inside a skull and make it simple and understandable.  This concept is applicable at many different levels of abstraction, just as the practice is.</p>
<p>For example:  When we are writing code, what we are doing is taking a complex world and dissolving it to a simpler abstraction of rules which govern how it works.  The world is often &#8220;fuzzy&#8221; and requires judgement an intuition.  As developers we take that &#8220;fuzzy&#8221; world and make generalizations about it and make it concrete for our problem domain.</p>
<p>Taking it a step further, simply writing software or code, is simplifying the complex world into black and white, but even that is complex.  I can write a bunch of assembler code or even machine language, and I may have technically made the complex world simple, but I may have actually made it more complex to the next programmer to read my code.  As a good developer I would strive to make the expression of those rules of the system to be simple itself so that another developer or myself could easily understand this complex concept.  This is what I mean when I say elegant code.</p>
<p>Being able to write code that is easy to understand or &#8220;fit in your head&#8221; is such a quintessential part to development that without that skill even the most genius developer is bound for failure.  I would equate this with the difference between writing intelligent code versus wise code.</p>
<p>Simple vs complex is such an important concept that it transcends programming and really touches many areas of our lives.  Think about your car?  How simple is it to use such a complicated piece of machinery?  There is a large amount going on which we don&#8217;t know or care about when we drive a car, but someone came up with a simple interface which makes this really complex thing to do very simple.  Consider Apple&#8217;s success.  I have had a smart phone since HP first came out with the IPac phone, but did I ever really use any of the features on the phone?  Apple came a long took this complex interface for most of the competing phones, and didn&#8217;t make it stupider, they just made it simpler.  In fact they gave it more capabilities, but made the user interface so simple to use.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/complextosimple.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/complextosimple.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/complextosimple.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/complextosimple.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/complextosimple.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/complextosimple.wordpress.com/1/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/complextosimple.wordpress.com/1/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/complextosimple.wordpress.com/1/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=simpleprogrammer.com&amp;blog=10597120&amp;post=1&amp;subd=complextosimple&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://simpleprogrammer.com/2009/11/20/hello-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://0.gravatar.com/avatar/695e2a956b2dcb5ac45a7095b6ee338a?s=96&#38;d=retro&#38;r=PG" medium="image">
			<media:title type="html">jsonmez</media:title>
		</media:content>
	</item>
	</channel>
</rss>
