<?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>SEP Project Management Blog</title>
	<atom:link href="http://www.sep.com/pmblog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.sep.com/pmblog</link>
	<description>Just another Software Engineering Professionals weblog</description>
	<lastBuildDate>Mon, 30 Apr 2012 14:48:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Walking the Talk – Part 2</title>
		<link>http://www.sep.com/jsg/2012/04/09/walking-the-talk-part-2/</link>
		<comments>http://www.sep.com/jsg/2012/04/09/walking-the-talk-part-2/#comments</comments>
		<pubDate>Mon, 09 Apr 2012 14:10:43 +0000</pubDate>
		<dc:creator>jsg</dc:creator>
		
		<guid isPermaLink="false">http://www.sep.com/jsg/?p=87</guid>
		<description><![CDATA[Back on the “trend” of applying Agile/Lean practices SEP learned from software development to “management” I submit another example. SEP is working on significant updates to its risk management, project management and status reporting. These areas deal a lot with communication and like everything else&#8230;people. It really impressed me to find out our managers were [...]]]></description>
			<content:encoded><![CDATA[<p>Back on the “trend” of applying Agile/Lean practices SEP learned from software development to “management” I submit another example. SEP is working on significant updates to its risk management, project management and status reporting. These areas deal a lot with communication and like everything else&#8230;people.<a href="http://www.sep.com/jsg/files/2012/04/cam-persona.png"><img class="alignright size-medium wp-image-88" style="margin: 2px" src="http://www.sep.com/jsg/files/2012/04/cam-persona-238x300.png" alt="" width="143" height="180" /></a></p>
<p>It really impressed me to find out our managers were applying SEP’s Envision discovery practice techniques to help understand what we needed to do. They worked with personas (see pictures for examples). One represented the client (Cam) and the other an SEP project manager (Pete).</p>
<p>The team is running through the Envision process doing measurable product goals, personas, story-boarding – whatever makes sense.</p>
<p><a href="http://www.sep.com/jsg/files/2012/04/pete-pm.png"><img class="alignleft size-medium wp-image-91" style="margin: 2px 3px" src="http://www.sep.com/jsg/files/2012/04/pete-pm-288x300.png" alt="" width="183" height="190" /></a>It is interesting to me that processes we have come to trust for software product development to ‘build the RIGHT product’ should and could be used to help us build better practices, tools, etc. It is a validation of the principles behind the approaches:</p>
<p>- Engage as many different types of stakeholders in the process as you can<br />
- Concentrate on the end user and the end result<br />
- Follow the value<br />
- Be prepared to increment/learn<br />
- Build it in paper first<br />
- Stay visual</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/jsg/2012/04/09/walking-the-talk-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to be more confident in your changes – Test First…</title>
		<link>http://www.sep.com/mcterry/2012/04/07/how-to-be-more-confident-in-your-changes-test-first/</link>
		<comments>http://www.sep.com/mcterry/2012/04/07/how-to-be-more-confident-in-your-changes-test-first/#comments</comments>
		<pubDate>Sat, 07 Apr 2012 18:40:07 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
		
		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=532</guid>
		<description><![CDATA[I was tag-teaming a change with one of my teammates, Brian, and I didn&#8217;t even know where to begin.  I wasn&#8217;t nearly as confident with the scheduling logic as Brian was, which is why I was really excited to partner up with him in order to make the changes we needed. First, write tests that [...]]]></description>
			<content:encoded><![CDATA[<p>I was tag-teaming a change with one of my teammates, <a title="Brian Ball Twitter - @myotherpants" href="https://twitter.com/#!/myotherpants" >Brian</a>, and I didn&#8217;t even know where to begin.  I wasn&#8217;t nearly as confident with the scheduling logic as Brian was, which is why I was really excited to partner up with him in order to make the changes we needed.</p>
<p><strong>First, write tests that fail&#8230;wait, what!?!</strong><br />
Brian took an interesting approach to the problem.  No, he didn&#8217;t open up the code and try to walk me through the method calls&#8230;instead, he opened up our test project and showed me the tests we already had written for the scheduler.</p>
<p><span id="more-532"></span></p>
<p>Next, we wrote a couple of unit-tests to cover the new behavior.  As you can expect, our tests failed.  To be honest, I didn&#8217;t really understand what Brian was trying to do&#8230;I <em>_knew_</em> the tests would fail.  In reality, though, now we both understood exactly what the problem was, and we both knew exactly what the new behavior should do.</p>
<p>By writing our tests first, we both had a shared understanding of what the new behavior should be.  I still didn&#8217;t know everything about the scheduler, but I knew everything about the change we were about to make!</p>
<p><strong>Next, isolate the issue&#8230;</strong><br />
Now that we had tests that were failing, Brian and I added a couple of methods to our scheduler that we thought would achieve our desired behavior.  We wrote enough code to satisfy our unit tests.  And then we ran those tests again.</p>
<p>As you&#8217;d imagine, now our tests are passing.  And honestly, I don&#8217;t think we saved any time by doing things in this order.  However, what we did do, was isolate the issue.  Our changes were minimal, and we simply added some methods to exercise the new behaviors we wanted.  Pretty simple.  But unit tests don&#8217;t tell the whole story, right?</p>
<p><strong>Then, wire up your changes&#8230;</strong><br />
The last thing we did was wire up our new methods in the appropriate places.  For example, we simply added the new checks to our scheduler before we  actually displayed a notification to our users.</p>
<p><strong>Finally, relax&#8230;</strong><br />
Not only is my confidence extremely high that our changes are working, I&#8217;m also confident we didn&#8217;t change any of the existing behaviors (because we already had tests for those behaviors).</p>
<p>Ultimately, if you want to be confident in your changes, write your tests first&#8230;go ahead, I dare you <img src='http://www.sep.com/mcterry/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2012/04/07/how-to-be-more-confident-in-your-changes-test-first/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Walking the Talk – Lean/Agile as a Way of Business</title>
		<link>http://www.sep.com/jsg/2012/04/03/walking-the-talk-leanagile-as-a-way-of-business/</link>
		<comments>http://www.sep.com/jsg/2012/04/03/walking-the-talk-leanagile-as-a-way-of-business/#comments</comments>
		<pubDate>Tue, 03 Apr 2012 16:31:31 +0000</pubDate>
		<dc:creator>jsg</dc:creator>
				<category><![CDATA[mgmt]]></category>

		<guid isPermaLink="false">http://www.sep.com/jsg/?p=78</guid>
		<description><![CDATA[My management team implements a lot of really cool practices, techniques, etc. (“stuff”) here. There appears to be a trend developing that is really exciting. It guess it has to be connected to appointing Chris Shinkle to the Director of Innovation role at SEP. The trend? Our managers are applying some of the awesome agile/lean [...]]]></description>
			<content:encoded><![CDATA[<p>My management team implements a lot of really cool practices, techniques, etc. (“stuff”) here. There appears to be a trend developing that is really exciting. It guess it has to be connected to appointing <a href="http://www.linkedin.com/profile/view?id=39005253&amp;locale=en_US&amp;trk=tyah">Chris Shinkle</a> to the Director of Innovation role at <a href="http://www.sep.com">S</a><a href="http://www.sep.com/jsg/files/2012/04/wall-graphic.png"><img class="size-medium wp-image-79 alignright" style="margin: 1px;border: 0pt none" src="http://www.sep.com/jsg/files/2012/04/wall-graphic-200x300.png" alt="" width="150" height="250" /></a><a href="http://www.sep.com">EP</a>.</p>
<p>The trend? Our managers are applying some of the awesome agile/lean principles we use in software development to management areas. I have several examples to write about. The first is the most noticeable to us and perhaps the simplest.</p>
<p>Recently a large diagram appeared on a hallway on our fourth floor. It is hard to see its size in the picture. It is VERY large &#8211; 6’ x 19’. SEP is in the process of re-looking at its practices for proposal development, client relations, high-level project tracking and business development. These areas interact with software development and project management. It all has to integrate and it all has to add value.</p>
<p>The task was daunting considering the breadth we needed to consider and our desire to get input from a lot of people. So this wall shows up. At first it just hung there and it was pretty overwhelming with a lot of empty space. We haven’t had any stand-ups around it yet and so far there hasn’t been a lot of talk about it.</p>
<p>Slowly people with an interest in these areas began to post notes on the board in pencil. Recently pictures were added that represented topics that need to be considered: networking, conferences, business development and marketing.  It was interesting to me that the addition of these pictures really made the board more engaging.I mentioned that this was a simple example of Agile/Lean principles – ‘make the work visible’.</p>
<p><a href="http://www.sep.com/jsg/files/2012/04/picture-jsg.png"><img class="alignleft size-medium wp-image-80" style="margin: 2px;border: 0pt none" src="http://www.sep.com/jsg/files/2012/04/picture-jsg-300x274.png" alt="" width="189" height="174" /></a> As time goes on this simple visual tool will become the central focus of a team of people working to make these areas better. If we just let this map alone, unaided and supported I suspect that a team would self-organize around it. That is the way it works.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/jsg/2012/04/03/walking-the-talk-leanagile-as-a-way-of-business/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is Envision? Understanding SEP’s Discovery Process</title>
		<link>http://www.sep.com/jsg/2012/03/21/what-is-envision-understanding-seps-discovery-process/</link>
		<comments>http://www.sep.com/jsg/2012/03/21/what-is-envision-understanding-seps-discovery-process/#comments</comments>
		<pubDate>Wed, 21 Mar 2012 20:21:02 +0000</pubDate>
		<dc:creator>jsg</dc:creator>
				<category><![CDATA[mgmt]]></category>
		<category><![CDATA[SEP Project Management]]></category>

		<guid isPermaLink="false">http://www.sep.com/jsg/?p=75</guid>
		<description><![CDATA[Envision is SEP’s unique collection of practices collected from different industries and approaches integrated powerfully together, designed to integrate with SEP’s collaborative development processes. The main goal of Envision is to develop a shared vision for a product. The process is very visual so it is easy to include both technical and non-technical representatives and [...]]]></description>
			<content:encoded><![CDATA[<p>Envision is SEP’s unique collection of practices collected from different industries and approaches integrated powerfully together, designed to integrate with SEP’s collaborative development processes.</p>
<p>The main goal of Envision is to develop a shared vision for a product. The process is very visual so it is easy to include both technical and non-technical representatives and stakeholders.</p>
<p>Envision also helps prioritize product features. This yields much leaner product footprints tightly matched to the targeted markets and users. The result is a shorter and less expensive path to market.</p>
<p>Envision also supports a multiple release strategy for product deployment that is so key in developing products for the new, developing markets we are seeing. For example, look at mobile device applications. Users expect frequent updates with new content. We have seen that it often take several releases to the market to get to a successful offering.</p>
<p>Envision begins by first getting everyone together. SEP provides the discovery team including the facilitator. We like to get a broad representation of people to participate, really anyone who can bring value and input.</p>
<p>The SEP facilitator leads the group through a series of exercises that result in a strong common vision for the product. We use visual models that anyone can be taught to understand. As the sessions continue we move from high-level product goals, to user personas and storyboards.</p>
<p>Seeing the visual model of the system and its potential features the discussion moves to &#8220;right scoping&#8221; and release planning. This is where the group takes a hard look at the potential product features, deferring, removing and prioritizing them.</p>
<p>At a high level, we are planning feature-dense releases of the product designed to fit the marketing approach and product goals. Between each release to the market we assess market response and this input is used in planning the next feature-dense release of the product.</p>
<p>The goal is early and often releases to the market with quick response to market/user input.</p>
<p>This is really the future of software product deployment and it is the direction SEP is committed to taking.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/jsg/2012/03/21/what-is-envision-understanding-seps-discovery-process/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android UI/X – don’t go overboard with your list views</title>
		<link>http://www.sep.com/mcterry/2012/03/17/android-uix-dont-go-overboard-with-your-list-views/</link>
		<comments>http://www.sep.com/mcterry/2012/03/17/android-uix-dont-go-overboard-with-your-list-views/#comments</comments>
		<pubDate>Sat, 17 Mar 2012 05:41:08 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
		
		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=450</guid>
		<description><![CDATA[The Android ListView is one of the simplest UI widgets to implement.  There are plenty of ListView tutorials and examples, so I&#8217;m not going to talk about how to implement a list. Instead, I&#8217;m going to focus on the User Experience and ways to improve your lists. To see a really well implemented ListView, take [...]]]></description>
			<content:encoded><![CDATA[<p>The <a title="Android ListView class" href="http://developer.android.com/reference/android/widget/ListView.html" >Android ListView</a> is one of the simplest UI widgets to implement.  There are plenty of <a title="Android ListView tutorial" href="http://developer.android.com/resources/tutorials/views/hello-listview.html" >ListView tutorials and examples</a>, so I&#8217;m not going to talk about how to implement a list.</p>
<p>Instead, I&#8217;m going to focus on the User Experience and ways to improve your lists.</p>
<p>To see a really well implemented ListView, take a look at the contact list on your phone.  It is consistent, generic, and responsive.  You can fling the list, and it glides smoothly.  You can easily follow down the left side until you see the name you&#8217;re looking for.  And you aren&#8217;t distracted by any rows that stand out like a sore thumb.</p>
<p>In this post, I want to talk about ways that you can make your ListView as good as  the contact list.<span id="more-450"></span></p>
<p><strong>Patterns for responsiveness:</strong></p>
<p>First, let&#8217;s talk about some of the &#8220;crunchy stuff&#8221; &#8211; the code.  There is a lot you can do to make your Java more efficient, but that&#8217;s not where the bang-for-the-buck is at.  You really need to take advantage of some of the tools that Android has put in place.  Namely, the convert view and the tags.  Below are 2 patterns that you can use to improve the responsiveness of your list.</p>
<p><em>Recycling pattern:</em></p>
<p>The recycling pattern makes use of the convert view.  Inside your <a title="Android ListAdapter class" href="http://developer.android.com/reference/android/widget/ListAdapter.html" >ListAdapter</a>, there is a method called &#8220;getView()&#8221;.  You may have noticed that one of the parameters in that method is called &#8220;convertView&#8221;.  Making use of the convertView can significantly reduce the number of calls that are made to the <a title="Android LayoutInflater class" href="http://developer.android.com/reference/android/view/LayoutInflater.html" >LayoutInflater</a>.  The way that Android wants you to use the convertView, is to recycle the views contained in each row.</p>
<p>This is important because as the user scrolls, many rows are coming in and out of the screen.  Because this is a list, the views should largely be the same components, just with different data.</p>
<p>Going back to our reference from above, the contact list simply has an image, name, and description.  That translates to one ImageView component, and 2 TextView components.  Each row is identical in structure.</p>
<p>Below is an example of how to use the convertView in your ListAdapter.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl:view+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">View</span></a> getView<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> position, <a href="http://www.google.com/search?hl=en&amp;q=allinurl:view+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">View</span></a> convertView, ViewGroup parent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// When convertView is not null, we can reuse it directly, there is no need</span><br />
<span style="color: #666666; font-style: italic;">// to reinflate it. We only inflate a new View when the convertView supplied</span><br />
<span style="color: #666666; font-style: italic;">// by ListView is null.</span><br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>convertView <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
convertView <span style="color: #339933;">=</span> mInflater.<span style="color: #006633;">inflate</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">list_item_icon_text</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
convertView.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;foo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>In this example, we only inflate the view if convertView is null.  Otherwise, we simply set the text to &#8220;foo&#8221; without inflating.</p>
<p>Biggest bang for your buck, right there.  A simple null check before inflating, and that&#8217;s it.</p>
<p><em>Holder pattern:</em></p>
<p>The holder pattern uses a class to hold references to your view.  Just as inflating a view is expensive, so is calling &#8220;findViewById()&#8221; each time you want to access a widget in your view.  This pattern is a solution to a common problem in most UI Toolkits&#8230;getting references to a widget.</p>
<p>The normal way that you would get/set data in a widget is by finding the view by ID, and then calling the appropriate method on that object &#8211; e.g. when we called setText(&#8220;foo&#8221;) in the above example.  As you can imagine, in a list this gets very expensive.</p>
<p>Below is an example of the Holder pattern.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">static</span> <span style="color: #000000; font-weight: bold;">class</span> ViewHolder <span style="color: #009900;">&#123;</span><br />
TextView text<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">public</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl:view+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">View</span></a> getView<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">int</span> position, <a href="http://www.google.com/search?hl=en&amp;q=allinurl:view+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">View</span></a> convertView, ViewGroup parent<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// A ViewHolder keeps references to children views to avoid unneccessary calls</span><br />
<span style="color: #666666; font-style: italic;">// to findViewById() on each row.</span><br />
ViewHolder holder<span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>convertView <span style="color: #339933;">==</span> <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
convertView <span style="color: #339933;">=</span> mInflater.<span style="color: #006633;">inflate</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">layout</span>.<span style="color: #006633;">list_item_icon_text</span>, <span style="color: #000066; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
holder <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> ViewHolder<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
holder.<span style="color: #006633;">text</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>TextView<span style="color: #009900;">&#41;</span> convertView.<span style="color: #006633;">findViewById</span><span style="color: #009900;">&#40;</span>R.<span style="color: #006633;">id</span>.<span style="color: #006633;">text</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
convertView.<span style="color: #006633;">setTag</span><span style="color: #009900;">&#40;</span>holder<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span> <span style="color: #000000; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// Get the ViewHolder back to get fast access to the TextView</span><br />
<span style="color: #666666; font-style: italic;">// and the ImageView.</span><br />
holder <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>ViewHolder<span style="color: #009900;">&#41;</span> convertView.<span style="color: #006633;">getTag</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Bind the data efficiently with the holder.</span><br />
holder.<span style="color: #006633;">text</span>.<span style="color: #006633;">setText</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;foo&quot;</span> <span style="color: #339933;">+</span> position<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000000; font-weight: bold;">return</span> convertView<span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>So, in this pattern we are using tags, instead of IDs.  The holder is responsible for holding the tag so that you only ever have to make 1 call to findViewById().  We still use the convertView as we were previously.  And finally, you bind your data through the holder, instead of directly to a specific view object.</p>
<p><strong>There&#8217;s always an exception&#8230;</strong></p>
<p>Now, these patterns are great&#8230;but these patterns don&#8217;t fix everything.  They only help address the responsive aspect to your list.  In fact, they lose a lot of their impact if your view is not generic.  If different rows of your list have different items in the view, then both of these patterns will only have minimal impacts because you won&#8217;t be able to recycle views (convertView will be null each time the view changes) and the holders will get updated regularly.</p>
<p><strong>Simplicity wins</strong></p>
<p>The biggest improvement you can do is to actually make your list generic and consistent.  Below are some less crunchy ways to improve your design.</p>
<p><em>Generic views &#8211; defer secondary content</em></p>
<p>Use the fewest pieces of information to identify the item, and use a dialog to display more information if the user is interested.  <a title="Nielsen - defer secondary content" href="http://www.useit.com/alertbox/mobile-content.html" >Defer all of the secondary content</a> and additional actions to another screen or dialog.  The more content you put in a view, the more work you are doing with binding and updating data.</p>
<p>Again, the contact list simply has an image, name, and description&#8230;that&#8217;s it.</p>
<p><em>Consistent &#8211; don&#8217;t conditionally modify the view</em></p>
<p>Unless you absolutely need to uniquely identify a row&#8230;don&#8217;t!  Don&#8217;t worry about modifying the views in each row.  It actually causes more problems for the user if items are not consistent in a list.</p>
<p>Adding small tweaks here and there add up quickly and become noisy distractions (e.g. color-coding backgrounds, re-arranging items, or adding/hiding items).  The more inconsistent your views are, the more conditional display logic you&#8217;ll have to write.  And the more conditional display logic you write, the slower your scroll speeds&#8230;not to mention the more confused your users will be.</p>
<p><strong>In Summary</strong></p>
<p>The biggest increases you can get are actually in making your view hierarchy as simple as possible.  It increases usability, and decreases complexity of your code.  The next time you&#8217;re implementing a list, give it the &#8220;fling&#8221; test, and see if it is smooth and consistent as it scrolls by.</p>
<p>Remember, your aim should be to create a product that is both <a title="Nielsen User Experience - simple and elegant" href="http://www.nngroup.com/about/userexperience.html" >simple and elegant</a>, as well as, a product that is <a title="Product Engineering is like road construction…" href="http://www.sep.com/mcterry/2011/12/08/product-engineering-is-like-road-construction/" >desirable to use</a>.</p>
<p>&nbsp;</p>
<p>The above patterns and snippets are based off of the <a title="Android ListView List14.java patterns" href="http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html" >sample List14.java</a> from the SDK samples.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2012/03/17/android-uix-dont-go-overboard-with-your-list-views/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android AsyncTasks, for updating your UI</title>
		<link>http://www.sep.com/mcterry/2012/03/11/android-asynctasks-for-updating-your-ui/</link>
		<comments>http://www.sep.com/mcterry/2012/03/11/android-asynctasks-for-updating-your-ui/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 18:21:06 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
		
		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=247</guid>
		<description><![CDATA[Last time, I talked about how to use Android Handlers for handling a blocking task in the background.  While Handlers are very powerful, they can easily get too complicated for larger tasks. This time, let&#8217;s take a look at the Android AsyncTasks. AsyncTask enables proper and easy use of the UI thread. This class allows to [...]]]></description>
			<content:encoded><![CDATA[<p>Last time, I talked about how to use <a title="Android Handler, in a nutshell…" href="http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/" >Android Handlers</a> for handling a blocking task in the background.  While Handlers are very powerful, they can easily get too complicated for larger tasks.</p>
<p>This time, let&#8217;s take a look at the <a href="http://developer.android.com/reference/android/os/AsyncTask.html" >Android AsyncTasks</a>.</p>
<blockquote><p>AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.</p></blockquote>
<p>The AsyncTask class takes care of all of the hard work for us!  Because the AsyncTask runs in a &#8220;worker thread&#8221; as part of the UI Thread, you are not guaranteed that it is running in a multi-threaded model.  Instead, it is executed in an asynchronous way.</p>
<p>Knowing how your application lifecycle impacts your user interface plays a big role here.  Typically, using an AsyncTask is appropriate because your application is likely the only foreground Activity.</p>
<p>While the details of this post rely on using an asynchronous model, I&#8217;m not going to cover the details of process/thread models.  Instead, I recommend taking at look at this <a href="http://krondo.com/wp-content/uploads/2009/08/twisted-intro.html" >introduction to asynchronous programming</a>.  The author, Dave Peticolas, has some great graphics to illustrate the differences between those models &#8211; single-threaded, multi-threaded, and asynchronous. (Thanks <a href="https://twitter.com/#!/_swanson" >@_swanson</a> for sharing this!)</p>
<p><strong><span id="more-247"></span>So, what does it look like?</strong></p>
<p>An AsyncTask is actually really easy to implement.  The AsyncTask goes through 4 steps</p>
<ul>
<li>onPreExecute() &#8211; called immediately after the task is executed, used for setup</li>
<li>doInBackground(Params&#8230;) &#8211;  used for long-running tasks</li>
<li>onProgressUpdate(Progress&#8230;) &#8211; used to display progress to the user, for example &#8220;On step X out of Y&#8221;</li>
<li>onPostExecute(Result) &#8211; called immediately after the task is finished</li>
</ul>
<p>The interesting steps are &#8220;doInBackground&#8221; and &#8220;onPostExecute&#8221;.  Below is an example that covers both of these.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">class</span> MyAsyncTask <span style="color: #000000; font-weight: bold;">extends</span> AsyncTask<span style="color: #339933;">&lt;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl:string+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">String</span></a>, <a href="http://www.google.com/search?hl=en&amp;q=allinurl:void+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">Void</span></a>, String<span style="color: #339933;">&gt;</span> <span style="color: #009900;">&#123;</span><br />
@Override<br />
<span style="color: #000000; font-weight: bold;">protected</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl:string+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> doInBackground<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl:string+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">String</span></a>... <span style="color: #006633;">params</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// this is where you implement your long-running task</span><br />
<span style="color: #000000; font-weight: bold;">return</span> doSomeLongOperation<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
@Override<br />
<span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000066; font-weight: bold;">void</span> onPostExecute<span style="color: #009900;">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl:string+java.sun.com&amp;btnI=I'm%20Feeling%20Lucky"><span style="color: #003399;">String</span></a> result<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<span style="color: #666666; font-style: italic;">// here, you can update, and manipulate, your views</span><br />
updateUiWithResult<span style="color: #009900;">&#40;</span>result<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #009900;">&#125;</span></div></div>
<p>That&#8217;s all it takes to implement your AsyncTask.  Simple, right?</p>
<p>The beautiful part about AsyncTasks is, the &#8220;onPostExecute()&#8221; method is able to update your view.  This is powerful because you don&#8217;t have to worry about some of the issues we talked about with Handlers, where the view elements might return a Null Pointer Exception.</p>
<p>The 3 generic types that are used by the AsyncTask make it very flexible, as well.</p>
<p><strong>So, how do I use it?</strong></p>
<p>Using the AsyncTask, is even easier than implementing one.  All you do is call &#8220;execute()&#8221; on your task.</p>
<div class="codecolorer-container java default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="java codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">MyAsyncTask<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #006633;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></div>
<p>You don&#8217;t have to make any calls to the 4 steps mentioned above&#8230;calling &#8220;execute()&#8221; will do all of that for you.</p>
<p>I recommend waiting to execute your task until your view has been loaded.  That means, normally you can execute that task as early as in your &#8220;onResume()&#8221; callback.</p>
<p>However, you may have other dependencies, like a database connection or a service connection, that require you to wait until that connection is established.  In those cases, I recommend using a <a href="http://developer.android.com/reference/android/content/BroadcastReceiver.html" >BroadcastReceiver </a>and executing your task once that receiver is called.</p>
<p>If you find yourself struggling with finding the right time to execute your task, or perhaps you have multiple tasks getting chained together, or maybe you have implemented some handlers to execute tasks (or vice versa), you should consider looking at one of the many <a href="http://developer.android.com/guide/topics/fundamentals/services.html" >Android Service</a> types.  I will cover services in the next post.</p>
<p>Android Thread Series:</p>
<ol>
<li><a title="Too many options for Android threads?  Let me help!" href="http://www.sep.com/mcterry/2011/07/28/too-many-options-for-android-threads-let-me-help/">Overview</a></li>
<li><a title="Android Handler, in a nutshell..." href="http://www.sep.com/mcterry/2011/08/05/android-handler-in-a-nutshell/" >Handlers</a></li>
<li><a title="Android AsyncTasks, for updating your UI" href="http://www.sep.com/mcterry/2012/03/11/android-asynctasks-for-updating-your-ui/" >AsyncTasks</a></li>
<li>Services and Messengers</li>
<li>Conclusion</li>
</ol>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2012/03/11/android-asynctasks-for-updating-your-ui/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Which Is Worth More, Education or Skills?</title>
		<link>http://www.sep.com/mcterry/2012/03/10/which-is-worth-more-education-or-skills/</link>
		<comments>http://www.sep.com/mcterry/2012/03/10/which-is-worth-more-education-or-skills/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 04:53:34 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[Recruiting]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=434</guid>
		<description><![CDATA[In a previous post, I talked about what skills I look for in our new hires at Software Engineering Professionals. But what happens if you have all of those skills, but don&#8217;t have a formal education? When the question comes down to which matters most — skills or education — we have to break it [...]]]></description>
			<content:encoded><![CDATA[<p>In a previous post, I talked about <a title="Skills that I Look for in a Software Engineer" href="http://www.sep.com/mcterry/2012/02/15/skills-that-i-look-for-in-a-software-engineer/" >what skills I look for</a> in our new hires at Software Engineering Professionals. But what happens if you have all of those skills, but don&#8217;t have a formal education?</p>
<p>When the question comes down to which matters most — skills or education — we have to break it down a bit more. It&#8217;s hard to downplay one or the other; obviously a balance is good.</p>
<p>We don&#8217;t specialize in one technology or one product here at <a title="My Company" href="http://www.sep.com/mcterry/my-company/" >Software Engineering Professionals</a>. In fact, I have already mentioned that <a title="Variety is not an option…" href="http://www.sep.com/mcterry/2011/03/11/variety-is-not-an-option/" >variety is not an option; it&#8217;s a requirement</a>. If you don&#8217;t have a good foundation for learning new things, it would be difficult to keep up with the variety at SEP.</p>
<p>In the book <a title="My Recommendations" href="http://www.sep.com/mcterry/my-recommendations/">Apprenticeship Patterns</a>, the author focuses a lot on how to &#8220;empty your cup&#8221; and learn new things.  This is where education plays a role.  Education is a great foundation for you to fall back on.  Most colleges/universities require you to take many classes that are not related to your core focus &#8211; software development.  I studied <a title="About Me" href="http://www.sep.com/mcterry/about/">Computer Engineering</a> in college, and I really only knew one programming-language before I started working here. But if I hadn&#8217;t pursued the education I did, it would have been harder for me to learn new things and understand the new technologies I&#8217;ve learned since joining SEP.</p>
<p><span id="more-434"></span></p>
<p>Formal education won&#8217;t get you everywhere, but it&#8217;s certainly a good basis for learning new things. There is a lot of professional maturing that happens once you enter into the workforce, but being in school to build that foundation and learning how to learn is the most important first step.</p>
<p>So in the matter of skills versus education, I say that both are important&#8230;but education comes in first.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2012/03/10/which-is-worth-more-education-or-skills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to improve your entire team – Practice Positive…</title>
		<link>http://www.sep.com/mcterry/2012/03/07/how-to-improve-your-entire-team-practice-positive/</link>
		<comments>http://www.sep.com/mcterry/2012/03/07/how-to-improve-your-entire-team-practice-positive/#comments</comments>
		<pubDate>Thu, 08 Mar 2012 03:25:55 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[SEP Project Management]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=385</guid>
		<description><![CDATA[I recently watched a video from TED Talks about happiness and productivity.  If you haven&#8217;t seen the video &#8220;The Happy Secret to Better Work&#8221;, by Shawn Achor, then take 13 minutes to watch it&#8230;I&#8217;ll wait. Okay, I hope you enjoyed the video.  That video inspired me to write this post.  For those of you that [...]]]></description>
			<content:encoded><![CDATA[<p>I recently watched a video from <a href="http://www.ted.com/" >TED Talks</a> about happiness and productivity.  If you haven&#8217;t seen the video <a href="http://www.ted.com/talks/shawn_achor_the_happy_secret_to_better_work.html" >&#8220;The Happy Secret to Better Work&#8221;, by Shawn Achor</a>, then take 13 minutes to watch it&#8230;I&#8217;ll wait.</p>
<p>Okay, I hope you enjoyed the video.  That video inspired me to write this post.  For those of you that know me, I&#8217;m an eternal optimist &#8211; I try to find the positive in everything.  For me, to learn that there is research that supports focusing on the positive is great.</p>
<p><strong>Re-live Positive Experiences<br />
</strong>Shawn recommends journaling about at least 1 positive experience each day, so that your brain can re-live those experiences.  According to Shawn&#8217;s research, your brain performs significantly better when you are being positive &#8211; you are 31% more productive.</p>
<p>Imagine if an entire team was sharing positive experiences, and the entire team was re-living each of those experiences.  This could drastically change the productivity of the entire team.  And by doing so, we can create ripples of positivity and productivity.</p>
<p><span id="more-385"></span></p>
<p><strong>Finding Positive<br />
</strong>If you have a lesson-learned that you would like to share, talk about it as if it is a fact (it is history, after all), and try to avoid stirring up unnecessary emotions from the past.  Instead, talk about what you learned, or how you overcame the issue.  It&#8217;s easier to find the positive when you focus on what you learned, instead of the problem.</p>
<p>Another approach is to try and &#8220;right-size&#8221; the problems.  <a href="http://www.huffingtonpost.com/mark-nepo/book-of-awakening_b_1127755.html" >Mark Nepo has a neat story</a> about right-sizing your problems - a handful of salt in a glass of water, the water tastes salty; whereas, a handful of salt in a lake, the water tastes fresh. When you right-size the problem, you realize that it isn&#8217;t the end of the world, and it is easier to find the positive.</p>
<p><strong>How to Practice Positive</strong><br />
Let&#8217;s take baby steps.  Start by talking about something positive that happened earlier that day, or the previous day, so that the entire team can re-live that positive experience.</p>
<p>If your team meets on a regular basis, <a href="http://www.sep.com/mcterry/2010/03/10/stand-up-meetings-are-more-popular-than-i-thought/" >like a stand-up meeting</a>, perhaps you can recommend that each person shares a positive experience.</p>
<p>I am going to channel &#8220;Amy-the-unicorn&#8221;, and start practicing positive&#8230;what about you?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2012/03/07/how-to-improve-your-entire-team-practice-positive/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Are Certifications Old News?</title>
		<link>http://www.sep.com/mcterry/2012/03/03/are-certifications-old-news/</link>
		<comments>http://www.sep.com/mcterry/2012/03/03/are-certifications-old-news/#comments</comments>
		<pubDate>Sat, 03 Mar 2012 06:23:07 +0000</pubDate>
		<dc:creator>Matt Terry</dc:creator>
				<category><![CDATA[Recruiting]]></category>

		<guid isPermaLink="false">http://www.sep.com/mcterry/?p=383</guid>
		<description><![CDATA[As people try to get recognized, certified, and prove their skills&#8230;it can still be difficult to convince your peers, potential employers, and fellow industry people that you can walk-the-walk. One way to show that you are capable in a certain skill-set is to get a certification.  Of course, there are plenty of discussions already about [...]]]></description>
			<content:encoded><![CDATA[<p>As people try to get recognized, certified, and prove their skills&#8230;it can still be difficult to convince your peers, potential employers, and fellow industry people that you can walk-the-walk.</p>
<p>One way to show that you are capable in a certain skill-set is to get a certification.  Of course, there are plenty of discussions already about the value of these certifications.  And besides, how do you <em>_really_ </em>prove that you have this certification?</p>
<p>Well, <a href="https://wiki.mozilla.org/Badges" >Mozilla&#8217;s solution</a> to this problem is similar to merit badges, but with a secure infrastructure around it.</p>
<blockquote><p>Learning today happens everywhere. But it&#8217;s often difficult to get recognition for skills and achievements that happen online or out of school.  Mozilla Open Badges helps solve that problem, making it easy for any organization to issue, manage and display digital badges across the web.</p></blockquote>
<p>However, will this catch on?  Can these badges be standardized?</p>
<p><span id="more-383"></span></p>
<p><strong>It’s already happening</strong><br />
Of course they can, especially in an industry with a long history of standardizing certifications. We already see this in the knowledge industry&#8230;we have had certifications as long as I can remember.</p>
<p>So the idea of a standardized approach for recognition isn&#8217;t new.  However, what <em>_is_ </em>new is that this type of infrastructure makes use of gamification to recognize, motivate, and award people.  Instead of simply rewarding you with a piece of paper, and sometimes adding some cool acronyms after your name, you can now display your badges wherever you want!</p>
<p>&lt;tangent&gt;<br />
For the record&#8230;gamification isn’t new either.  <a href="http://joeystrawn.com/category/gamification-3/" >Joey Strawn</a> has been talking about gamification for a while (and has lots of good articles about it, too).</p>
<p>Companies have been successfully using <a href="http://mygamification.com/2012/gamification-of-beer-friday/" >simple gamification techniques</a> in order to motivate customers to return to their shop/restaurant.  Just think of all those loyalty cards, stamps, and contests that your favorite restaurants have!</p>
<p>Also, you may recognize a website where <a href="http://www.codinghorror.com/blog/2011/10/the-gamification.html" >Joel and Jeff (from codinghoror) used gamification</a> to innovate the industry back in 2008 as well. *cough* Stack Overflow *cough*<br />
But let’s save gamification for a different blog post, at a different time, I have enough to talk about already here!<br />
&lt;/tangent&gt;</p>
<p><strong>Certificates are already a big deal</strong><br />
You can get CompTIA A+ certified for PC support. <a href="http://www.brainbench.com/" >IEEE offers Brainbench exams</a> for its members to earn certificates in a number of areas, from design and media to databases and programming languages. Microsoft Certification is another huge one&#8230;I&#8217;m lucky to be sitting right next to a <a href="http://myotherpants.com/" >Microsoft Certified Professional Developer</a> at work every day.</p>
<p>My point is&#8230;there are already plenty of examples of companies and organizations offering proof of knowledge, or a level of experience&#8230;and some of those certifications are pretty elite! (For the record, there aren&#8217;t many developers with the<a href="http://www.linkedin.com/groups?groupDashboard=&amp;gid=698427&amp;trk=anet_ug_anlytx" > MCPD certification</a>.)</p>
<p><strong>So why Merit Badges?</strong><br />
Merit badges are a likely next step for standardization. Instead of having a formalized certificate that most people file away and never show (except for a line on a résumé), you&#8217;d have an iconic, graphical merit badge that&#8217;s simple to display and also better visually communicates what you&#8217;ve accomplished. Show them on a visual résumé, or display them on a personal website. Maybe even LinkedIn could let users start including badges on their personal profiles (similar to the group icons already).  And heck, maybe even motivate people to keep learning!</p>
<p>How cool would that be?</p>
<p>Admittedly, standardization will take work.  Especially as the knowledge industry grows and changes. New certifications are already added rapidly as technology changes, so creating and certifying badges can probably be part of the same process. The important thing is that the association responsible for administering the certifications/badges also offers some kind of guarantee that if someone uses it, they actually do have that badge.</p>
<p>We will just have to see how Mozilla handles the &#8220;guaranteed&#8221; part of it.</p>
<p><strong>Differentiation is important</strong><br />
These badges could also help differentiate yourself from others.  Let&#8217;s face it, doesn&#8217;t everyone have Microsoft Office listed on their résumé?  Couldn&#8217;t we all join the same LinkedIn groups/associations?  These badges would be a way to differentiate.</p>
<p>I really like what Mozilla is doing with the badges.  I hope it catches on, and I really hope the badges can become the new standard.<br />
I hope it goes above a standard, and encourages all of us to continue learning!</p>
<p>What are you waiting for?  Head over to <a href="http://openbadges.org" >Open Badges</a> now, and earn some badges!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/mcterry/2012/03/03/are-certifications-old-news/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>On Recognizing Good People</title>
		<link>http://www.sep.com/crtippett/2012/03/02/on-recognizing-goodpeople/</link>
		<comments>http://www.sep.com/crtippett/2012/03/02/on-recognizing-goodpeople/#comments</comments>
		<pubDate>Fri, 02 Mar 2012 22:09:00 +0000</pubDate>
		<dc:creator>crtippett</dc:creator>
				<category><![CDATA[SEP Project Management]]></category>

		<guid isPermaLink="false">http://www.sep.com/crtippett/?p=18</guid>
		<description><![CDATA[As a leader, recognizing good people for their work and effort is both the most important and most difficult things that you can do. I learned this during my time in the Army and have carried it through my life for the past ~16 years. As a leader you must earn the trust of those [...]]]></description>
			<content:encoded><![CDATA[<p>As a leader, recognizing good people for their work and effort is both the most important and most difficult things that you can do. I learned this during my time in the Army and have carried it through my life for the past ~16 years.</p>
<p>As a leader you must earn the trust of those who you entrust to do the day to day work. Trust must first be given before you can expect to receive trust in return. Gaining trust has a fairly simple formula:</p>
<ul>
<li>Let your actions speak      for themselves</li>
<li>Hold yourself to a      higher standard than you hold those who work for you to</li>
<li>Never ask them to do      anything that you wouldn&#8217;t do yourself</li>
<li>Nurture them</li>
<li>Give honest feedback</li>
<li>Reward them</li>
</ul>
<p>Rewarding your people starts with honest feedback. Congratulate them for a job well done. Words of praise go quite a long way. Rewarding your people, however, is an interesting double edged sword. Reward too much and you make it commonplace. Reward too little and they feel unappreciated.</p>
<p>I have struggled with rewards over the years. I expect a lot out of people who work for me. I hold them to high standards. Each and every person who works for me has met or exceeded my standards. They are some of the best people that I have ever had the honor of working with / for. With holding people to high standards, rewarding them becomes difficult. Even the amazing becomes commonplace and an expectation after a while.</p>
<p>When I returned from my hiatus in January I realized that I had a problem. It took me a while to see the root cause of the problem but the symptom was as plain as day:<em> I did not have a way to reward the people who worked for me</em>.  The problem, as I realized after a few weeks of working on the symptom, was that I now had a significant number of people working directly for me ~24.</p>
<p>As I worked to figure out the root cause of the problem I decided that I would address the symptom as a stopgap measure. The stopgap measure, which turned out to be the right answer, was to create a simple currency: Pieces of Charles™. (Not my choice on the name) They have a humorous design (see below) and aren’t really worth much other than the fact that they are a symbol of recognition. Recognition of greatness is a powerful thing.</p>
<p>I realized that I couldn’t reward people anymore because I could not see what they were doing to the same degree that I could before. I did not have that insight due to the sheer number of people that I was working with. So, I print-minted 70 of the Pieces of Charles™ and handed them out to the only people who really could see the day to day MOGs: the team leads. Pieces of Charles™ were to be given out as on-the-spot rewards for moments of greatness (MOGs).  I empowered the team leads to reward the extraordinary, and they have. I have also empowered the teams to let me know if there is someone going above and beyond so that I can recognize them as well. It has worked out surprisingly well.</p>
<p>Now, I know when people are doing great. I know the people who are exhibiting the behaviors we want to encourage. I know that my team leads are able to reward those who need it.</p>
<p>You may be curious as to what would warrant a Pieces of Charles™ and I will provide several instances where people have shined below but this is not an exhaustive list:</p>
<ul>
<li>Trevon Sutton – He has worked tirelessly on making the client better and raising the bar for testing in general at the client site. He has put in a significant number of extra hours as well as his own free time to this effort. He is one of the clients main go-to guys now for testing.</li>
<li>Trevon Sutton &amp; Chris Pierce – These gentlemen have created a testing framework which will help the client to handle internationalization issues for a product which already has several thousand tests written against it. The majority of this work was done on their own time.</li>
<li>Chris Pierce &amp; Allen Cummings – These gentlemen have worked incredibly long hours with the client to fix a broken network over the past two months. They have done this in addition to their regular work, resulting in long hours and difficult product deliveries for the team.</li>
<li>Jen Dillon – She has helped the client to improve their traceability from requirements to test. In this effort she presented her findings, defended her results, and provided a good path forward to members of management at the client which were several levels above where we normally step. I was in the meetings and the questions directed to her were extremely direct and at times callous. She acquitted herself well as both an engineer and as a SEP employee.</li>
</ul>
<p>Throughout all of this the teams have continued to do great and in fact may be doing a little bit better than before. The weather ahead looks good.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sep.com/crtippett/2012/03/02/on-recognizing-goodpeople/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

