<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8902414917462363900</id><updated>2012-01-13T21:19:06.001-08:00</updated><category term='reading'/><category term='management'/><title type='text'>Logan's Rings</title><subtitle type='html'>Software Development and Me, Logan's Dad</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default?start-index=101&amp;max-results=100'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4636265799582988224</id><published>2012-01-09T21:38:00.000-08:00</published><updated>2012-01-09T20:46:46.812-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>To make things more complicated, the actual objects and classes that participate in a pattern almost always participate in other patterns at the same time.  Focus on it one way, and it looks like one thing; change your focus, and it looks like something else. - Allen Holub in &lt;i&gt;Holub on Patterns, Learning Design Patterns by Looking at Code&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4636265799582988224?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4636265799582988224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4636265799582988224&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4636265799582988224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4636265799582988224'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2012/01/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4013623359083605072</id><published>2012-01-05T19:33:00.000-08:00</published><updated>2012-01-05T19:35:47.274-08:00</updated><title type='text'>Goals 2012</title><content type='html'>I'm getting an earlier start on my goals this year.  I'd like to focus on my development skills primarily, but continue with problem solving.&lt;br /&gt;&lt;br /&gt;So, in 2012 I will ...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1. Become a Certified Spring Professional&lt;/span&gt;&lt;br /&gt;I've taken the training, read a couple of books and written a small web app in Spring so this should be doable in the first part of the year.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Read 6 software development related books&lt;/span&gt;&lt;br /&gt;I've already got that many in my "to read" stack and I'll continue with the Wingdings book club.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Convert my "broken toy" library app to Ruby&lt;/span&gt;&lt;br /&gt;I been wanted to get started with Ruby but I got sidetracked with Groovy and Spring.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Create a new "broken toy" app to help me keep track of the anniversaries and birthdays of my family and friends&lt;/span&gt;&lt;br /&gt;This is one that I didn't get to last year.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Write two blog posts a month &lt;/span&gt;&lt;br /&gt;This is a bit conservative based on last years total, but I'd like to spend more time on my skills. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6. Take some sort of multi-day software development training&lt;/span&gt;&lt;br /&gt;This will be a reoccurring goal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4013623359083605072?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4013623359083605072/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4013623359083605072&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4013623359083605072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4013623359083605072'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2012/01/goals-2012.html' title='Goals 2012'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5807456866908109907</id><published>2012-01-05T19:08:00.000-08:00</published><updated>2012-01-05T19:20:56.967-08:00</updated><title type='text'>Goals 2011 Review</title><content type='html'>Well, it's Goals Review time again!  I had 5 stated goals for 2011...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011 Goal 1: Read 5 software development related books&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was a little less ambitious with books in 2011 but that proved to be unnecessary.  I joined a &lt;a href="http://tech.groups.yahoo.com/group/wingding/"&gt;book club&lt;/a&gt; and that helped to push my total to 11:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/02/design-of-everyday-things.html"&gt;The Design of Everyday Things&lt;/a&gt; - Donald Norman&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/08/driving-technical-change.html"&gt;Driving Technical Change&lt;/a&gt; - Terrence Ryan&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/12/exploring-requirements-quality-before.html"&gt;Exploring Requirements: Quality Before Design&lt;/a&gt; - Donald C. Gause and Gerald M. Weinberg&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/12/inmates-are-running-asylum.html"&gt;The Inmates Are Running the Asylum&lt;/a&gt; - Alan Cooper&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/12/java-good-parts.html"&gt;Java: The Good Parts&lt;/a&gt; - Jim Waldo&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/04/pragmatic-thinking-and-learning.html"&gt;Pragmatic Thinking and Learning&lt;/a&gt; - Andy Hunt&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/06/psychology-of-computer-programming.html"&gt;The Psychology of Computer Programming&lt;/a&gt; - Gerald M. Weinberg&lt;br /&gt;&lt;br /&gt;Rest In Practice - Jim Webber, Savas Parastatidis, Ian Robinson&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/11/soul-of-new-machine.html"&gt;The Soul Of a New Machine&lt;/a&gt; - Tracy Kidder&lt;br /&gt;&lt;br /&gt;Spring In Action, Third Edition - Craig Walls&lt;br /&gt;&lt;br /&gt;&lt;a href="http://logansrings.blogspot.com/2011/10/working-effectively-with-legacy-code.html"&gt;Working Effectively with Legacy Code&lt;/a&gt; - Michael Feathers&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011 Goal 2: Convert my "broken toy" library app to use Hibernate and Spring&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes.  I created 2 new projects: 1 based on Hibernate, and another based on Spring and Hibernate.  I enjoyed learning about the abstractions in these frameworks and I especially enjoyed removing much of the boilerplate/plumbing code I previously wrote.  I feel like I've just scratched the surface though, especially as I read the Spring In Action book - each chapter gave me new implementation ideas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011 Goal 3: Create a new "broken toy" app to help me keep track of the anniversaries and birthdays of my family and friends&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nope.  This will have to be carried forward into 2012.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011 Goal 4: Write two blog posts a month&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Looks like I had a lot to say in 2011, as I created 61 posts!  That's almost double my total from 2010.  A couple of my favorites:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://logansrings.blogspot.com/2011/02/solving-problems-with-software.html"&gt;Solving Problems (with software) &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://logansrings.blogspot.com/2011/07/solving-problems-vs-creating-solutions.html"&gt;Solving Problems vs. Creating Solutions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2011 Goal 5: Take some sort of multi-day software development training&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes. I took the &lt;a href="http://logansrings.blogspot.com/2011/03/dry-socs.html"&gt;Core Spring&lt;/a&gt; course, and attended the &lt;a href="http://logansrings.blogspot.com/2011/07/uber-conference-2011.html"&gt;Uber Conference&lt;/a&gt;.&lt;br /&gt; &lt;br /&gt;One of my unwritten goals for 2011 was to continue pursuing a career that feeds my passion for problem solving, and I was able to further that goal by starting a new developer position.&lt;br /&gt;&lt;br /&gt;I'm happy with what I was able to accomplish in 2011.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5807456866908109907?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5807456866908109907/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5807456866908109907&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5807456866908109907'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5807456866908109907'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2012/01/goals-2011-review.html' title='Goals 2011 Review'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3665695857064848573</id><published>2011-12-21T22:10:00.000-08:00</published><updated>2011-12-21T22:32:04.020-08:00</updated><title type='text'>Exploring Requirements: Quality Before Design</title><content type='html'>&lt;i&gt;Exploring Requirements: Quality Before Design&lt;/i&gt; by Donald C. Gause and Gerald M. Weinberg is about "the requirements process--the part of development in which people attempt to discover what is desired."  It's a comprehensive look at the process and the ubiquitous ambiguity that makes it extremely difficult and error prone.  The book, over two decades old but still relevant and practical,  presents tips and tools to ensure quality requirements.&lt;br /&gt;&lt;br /&gt;The book will change the way that you look at requirements.  It uses subtle humor and common sense to present and reinforce ideas.  It's not a technical book and has something for everyone involved in product development.&lt;br /&gt;&lt;br /&gt;The book is full of simple but important points:&lt;br /&gt;&lt;blockquote&gt;Development is the process of transforming someones desires into a product that satisfies those desires.&lt;br /&gt;&lt;br /&gt;The art of requirement process is not so much to provide answers as to raise new questions.&lt;br /&gt;&lt;br /&gt;Instead of trying to compete ... on a feature-by-feature comparison ... identify the functions that will be needed to compete.&lt;br /&gt;&lt;br /&gt;No single failure of requirements work leads to more lawsuits than the confident declaration, " No sane person would do &lt;i&gt;that&lt;/i&gt;!"&lt;br /&gt;&lt;br /&gt;Almost any real project, no matter how well planned and managed, contains a certain amount of hacking, because the real world always plays tricks on our assumptions.&lt;/blockquote&gt;&lt;br /&gt;The book is good at pointing out some of the more subtle parts of the process.  For example, the types of requirements decisions:&lt;blockquote&gt;&lt;ol&gt;&lt;li&gt;Choices - made directly and consciously&lt;/li&gt;&lt;li&gt;Assumptions - made unconsciously through bias, error, or lack of information&lt;/li&gt;&lt;li&gt;Impositions  - forced by law, custom, or higher-authority&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;br /&gt;The requirements process begins with ambiguity. Gradually the ambiguity is removed, clarified, and/or constrained.  Even though not all ambiguity can be removed, at some point "you decide you have enough agreement to move on into the design phase."  This book will help you confidently deal with ambiguity and move on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3665695857064848573?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3665695857064848573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3665695857064848573&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3665695857064848573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3665695857064848573'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/exploring-requirements-quality-before.html' title='Exploring Requirements: Quality Before Design'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2111763128515728845</id><published>2011-12-20T21:02:00.000-08:00</published><updated>2011-12-20T21:23:49.939-08:00</updated><title type='text'>The Inmates Are Running the Asylum</title><content type='html'>Alan Cooper is one of my favorite writers because he forces me to think, and think, and think.  I reread his book &lt;a href="http://www.cooper.com/journal/2004/06/2nd_edition_foreword_excerpt_t.html"&gt;&lt;i&gt;The Inmates Are Running the Asylum&lt;/i&gt;&lt;/a&gt; because I'm looking for better ways to develop and this book is full of better ways.&lt;br /&gt;&lt;br /&gt;The book's premise is that software development is broken because the technologists are in control.  Not because the technologist have seized control, but because the industry has abdicated to the programmers the responsibility of what to develop:&lt;br /&gt;&lt;blockquote&gt;In the past, executives assumed that interaction design was a programming problem and delegated it to programmers who diligently tried to solve the problem even though their skills, training, mindset and work schedule prevented them from succeeding.&lt;br /&gt;&lt;br /&gt;The intractability of the software-construction process - particularly the high cost of programming and the low quality of interaction - is simply not a technical problem.  It is the result of business practices imposed on a discipline - software programming - for which they are obsolete. With pure hearts, the best of intentions, and the blessing of upper management, programmers attempt to fix this problem by engineering even harder. But more or better engineering cannot solve these problems.&lt;br /&gt;&lt;br /&gt;Programmers are not given sufficient time, clear enough direction, or adequate designs to enable them to succeed. These three things are the responsibility of business executives, and they fail to deliver them for preventable reasons.&lt;br /&gt;&lt;br /&gt;We can create powerful and pleasurable software-based products by the simple expedient of &lt;i&gt;designing&lt;/i&gt; our computer-based products before we build them.  Contrary to the popular belief, we are not already doing so. Designing interactive, software-based products is a specialty as demanding as constructing them. &lt;/blockquote&gt;&lt;br /&gt;The book's theme is that interactive products need a specialized design process and that the quality of software will improve by focusing initially on interaction design, which is not the same as interface design:&lt;br /&gt;&lt;blockquote&gt;...interaction design refers to the selection of behavior, function, and information and their presentation to users.&lt;br /&gt;&lt;br /&gt;[Cooper] prefer[s] the term "interaction design" over the term "interface design" because interface suggests that you have code over here, people over there, and an interface in between that passes messages between them.  It implies that only the interface is answerable to the users' needs.&lt;br /&gt;&lt;br /&gt;Interaction designers work from the outside in, starting from the goals the user is trying to achieve, with an eye toward the broader goals of the business, the capabilities of the technology, and the component tasks.&lt;br /&gt;&lt;br /&gt;Things important for an interaction designer: a strong understanding of what programmers actually do, understanding of interaction design principles and methods, along with a taxonomy for understanding their users.&lt;/blockquote&gt;&lt;br /&gt;This book is one of my all-time favorites.  It is riveting, entertaining, informative and thought-provoking.  &lt;br /&gt;&lt;br /&gt;The forwards (there are two) are excellent at setting the context for the book and should be required reading for everyone in the software development field.&lt;br /&gt;&lt;br /&gt;My favorite chapter is the first, &lt;i&gt;Riddles For the Information Age&lt;/i&gt;, which explores and answers the question of what happens when you cross a computer with anything else.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2111763128515728845?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2111763128515728845/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2111763128515728845&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2111763128515728845'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2111763128515728845'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/inmates-are-running-asylum.html' title='The Inmates Are Running the Asylum'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5859084000479804569</id><published>2011-12-16T21:27:00.000-08:00</published><updated>2011-12-19T14:01:35.902-08:00</updated><title type='text'>The Customer Isn't King</title><content type='html'>In &lt;a href="http://www.noop.nl/2011/06/the-purpose-of-a-business-is-not-customer-value.html"&gt;&lt;i&gt;The Purpose of a Business is NOT Customer Value&lt;/i&gt;&lt;/a&gt; Jurgen Appelo presents an interesting contrarian view:&lt;br /&gt;&lt;blockquote&gt;Most fads and panaceas ignore that a business is a social complex system. It’s purpose is not to satisfy only shareholders, or only customers, or only employees, or only the local community.&lt;br&gt;&lt;br&gt;A business must satisfy everyone!&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5859084000479804569?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5859084000479804569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5859084000479804569&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5859084000479804569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5859084000479804569'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/customer-isnt-king.html' title='The Customer Isn&apos;t King'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-9002343786696735160</id><published>2011-12-12T21:16:00.000-08:00</published><updated>2011-12-12T21:16:00.077-08:00</updated><title type='text'>Java: The Good Parts</title><content type='html'>&lt;i&gt;Java: The Good Parts&lt;/i&gt; by Jim Waldo is an easy read and I was able to complete it in multiple short sessions.  I like and agree with the author's description of the intent of the book as "not to teach you completely new things, but to remind you of things that you already knew but may have forgotten, or to get you to see things that you had already thought about in a new light."&lt;br /&gt;&lt;br /&gt;Because the author is a Distinguished Engineer with Sun Microsystems he is able to provide some interesting context as to the why's and how's of Java.&lt;br /&gt;&lt;br /&gt;The book describes the types of projects that Java is good for and details the following "good parts":&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;The Type System&lt;/li&gt;&lt;li&gt;Exceptions&lt;/li&gt;&lt;li&gt;Packages&lt;/li&gt;&lt;li&gt;Garbage Collection&lt;/li&gt;&lt;li&gt;The Java Virtual Machine&lt;/li&gt;&lt;li&gt;Javadoc&lt;/li&gt;&lt;li&gt;Collections&lt;/li&gt;&lt;li&gt;Remote Method Invocation and Object Serialization&lt;/li&gt;&lt;li&gt;Concurrency&lt;/li&gt;&lt;li&gt;The Developer Ecology&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;br /&gt;I especially like the chapter on Concurrency and the author's "gentle introduction to concurrency in the Java environment".  Some food for thought:&lt;br /&gt;&lt;blockquote&gt;Concurrent programming is the next frontier for languages and software engineering. Because of the advent of multicore systems, those of us who used to be able to ignore concurrent programming will no longer have that option. We are going to have to understand concurrency, and over time, we will no doubt invent idioms and practices that will make the programming of concurrent systems easier and more stylized. Until that happens, though, it is good to have a language and environment that you can trust to do the right thing if you have written the right program. Java may not have the ultimate answer to writing with multiple threads, but it has an answer that you can use to your advantage to deal with the new chips. That by itself makes this one of the good parts.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-9002343786696735160?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/9002343786696735160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=9002343786696735160&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/9002343786696735160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/9002343786696735160'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/java-good-parts.html' title='Java: The Good Parts'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5300817380230544927</id><published>2011-12-12T21:06:00.000-08:00</published><updated>2011-12-12T21:06:00.094-08:00</updated><title type='text'>Why Software Projects Collapse</title><content type='html'>In &lt;a href="http://www.itmpi.org/assets/base/images/itmpi/privaterooms/robertcharette/FAILURE.pdf"&gt;Sowing the Seeds of Failure: Understanding Why Software Projects Collapse&lt;/a&gt; Robert N. Charette takes a look at software project failures, including Denver Airport's failed baggage handling system, and offers sage advice for avoiding future failures.&lt;br /&gt;&lt;br /&gt;The article is concise and makes some excellent points:&lt;br /&gt;&lt;blockquote&gt;&lt;ul&gt;&lt;li&gt;Any software project can be make to be late, over-budget, and technically unsound by simply not providing the requisite time, resources or specifications. There is no complicated trick involved - one out of the three will suffice.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Virtually all large software projects are unprecedented - meaning they have &lt;i&gt;never&lt;/i&gt; been done before. They are in fact existence proofs, with high likelihoods of failure.  Successful projects are always aware of this.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;...software is a means to an end, and not the end itself...software is being used because there is no other way to accomplish a project's objectives at a reasonable  cost, in a reasonable period, with acceptable performance and reliability, and the flexibility to grow...software is in effect the choice of last resort&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In failed efforts, developing the software is frequently regarded by key decision-makers as not particularly difficult, from either a technical or managerial perspective.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Not admitting what you don't know, as well as not being able to reverse decisions in the face of refuting information, are the call signs of imminent project failure.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Projects that collapse fail to recognize that a plan is nothing more than a hypothesis, a (hopefully) educated guess about what is expected to occur over the future , &lt;i&gt;if&lt;/i&gt; the assumptions at each point in time do not change.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Successful projects understand that decision uncertainty is not a risk, but a problem that must be worked everyday.&lt;/li&gt;&lt;/ul&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5300817380230544927?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5300817380230544927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5300817380230544927&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5300817380230544927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5300817380230544927'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/why-software-projects-collapse.html' title='Why Software Projects Collapse'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2029497808806091006</id><published>2011-12-09T21:11:00.000-08:00</published><updated>2011-12-09T21:14:40.999-08:00</updated><title type='text'>Counting the Cost of Bad Code</title><content type='html'>A recent Wall Street Journal &lt;a href="http://blogs.wsj.com/tech-europe/2011/12/09/counting-the-cost-of-bad-code-in-business-applications/"&gt;Tech Blog post&lt;/a&gt; takes a look at the hard costs of technical debt and shows that "I.T. Debt" is a growing concern:&lt;br /&gt;&lt;blockquote&gt;It remains to be seen how efforts to affix a certain cost to technical debt can be used to provide a clear guide to business risks. But businesses are starting to pay more attention to the issue....technical debt [is] being raised as a due diligence issue in mergers and acquisitions, and increasing awareness of it is influencing software development practices.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2029497808806091006?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2029497808806091006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2029497808806091006&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2029497808806091006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2029497808806091006'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/counting-cost-of-bad-code.html' title='Counting the Cost of Bad Code'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7504335367352429866</id><published>2011-12-03T10:26:00.000-08:00</published><updated>2011-12-03T10:41:51.989-08:00</updated><title type='text'>Responsive Software Design</title><content type='html'>In a Pragmatic Bookshelf &lt;a href="http://pragprog.com/magazines/2009-09/responsive-design"&gt;article&lt;/a&gt; Kent Beck talks about &lt;i&gt;Responsive Design&lt;/i&gt; and presents some interesting thoughts on software design.&lt;br /&gt;&lt;br /&gt;Software design is difficult to master and it seems like we either fail to do it, or we over do it.  The article does a good job of describing how to get the right mix of design: &lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Design is good. Design is central to effective software development. Programmers can add features steadily to well-designed software. Programmers can easily test well-designed software. Well-designed software is easy to tune for better performance. Most of the hard problems in programming turn out to be design problems.&lt;br /&gt;&lt;br /&gt;But design has a dark side. While there isn’t a single best design for any system, there are many poor designs for that same system. The more experience a programmer has, the more design ideas he knows. The temptation is to put these design ideas in the system now because you just know you’ll need them eventually. Over-designing early leads to delaying feedback from real usage of the system, makes adding features more complicated, and makes adapting the design more difficult. By the same token, under-designing makes adding features more complicated, increases defects, and makes adapting the design more difficult.&lt;br /&gt;&lt;br /&gt;The word “responsive” in the name of the project reflects this need for balance. Some design needs to be done in advance of coding, but over the life of the project most design will be done in response to the changing needs of the system and the changing and growing understanding of the developers. &lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7504335367352429866?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7504335367352429866/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7504335367352429866&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7504335367352429866'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7504335367352429866'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/12/responsive-software-design.html' title='Responsive Software Design'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-887895999099512848</id><published>2011-11-29T22:02:00.000-08:00</published><updated>2011-11-29T22:34:30.323-08:00</updated><title type='text'>Employee and Business Alignment</title><content type='html'>In a recent &lt;a href="http://blog.cutter.com/2011/11/29/a-whole-lot-of-heart-properly-aligned-employees-and-teams/"&gt;Cutter Consortium post&lt;/a&gt; Vince Kellen explores what happens when employees are, and are not, aligned with their roles.&lt;br /&gt;&lt;br /&gt;I've personally struggled with roles that weren't feeding my goals and passions. The post got me thinking about the larger picture where coworkers are struggling as well.&lt;br /&gt;&lt;br /&gt;Some interesting points:&lt;br /&gt;&lt;blockquote&gt;...I have seen all sorts of misalignments between bag A (personal skills, personal ambition and passion, level of effort) and bag B (current work role, future role I would like, my role in society and in this company overall). My sense is that these misalignments are endemic in all work places and are part of the human condition. I also know and have seen, however, that when a personally aligned team is aligned well in the organization, big things happen. These individuals and these teams tend to share a common attribute: a whole lot of heart. They are capable of giving more — much, much more.&lt;br /&gt;&lt;br /&gt;When someone knows well what they are legitimately good at and what they can truly excel at, and when they are deeply passionate about all of this, watch out: anything can happen. These individuals work better and faster, produce better results, and, better still, because of their confidence, tend to work well with others. These people are often the glue that holds the place together. As others around them spin a bit out of control in misalignment or, worse, bust apart like a sliced golf ball, they tend to be a calming influence. These aligned people are intrinsically motivated and, like a gyroscope, stand on their own, more easily absorbing the slings and arrows of outrageous fortunes.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-887895999099512848?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/887895999099512848/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=887895999099512848&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/887895999099512848'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/887895999099512848'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/employee-and-business-alignment.html' title='Employee and Business Alignment'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1056112451054449018</id><published>2011-11-14T21:48:00.000-08:00</published><updated>2011-11-14T22:30:47.693-08:00</updated><title type='text'>Hiring and Programming</title><content type='html'>A post at developerart.com about &lt;a href="http://developerart.com/publications/19/hiring-and-treating-programmers-like-children"&gt;hiring and programming&lt;/a&gt; had me engrossed.  It's comprehensive and elicits both macro and micro thinking.  I really liked this description of why we write software:&lt;blockquote&gt;Besides, coding is not really the ultimate goal. We're not here to write the breathtaking code. We're not here to explore all of the hidden gems of some technology. We're not here to design a perfect bullet-proof architecture to accommodate for any future requirements in the next 50 (better 70) years. We've gathered together to develop software, to create a product, to solve specific problems and satisfy customers....One has to be able to simultaneously exist in several dimensions. In code when we're programming. In the needs and requirements we're programming for. In the mind of the users whose requirements we're putting in code. And also think of many other social, marketing and organizational aspects. Beyond code there are business processes, certain user experience. Don't forget usability. One has to see the big picture to excel. That special skill is however very difficult to check for when interviewing a candidate but it may happen to be even more important than coding skills or the advanced all-penetrating knowledge of the technology in use.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1056112451054449018?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1056112451054449018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1056112451054449018&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1056112451054449018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1056112451054449018'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/hiring-and-programming.html' title='Hiring and Programming'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1364117369676174727</id><published>2011-11-10T21:15:00.000-08:00</published><updated>2011-11-10T21:17:00.681-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>Pay special attention to how a project begins because that's where the design tree is rooted.  Right at the beginning is the easiest place to slip into major false assumptions, so learn to develop the habit to scrutinizing your starting point. - Donald C. Gause and Gerald M. Weinberg in &lt;i&gt;Exploring Requirements: Quality Before Design&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1364117369676174727?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1364117369676174727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1364117369676174727&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1364117369676174727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1364117369676174727'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7109503008245748116</id><published>2011-11-07T21:53:00.000-08:00</published><updated>2011-11-07T21:53:08.726-08:00</updated><title type='text'>Don't Call Yourself A Programmer, And Other Career Advice</title><content type='html'>Good &lt;a href="http://www.kalzumeus.com/2011/10/28/dont-call-yourself-a-programmer/"&gt;software development career advice&lt;/a&gt; from Patrick McKenzie, who blogs about the business aspects of running a software company.  Wish I had this 20 years ago!&lt;br/&gt;&lt;br/&gt;Some points I like:&lt;blockquote&gt;Most software is not sold in boxes, available on the Internet, or downloaded from the App Store.  Most software is boring one-off applications in corporations, under-girding every imaginable facet of the global economy.  It tracks expenses, it optimizes shipping costs, it assists the accounting department in preparing projections, it helps design new widgets, it prices insurance policies, it flags orders for manual review by the fraud department, etc etc.  &lt;i&gt;Software solves business problems&lt;/i&gt;...despite being &lt;i&gt;soul-crushingly boring&lt;/i&gt; and of &lt;i&gt;minimal technical complexity&lt;/i&gt;...it only matters that [the software] either saves the company costs or generates additional revenue.&lt;/blockquote&gt;&lt;blockquote&gt;Businesses do things for irrational and political reasons all the time, but in the main they converge on doing things which increase revenue or reduce costs.&lt;/blockquote&gt;&lt;blockquote&gt;The person who has decided to bring on one more engineer is not doing it because they love having a geek around the room, they are doing it because adding the geek allows them to complete a project (or projects) which will add revenue or decrease costs.  Producing beautiful software is not a goal.  Solving complex technical problems is not a goal.  Writing bug-free code is not a goal.  Using sexy programming languages is not a goal.  Add revenue.  Reduce costs.  Those are your only goals.&lt;/blockquote&gt;&lt;blockquote&gt;...describe yourself by what you have accomplished for previously employers vis-a-vis increasing revenues or reducing costs.  If you have not had the opportunity to do this yet, describe things which suggest you have the ability to increase revenue or reduce costs, or ideas to do so.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7109503008245748116?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7109503008245748116/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7109503008245748116&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7109503008245748116'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7109503008245748116'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/dont-call-yourself-programmer-and-other.html' title='Don&apos;t Call Yourself A Programmer, And Other Career Advice'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3828504719709313632</id><published>2011-11-03T21:59:00.000-07:00</published><updated>2011-11-04T10:12:56.569-07:00</updated><title type='text'>When Will the Project Be Done?</title><content type='html'>Johanna Rothman provides an interesting perspective on estimating in &lt;a href="http://www.jrothman.com/blog/mpd/2011/01/but-i-need-to-know-when-the-project-will-be-done.html"&gt;&lt;i&gt;But I Need to Know When the Project Will Be Done&lt;/i&gt;&lt;/a&gt;.&lt;br/&gt;&lt;br/&gt;Like Johanna, I believe that time is better spent adding value, rather than producing estimates that are consistently wrong.  The post leads off with a humerous and all-to-common conversation that highlights the problem with up front estimates: &lt;blockquote&gt;Have you been able to [provide a perfect estimate] before?&lt;br/&gt;&lt;br/&gt;No.&lt;br/&gt;&lt;br/&gt;Do you think you can get a perfect estimate this time?&lt;br/&gt;&lt;br/&gt;No.&lt;br/&gt;&lt;br/&gt;Then why would you spend your time doing an estimate instead of producing something, learning from that and bettering your gross estimate?&lt;br/&gt;&lt;br/&gt;Because my manager needs to know when the project will be done!&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3828504719709313632?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3828504719709313632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3828504719709313632&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3828504719709313632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3828504719709313632'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/when-will-project-be-done.html' title='When Will the Project Be Done?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1430987010096872409</id><published>2011-11-03T21:34:00.000-07:00</published><updated>2011-11-04T08:12:37.784-07:00</updated><title type='text'>OO and Creating Changable Systems</title><content type='html'>Inevitably, a valuable system is &lt;i&gt;forced&lt;/i&gt; to change.  The system is altered, again and again, to provide additional value.  This altering takes the system in directions that were not envisioned when the system was created.&lt;br/&gt;&lt;br/&gt;Given that OO development is well suited to dealing with the inevitable change, why are so many organizations not harnessing the power that OO provides for creating these changable systems?&lt;br/&gt;&lt;br/&gt;Could it simply be ignorance?   A lack of knowledge and training?  Underestimation of the paradigm shift needed to truly understand and implement OO systems?&lt;br/&gt;&lt;br/&gt;In future posts I'll elaborate on the tenets that make up the basis of my understanding of OO development: &lt;ol&gt;&lt;li&gt;Encapsulation&lt;/li&gt;&lt;li&gt;Low Coupling&lt;/li&gt;&lt;li&gt;High Cohesion&lt;/li&gt;&lt;li&gt;Separation of Concerns&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1430987010096872409?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1430987010096872409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1430987010096872409&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1430987010096872409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1430987010096872409'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/oo-and-creating-changable-systems.html' title='OO and Creating Changable Systems'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6359576248800369809</id><published>2011-11-02T20:46:00.000-07:00</published><updated>2011-11-02T20:48:58.497-07:00</updated><title type='text'>The Soul of a New Machine</title><content type='html'>If you're interested in what it takes to create technology, take a look at &lt;a href="http://en.wikipedia.org/wiki/The_Soul_of_a_New_Machine"&gt;&lt;i&gt;The Soul Of a New Machine&lt;/i&gt;&lt;/a&gt; by Tracy Kidder, a book that chronicles the trials and tribulations of creating the next generation computer.  The author provides good rhythm and the right mix of human and technical factors.  The suspense builds throughout the book and I was invested in the outcome:  Will they finish? Will it be a success?&lt;br /&gt;&lt;br/&gt;Even though the book was written in 1981, the rich descriptions of what goes on in a high-tech company are still accurate.  Some common themes detailed in the book are time constraints, technical debt, complexity, chaos, attrition and turf wars.&lt;br /&gt;&lt;br /&gt;I really liked the areas that focus on estimation and deadlines.  Some passages that I recognized:&lt;br /&gt;&lt;blockquote&gt;West and his staff had created the deadline of April and, in the act, had agreed at least to pretend to take it seriously.  Many months later, Carl Carman would say that no one upstairs believed they would finish Eagle that soon.  Some evenings downstairs, West seemed to say the same thing.  "We're gonna finish this sucker by April, Alsing," he'd say.  "Yeah, Tom. Sure we are," Alsing would reply.  They'd smile at each other.&lt;/blockquote&gt;&lt;blockquote&gt;It's sort of a poker game.  Everyone's bluffing, but everone seems to know the rules of the game...&lt;/blockquote&gt;&lt;blockquote&gt;"We went with an imperfect design," said Rasala. "We knew we were pushing it."  So his schedules slipped and slipped, and slipped again. "the way to stay on schedule," he said, "is to make another one."&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6359576248800369809?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6359576248800369809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6359576248800369809&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6359576248800369809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6359576248800369809'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/soul-of-new-machine.html' title='The Soul of a New Machine'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-460384431209201377</id><published>2011-11-02T20:41:00.000-07:00</published><updated>2011-11-02T20:41:09.660-07:00</updated><title type='text'>Logging Contrarian</title><content type='html'>I'm a logging contrarian.  Instead of each object declaring and using its own logger, I'd rather have objects that just expose formal notifications to the outside world.  The objects shouldn't be concerned about how the notifications are presented or consumed.  To me, this is just basic separation of concerns.&lt;br /&gt;&lt;br /&gt;Steve Freeman has a couple of great posts (&lt;a href="http://www.higherorderlogic.com/2011/10/another-reason-not-to-log-directly/"&gt;here&lt;/a&gt; and &lt;a href="http://www.mockobjects.com/2007/04/test-smell-logging-is-also-feature.html"&gt;here&lt;/a&gt;) that provide collaborating information and ideas.  I especially like his take on support vs. diagnostic logging and logging design:&lt;blockquote&gt;The idea of encapsulating support reporting sounds like over-design, but it's worth thinking about for a moment. It means I'm writing code in terms of my intent (helping the support people) rather than the implementation (logging), so it's more expressive. All the support reporting is handled in a few known places, so it's easier to be consistent about how things are reported and to encourage reuse. It can also help me structure and control my reporting in terms of the application domain, rather than in terms of java packages. Finally, the act of writing a test for each report helps me avoid the "I don't know what to do with this exception, so I'll log it and carry on" syndrome, which leads to log-bloat and production failures because I haven't handled obscure error conditions.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-460384431209201377?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/460384431209201377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=460384431209201377&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/460384431209201377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/460384431209201377'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/11/logging-contrarian.html' title='Logging Contrarian'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-269002565991337688</id><published>2011-10-26T15:26:00.000-07:00</published><updated>2011-10-26T20:58:15.658-07:00</updated><title type='text'>IT Doesn't Matter</title><content type='html'>I finally got around to reading Nicholas Carr's &lt;a href="http://www.roughtype.com/archives/2007/01/it_doesnt_matte.php"&gt;&lt;i&gt;IT Doesn't Matter&lt;/i&gt;&lt;/a&gt;.  It’s an interesting counter to the current, conventional thinking that Information Technology provides strategic value and can be used to gain a competitive edge: &lt;br /&gt;&lt;blockquote&gt; Behind the [current] thinking lies a simple assumption: that as IT’s potency and ubiquity have increased, so too has its strategic value. It’s a reasonable assumption, even an intuitive one. But it’s mistaken. What makes a resource truly strategic – what gives it the capacity to be the basis for a sustained competitive advantage – is not ubiquity but scarcity. You only gain an edge over rivals by having or doing something that they can’t have or do. By now, the core functions of IT – data storage, data processing, and data transport – have become available and affordable to all. Their very power and presence have begun to transform them from potentially strategic resources into commodity factors of production. They are becoming costs of doing business that must be paid by all but provide distinction to none.&lt;/blockquote&gt;&lt;br /&gt;The piece is well reasoned and provides some compelling examples of other cases where ubiquity resulted in “commodity inputs” without strategic value.&lt;br&gt;&lt;br /&gt;So, what to do?  Recognize and deal with the risks:&lt;br /&gt;&lt;blockquote&gt;When a resource becomes essential to competition but inconsequential to strategy, the risks it creates become more important than the advantages it provides…. The operational risks associated with IT are many – technical glitches, obsolescence, service outages, unreliable vendors or partners, security breaches, even terrorism – and some have become magnified as companies have moved from tightly controlled, proprietary systems to open, shared ones. Today, an IT disruption can paralyze a company’s ability to make its products, deliver its services, and connect with its customers, not to mention foul its reputation. Yet few companies have done a thorough job of identifying and tempering their vulnerabilities. Worrying about what might go wrong may not be as glamorous a job as speculating about the future, but it is a more essential job right now.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-269002565991337688?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/269002565991337688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=269002565991337688&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/269002565991337688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/269002565991337688'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/10/it-doesnt-matter.html' title='IT Doesn&apos;t Matter'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3074879112633005183</id><published>2011-10-10T21:03:00.000-07:00</published><updated>2011-10-10T21:04:58.335-07:00</updated><title type='text'>Kanban vs. Scrum</title><content type='html'>What is Kanban?  How does it compare to Scrum?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.infoq.com/minibooks/kanban-scrum-minibook"&gt;&lt;i&gt;Kanban and Scrum - making the most of both&lt;/i&gt;&lt;/a&gt; by Henrik Kniberg and Mattias Skarin is a mini-book that does a good job of explaining, comparing and contrasting Kanban and Scrum.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3074879112633005183?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3074879112633005183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3074879112633005183&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3074879112633005183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3074879112633005183'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/10/kanban-vs-scrum.html' title='Kanban vs. Scrum'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4323854376819664455</id><published>2011-10-10T21:00:00.000-07:00</published><updated>2011-10-10T21:05:32.847-07:00</updated><title type='text'>A New Approach for Mobile</title><content type='html'>A recent &lt;a href="http://www.informationweek.com/news/development/mobility/231300153"&gt;Information Week article&lt;/a&gt; discusses the need for a mobile application strategy and lays out a concise plan of attack.&lt;br /&gt;&lt;br /&gt;After starting with a logical premise - &lt;i&gt;Mobile application development is a new animal, and IT leaders shouldn't expect to tame it using their same old tricks&lt;/i&gt; - the article presents the challenges and options for a mobile app environment.&lt;br /&gt;&lt;br /&gt;While mobile has the normal life-cycle phases (development, distribution, security, support and enhancement) it's unique in that things are changing very rapidly and IT doesn't control the devices and platforms/operating systems.&lt;br /&gt;&lt;br /&gt;Some important concerns about mobile devices: &lt;ul&gt;&lt;li&gt;Easily lost or stolen&lt;/li&gt;&lt;li&gt;Less reliable&lt;/li&gt;&lt;li&gt;Slower processors&lt;/li&gt;&lt;li&gt;Less memory&lt;/li&gt;&lt;li&gt;More expensive&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The 8 major elements to consider in mobile strategy and some associated options:&lt;br /&gt;1. Dev Environment&lt;blockquote&gt;Customize per device, one app for multiple platforms or web-based app&lt;/blockquote&gt; &lt;br /&gt;2. Software Distribution&lt;blockquote&gt;Over-the-air distribution, syncing with a PC or an "App Store"&lt;/blockquote&gt; &lt;br /&gt;3. Maintenance, Patches, Upgrades&lt;blockquote&gt;Automatic user notifications, blacklist an earlier version and force upgrade&lt;/blockquote&gt; &lt;br /&gt;4. Security&lt;blockquote&gt;Local storage, access, encryption, private networks, remote data clearing&lt;/blockquote&gt;&lt;br /&gt;5. User Support&lt;blockquote&gt;Users' responsibilities and capabilities, training&lt;/blockquote&gt;&lt;br /&gt;6. Expense Management&lt;blockquote&gt;Mobile networks vs. Wi-Fi&lt;/blockquote&gt;&lt;br /&gt;7. Support for New Platforms&lt;blockquote&gt;Testing and certification, new mobile appliances&lt;/blockquote&gt;&lt;br /&gt;8. Your Mobile Policy&lt;blockquote&gt;Governance&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4323854376819664455?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4323854376819664455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4323854376819664455&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4323854376819664455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4323854376819664455'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/10/new-approach-for-mobile.html' title='A New Approach for Mobile'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-902325581903447694</id><published>2011-10-07T14:23:00.000-07:00</published><updated>2011-10-08T07:50:37.125-07:00</updated><title type='text'>Working Effectively with Legacy Code</title><content type='html'>A lucky developer is one who works on a new or green-field project.  Unfortunately, maintaining/enhancing existing projects is the norm and in my new job I'm maintaining a couple of these existing "legacy code" projects.  So now seemed like the right time to get to a book that has been on my list for a while: &lt;i&gt;Working Effectively with Legacy Code&lt;/i&gt; by Michael Feathers.&lt;br /&gt;&lt;br /&gt;Legacy Code has many definitions:&lt;br /&gt;&lt;blockquote&gt;Code inherited from someone else&lt;br /&gt;Code with a tangled, unintelligible structure&lt;br /&gt;Code that's difficult-to-change&lt;br /&gt;"Rotten" code&lt;/blockquote&gt;&lt;br /&gt;The author's definition is simple and somewhat unique: &lt;span style="font-style:italic;"&gt;code without tests&lt;/span&gt;.&lt;br /&gt;&lt;blockquote&gt;Code without tests is bad code. It doesn't matter how well written it is; it doesn't matter how pretty or object-oriented or well-encapsulated it is. With tests, we can change the behavior of our code quickly and verifiably. Without them, we really don't know if our code is getting better or worse.&lt;/blockquote&gt;To this I would add that legacy code is code that was written without any thought to how it will be tested.&lt;br /&gt;&lt;br /&gt;In the forward, Robert Martin provides a nice summary of the book:&lt;br /&gt;&lt;blockquote&gt;It's about taking a tangled, opaque, convoluted system and slowly, gradually, piece by piece, step by step, turning it into a simple, nicely structured, well-designed system. It's about reversing entropy&lt;/blockquote&gt;&lt;br /&gt;But, given the author's focus on tests, the book is all about how to change code so that it can be tested. The book is thought provoking and provides the techniques that can be used to "understand code, get it under test, refactor it, and add features."&lt;br /&gt;&lt;br /&gt;A few points that resonated with me:&lt;br /&gt;&lt;blockquote&gt;Preserving existing behavior is one of the largest challenges in software development. Even when we are changing primary features, we often have very large areas of behavior that we have to preserve.&lt;br /&gt;&lt;br /&gt;Dependency is one of the most critical problems in software development. Much legacy code work involves breaking dependencies so that change can be easier.&lt;br /&gt;&lt;br /&gt;What are the problems with big classes? The first is confusion. When you have 50 or 60 methods on a class, it's often hard to get a sense of what you have to change and whether it is going to affect anything else. In the worst cases, big classes have an incredible number of instance variables, and it is hard to know what the effects are of changing a variable. Another problem is task scheduling. When a class has 20 or so responsibilities, chances are, you'll have an incredible number of reasons to change it. In the same iteration, you might have several programmers who have to do different things to the class. If they are working concurrently, this can lead to some serious thrashing...&lt;/blockquote&gt;&lt;br /&gt;The later chapters are a bit hard to digest in isolation.  I've found it best to keep the book handy as a reference when I encounter some legacy code that presents a specific problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-902325581903447694?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/902325581903447694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=902325581903447694&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/902325581903447694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/902325581903447694'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/10/working-effectively-with-legacy-code.html' title='Working Effectively with Legacy Code'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-530568815587590810</id><published>2011-10-05T16:03:00.000-07:00</published><updated>2011-10-06T22:02:00.040-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>Launch simple, add complexity. - Jeff Barr, Amazon Web Services Evangelist, describing the AWS philosophy at a recent Technology Open House&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-530568815587590810?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/530568815587590810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=530568815587590810&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/530568815587590810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/530568815587590810'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/10/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4244757722622711967</id><published>2011-09-30T15:07:00.000-07:00</published><updated>2011-09-30T18:43:14.211-07:00</updated><title type='text'>What's Lean Thinking?</title><content type='html'>So you've heard about Lean and Lean Thinking, "The Toyota Way" and kaizen and you're wondering what it's all about.&lt;br /&gt;&lt;br /&gt;Craig Larman and Bas Vodde have created an excellent &lt;a href="http://www.leanprimer.com/"&gt;primer&lt;/a&gt; to get you on the path to understanding.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4244757722622711967?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4244757722622711967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4244757722622711967&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4244757722622711967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4244757722622711967'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/whats-lean-thinking.html' title='What&apos;s Lean Thinking?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6806054803187404061</id><published>2011-09-30T11:05:00.000-07:00</published><updated>2011-09-30T18:17:48.002-07:00</updated><title type='text'>What Does Your Architecture Say?</title><content type='html'>Once again, Uncle Bob nails it in &lt;a href="http://blog.8thlight.com/uncle-bob/2011/09/30/Screaming-Architecture.html"&gt;Screaming Architecture&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Food for thought:&lt;br /&gt;&lt;blockquote&gt;Architectures are not (or should not) be about frameworks. Architectures should not be supplied by frameworks. Frameworks are tools to be used, not architectures to be conformed to. If your architecture is based on frameworks, then it cannot be based on your use cases.&lt;br&gt;&lt;br&gt;Your architectures should tell readers about the system, not about the frameworks you used in your system. If you are building a health-care system, then when new programmers look at the source repository, their first impression should be: “Oh, this is a heath-care system”. Those new programmers should be able to learn all the use cases of the system, and still not know how the system is delivered.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6806054803187404061?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6806054803187404061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6806054803187404061&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6806054803187404061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6806054803187404061'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/what-does-your-architecture-say.html' title='What Does Your Architecture Say?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4882168738669549323</id><published>2011-09-29T21:42:00.000-07:00</published><updated>2011-09-29T21:48:46.224-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>...architecture is too important to be left exclusively to a few people. It's fine to have an architect, but the key way to keep an architecture intact is to make sure that everyone on the team knows what it is and has a stake in it. - Michael Feathers in &lt;i&gt;Working Effectively with Legacy Code&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4882168738669549323?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4882168738669549323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4882168738669549323&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4882168738669549323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4882168738669549323'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6503876482147485176</id><published>2011-09-28T22:07:00.000-07:00</published><updated>2011-09-28T22:07:00.591-07:00</updated><title type='text'>Agile Exposes the Power Differential</title><content type='html'>In a recent &lt;a href="http://www.jrothman.com/blog/mpd/2011/09/agile-power-and-culture.html"&gt;post&lt;/a&gt; Johanna Rothman talks about agile culture and focuses on one cultural aspect that I haven't though about: A power differential.&lt;br /&gt;&lt;blockquote&gt;That’s the ability of the less powerful people in the situation to talk to the more powerful people in the situation.&lt;/blockquote&gt;&lt;br /&gt;Seems like the challenges constantly come back to communication.  The take-away for me:&lt;br /&gt;&lt;blockquote&gt;When I see organizations with a high power differential, they keep falling back to command-and-control approaches, because the power differential is so ingrained in their culture. This is why a transition to agile is not just a technical issue, but a cultural issue too.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6503876482147485176?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6503876482147485176/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6503876482147485176&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6503876482147485176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6503876482147485176'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/agile-exposes-power-differential.html' title='Agile Exposes the Power Differential'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-769856666188775628</id><published>2011-09-28T21:09:00.000-07:00</published><updated>2011-09-28T22:00:21.981-07:00</updated><title type='text'>The Code Doesn't Matter</title><content type='html'>Saw an interesting &lt;a href="http://h30565.www3.hp.com/t5/Feature-Articles/Linus-Torvalds-s-Lessons-on-Software-Development-Management/ba-p/440"&gt;artice&lt;/a&gt; today that presents Linus Torvalds' views on software development.  One that resonates with me: &lt;i&gt;the code doesn't matter&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The other thing ... that people seem to get wrong is to think that the code they write is what matters.&lt;/blockquote&gt;&lt;blockquote&gt;No, even if you wrote 100% of the code, and even if you are the best programmer in the world and will never need any help with the project at all, the thing that really matters is the users of the code. The code itself is unimportant; the project is only as useful as people actually find it.&lt;/blockquote&gt;&lt;blockquote&gt;Way too many projects seem to think that the code is more important than the user, and they break things left and right, and they don't apologize for it, because they feel that they are ‘fixing’ the code and doing the right thing.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-769856666188775628?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/769856666188775628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=769856666188775628&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/769856666188775628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/769856666188775628'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/code-doesnt-matter.html' title='The Code Doesn&apos;t Matter'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4471636754371616160</id><published>2011-09-19T21:40:00.000-07:00</published><updated>2011-09-19T21:47:21.077-07:00</updated><title type='text'>Quotes of the Day</title><content type='html'>"...the complexity of the problems you're able to solve is directly related to the the kind and quality of abstraction"&lt;br /&gt;&lt;br /&gt;"Programming is about managing complexity: the complexity of the problem you want to solve, laid upon the complexity of the machine in which it is solved" - Bruce Eckel in &lt;i&gt;Thinking In Java&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4471636754371616160?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4471636754371616160/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4471636754371616160&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4471636754371616160'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4471636754371616160'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/quotes-of-day.html' title='Quotes of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2436397416758072809</id><published>2011-09-16T10:51:00.000-07:00</published><updated>2011-09-16T20:54:06.232-07:00</updated><title type='text'>You're Agile? Really?</title><content type='html'>Agile Software Development recently celebrated its 10-year anniversary and many claim to be Agile.  But, what is it?  &lt;br /&gt;&lt;br /&gt;Agile Software Development is a set of generative approaches that aim to reduce the cost of the inevitable change that occurs throughout a project. &lt;br&gt;&lt;br&gt;Agile means: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;short iterative cycles&lt;/li&gt;&lt;li&gt;feature-based planning&lt;/li&gt;&lt;li&gt;constant feedback&lt;/li&gt;&lt;li&gt;change tolerance&lt;/li&gt;&lt;li&gt;team proximity&lt;/li&gt;&lt;li&gt;customer intimacy&lt;/li&gt;&lt;li&gt;a focus on the overall team ecology&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Early on two of the originators of Agile - Jim Highsmith and Alistair Cockburn - created an excellent and comprehensive description.  It contains two parts:&lt;br /&gt;&lt;ul type="none"&gt;&lt;li&gt;&lt;a href="http://alistair.cockburn.us/Agile+software+development%3a+the+business+of+innovation"&gt;Agile software development: the business of innovation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://alistair.cockburn.us/Agile+development%3a+the+people+factor"&gt;Agile development: the people factor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2436397416758072809?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2436397416758072809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2436397416758072809&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2436397416758072809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2436397416758072809'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/youre-agile-really.html' title='You&apos;re Agile? Really?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7209898916436973975</id><published>2011-09-16T09:42:00.000-07:00</published><updated>2011-09-16T21:06:01.042-07:00</updated><title type='text'>Let the Store Come to the People</title><content type='html'>In a previous &lt;a href="http://logansrings.blogspot.com/2011/07/smarter-products.html"&gt;post&lt;/a&gt; I wrote about harnessing the power of technology to improve lives and increase effectiveness.&lt;br /&gt;&lt;br /&gt;Two common themes for harnessing technology are:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Automating mundane tasks so there's more time to deal with complicated ones.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Surfacing problems early so there's more time to deal with them.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;A good example of the first is &lt;a href="http://www.youtube.com/watch?v=fGaVFRzTTP4&amp;feature=player_embedded"&gt;shopping while waiting for a train&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7209898916436973975?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7209898916436973975/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7209898916436973975&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7209898916436973975'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7209898916436973975'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/09/let-store-come-to-people.html' title='Let the Store Come to the People'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4209353720939558785</id><published>2011-08-27T08:40:00.000-07:00</published><updated>2011-08-27T08:48:17.980-07:00</updated><title type='text'>Where Are Windows Files in Ubuntu?</title><content type='html'>I'm running a dual boot of Windows 7 and Ubuntu 11.04 on my laptop and I didn't know how to access a couple of files that I created in Windows.&lt;br /&gt;&lt;br /&gt;I searched the web - "where are windows files in ubuntu 11" - and got a bunch of hits related to creating directories and mounting NTFS drives.&lt;br /&gt;&lt;br /&gt;I kept thinking that there has to be a better way.  And there is: the windows partition is automatically mounted as "file system / host".&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4209353720939558785?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4209353720939558785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4209353720939558785&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4209353720939558785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4209353720939558785'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/where-are-windows-files-in-ubuntu.html' title='Where Are Windows Files in Ubuntu?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5855368973508254968</id><published>2011-08-25T21:38:00.000-07:00</published><updated>2011-08-25T21:40:29.170-07:00</updated><title type='text'>Lyrics of the Day</title><content type='html'>I spoke to a man down at the tracks.&lt;br /&gt;I asked him how he don't go mad.&lt;br /&gt;He said "Look here junior, don't you be so happy.&lt;br /&gt;And for Heaven's sake, don't you be so sad."&lt;br /&gt;Television - &lt;i&gt;Marquee Moon&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5855368973508254968?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5855368973508254968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5855368973508254968&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5855368973508254968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5855368973508254968'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/lyrics-of-day.html' title='Lyrics of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8198590459711005102</id><published>2011-08-25T21:37:00.000-07:00</published><updated>2011-08-25T21:38:16.688-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>“…vast software riches await in waters that have been chartered extensively but are traveled infrequently by average software practitioners.” – Steve McConnell in &lt;i&gt;Professional Software Development&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8198590459711005102?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8198590459711005102/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8198590459711005102&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8198590459711005102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8198590459711005102'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3482440795454970248</id><published>2011-08-14T11:44:00.000-07:00</published><updated>2011-08-14T22:08:02.829-07:00</updated><title type='text'>Driving Technical Change</title><content type='html'>In a past job I was constantly advocating for better OO practices and tools.  I found myself having to repeatedly explain and discuss the well documented benefits of OO and Agile methodologies.  This apathy towards technical excellence is the main reason I left this job.&lt;br /&gt;&lt;br /&gt;I didn't really think about driving change as a formal process so I was interested to read &lt;a href="http://www.terrenceryan.com"&gt;&lt;i&gt;Driving Technical Change&lt;/i&gt;&lt;/a&gt; by Terrence Ryan.  I really liked the book's basic premise that exactly matches my experience: Driving technical change is &lt;i&gt;simple&lt;/i&gt;, but not &lt;i&gt;easy&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;The author does a great job of describing the roles, participants and process, and the reasons people resist and push back against change.  In addition, the author emphasizes that any change should be the right change - both necessary and beneficial.&lt;br /&gt;&lt;br /&gt;It's a lot to take in but I'll definitely keep the book handy as another reference to aid software development.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3482440795454970248?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3482440795454970248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3482440795454970248&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3482440795454970248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3482440795454970248'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/driving-technical-change.html' title='Driving Technical Change'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5580222781016757951</id><published>2011-08-11T21:55:00.000-07:00</published><updated>2011-08-11T21:58:19.883-07:00</updated><title type='text'>End of Another Chapter</title><content type='html'>A couple of years ago I made a conscious decision to take charge of my career and not settle for a job that wasn't in line with my goals.&lt;br /&gt;&lt;br /&gt;So, in keeping with that decision, I've started a new job this week where I'll actually be writing code again.&lt;br /&gt;&lt;br /&gt;I'm looking forward to the challenge and the opportunities to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5580222781016757951?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5580222781016757951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5580222781016757951&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5580222781016757951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5580222781016757951'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/end-of-another-chapter.html' title='End of Another Chapter'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1239664725090764163</id><published>2011-08-04T21:56:00.000-07:00</published><updated>2011-08-04T21:56:32.989-07:00</updated><title type='text'>Are Software Failures Inevitable?</title><content type='html'>A recent &lt;a href="http://blog.castsoftware.com/stranded-by-software"&gt;On Quality Blog post&lt;/a&gt; asks a provocative question:  &lt;i&gt; When exactly did we decide that software failure was an unavoidable part of business?&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;The post looks at the recent series of computer systems outages among U.S. air carriers and notes that acceptance is an inevitable result: &lt;br /&gt;&lt;blockquote&gt;Truth is, software failures like the ones experienced by the airlines have become all too commonplace in all industries. We treat news of software failures as though they were inevitable and almost expected and, particularly with an industry like the airlines, we accept the apologies that are granted because we have no other alternative than to do so. &lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;As to why, the post notes a common basis:&lt;blockquote&gt;… many of the problems stem from existing software that has either been upgraded, customized or had new versions built on top of it.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The post focuses on the need for structural quality of software and lists some compelling reasons for poor quality: &lt;blockquote&gt; Most developers are not experts in their particular domain initially and most of the learning comes only by correcting mistakes.&lt;br /&gt;&lt;br /&gt;Applications are a complex array of platforms, business logic and data management that interact through middleware with enterprise and legacy systems.  Since developers cannot know everything they make incorrect assumptions and decisions.&lt;br /&gt;&lt;br /&gt;The break-neck speeds at which developers are asked to ply their craft often means software quality becomes a sacrificial lamb.&lt;br /&gt;&lt;br /&gt;When new software is built on existing code developers must spend much of their time trying to figure out what the "old code" did.  If time or complexity constraints prevent a full understanding, then "work arounds" are introduced.&lt;br /&gt;&lt;br /&gt;Poor quality may be introduced via mergers and/or acquisitions.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1239664725090764163?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1239664725090764163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1239664725090764163&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1239664725090764163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1239664725090764163'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/are-software-failures-inevitable.html' title='Are Software Failures Inevitable?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4511534310994563128</id><published>2011-08-01T15:41:00.000-07:00</published><updated>2011-08-01T22:17:32.381-07:00</updated><title type='text'>What's Your Smartphone Strategy?</title><content type='html'>According to &lt;a href="http://blog.nielsen.com/nielsenwire/online_mobile/in-us-smartphones-now-majority-of-new-cellphone-purchases"&gt;Nielsen&lt;/a&gt;, smartphones are now the majority of new cellphone purchases in the U.S. and it is estimated that by year end there will be more smartphones in the  market than feature phones.&lt;br /&gt;&lt;br /&gt;You have a smartphone strategy, right?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4511534310994563128?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4511534310994563128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4511534310994563128&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4511534310994563128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4511534310994563128'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/whats-your-smartphone-strategy.html' title='What&apos;s Your Smartphone Strategy?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4344009650089775709</id><published>2011-08-01T15:03:00.000-07:00</published><updated>2011-08-01T22:16:51.440-07:00</updated><title type='text'>Omnipotent Hackers - A Second Threat</title><content type='html'>In a recent Information Week article - &lt;a href="http://www.informationweek.com/news/global-cio/interviews/231000546"&gt;&lt;i&gt;Omnipotent Hacker Myth Lets Business Off The Hook&lt;/i&gt;&lt;/a&gt; - Andrew Conry-Murray explores the ramifications of hackers' growing aura of invincibility.&lt;br /&gt;&lt;br /&gt;More and more, hackers are seen as uncontrollable: &lt;blockquote&gt;&lt;br /&gt;News coverage has portrayed hacker groups ... as capable of striking down mighty (though mortal) targets at a whim, including law enforcement, three-letter government agencies and major corporations.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The result:&lt;blockquote&gt;&lt;br /&gt;...if the hackers are portrayed as omnipotent, companies will take even less responsibility for protecting ... information&lt;br /&gt;&lt;br /&gt;...if the public sees intrusions as unstoppable acts, how can it blame the victim?&lt;br /&gt;&lt;br /&gt;...Companies have always weighed the costs of security against those of a potential breach, but in an era of omnipotent hackers, the balance shifts. The thinking becomes: Do I want to A) spend lots of money on security with no guarantee of protection, or B) put that money elsewhere and risk an intrusion?  If you know an intrusion isn't going to cost you customers, option B becomes more palatable.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4344009650089775709?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4344009650089775709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4344009650089775709&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4344009650089775709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4344009650089775709'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/08/omnipotent-hackers-second-threat.html' title='Omnipotent Hackers - A Second Threat'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8404017818945563134</id><published>2011-07-27T22:02:00.000-07:00</published><updated>2011-07-27T22:05:35.166-07:00</updated><title type='text'>Solving Problems vs. Creating Solutions</title><content type='html'>A common problem with software development is that the solutions we create often don't really fit the targeted problem.&lt;br /&gt;   &lt;br /&gt;In a posting about domain language - &lt;a href="http://dannorth.net/2011/01/31/whose-domain-is-it-anyway/"&gt;Whose domain is it anyway?&lt;/a&gt; -, Dan North provides a couple of "story" examples that illustrate how a simple change in thinking can ensure that a solution fits a problem.&lt;br /&gt;&lt;br /&gt;Example 1 - a solution-based approach:&lt;br /&gt;&lt;blockquote&gt;Given an unauthenticated user&lt;br /&gt;When the user tries to navigate to the welcome page&lt;br /&gt;Then they should be redirected to the login page&lt;br /&gt;When the user enters a valid name in the Name field&lt;br /&gt;And the user enters the corresponding password in the Password field&lt;br /&gt;And the user presses the login button&lt;br /&gt;Then they should be directed to the welcome page&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Example 2 - a problem-based approach:&lt;br /&gt;&lt;blockquote&gt;Given an unauthenticated user&lt;br /&gt;When the user tries to access a restricted asset&lt;br /&gt;Then they should be directed to a login page&lt;br /&gt;When the user submits valid credentials&lt;br /&gt;Then they should be redirected back to the restricted content&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;In the first example, the focus - pages, fields, buttons - is narrow and all about the implementation of a solution.&lt;br /&gt;&lt;br /&gt;The second example is more abstract and is focused on the problem to be solved.  The benefit here is that this problem will stand on its own regardless of how it is implemented, which can change over time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8404017818945563134?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8404017818945563134/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8404017818945563134&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8404017818945563134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8404017818945563134'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/07/solving-problems-vs-creating-solutions.html' title='Solving Problems vs. Creating Solutions'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7129151222974386767</id><published>2011-07-27T22:00:00.000-07:00</published><updated>2011-07-27T22:02:14.716-07:00</updated><title type='text'>Smarter Products</title><content type='html'>I read an IBM/Rational Software white paper today - &lt;i&gt;Turning product development into competitive advantage. Best practices for developing smarter products&lt;/i&gt; - that really focused my thoughts about the future of technology and the new and exciting ways we can take advantage of technology.&lt;br /&gt;&lt;br /&gt;I work in Information Technology because I'm passionate about harnessing the power of technology to improve our lives and make us more effective. The paper's definition of "smarter products" is all about harnessing that power:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;As you exit your driveway, your car sends a signal to your home to arm the alarm system while your cell phone automatically synchronizes with your car’s voice command system. Having analyzed your recent driving patterns, the vehicle’s global positioning system (GPS) recommends a new route to cut fuel costs and avoid traffic delays. Finally, the car informs you that your antilock brakes need servicing and, after checking the schedule on your personal digital assistant (PDA), presents you with available appointment times.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7129151222974386767?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7129151222974386767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7129151222974386767&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7129151222974386767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7129151222974386767'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/07/smarter-products.html' title='Smarter Products'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5701995472485542596</id><published>2011-07-26T20:54:00.001-07:00</published><updated>2011-08-02T10:53:53.049-07:00</updated><title type='text'>Software Spectrum</title><content type='html'>Software development has a spectrum. At one end is the business domain or the context for the problem to be solved. At the other end is the technology - the code, tools and systems that solve the problem.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-GHe2C2e6DEQ/Ti-MUItreKI/AAAAAAAAAEU/QcyUDo5H5IM/s1600/spectrum1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 149px;" src="http://1.bp.blogspot.com/-GHe2C2e6DEQ/Ti-MUItreKI/AAAAAAAAAEU/QcyUDo5H5IM/s400/spectrum1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5633875936428128418" /&gt;&lt;/a&gt;&lt;br /&gt;There are many roles spread across this spectrum. Some common ones are User, Domain Expert, Business Analyst, Project Manager, Technical Analyst and Developer.&lt;br /&gt;&lt;br /&gt;Where do these roles fit on the spectrum? Is there a standard for where they fit?&lt;br /&gt;&lt;br /&gt;User and Developer are easy - they are at the ends. Project Manager is somewhere in the middle. Domain Expert and Business Analyst are somewhere between the middle and the business domain. Technical Analyst is somewhere between the middle and the technology.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-_LdoxN86CFU/Ti-MuskGefI/AAAAAAAAAEc/5LAaKNfiZT8/s1600/spectrum2.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 84px;" src="http://2.bp.blogspot.com/-_LdoxN86CFU/Ti-MuskGefI/AAAAAAAAAEc/5LAaKNfiZT8/s400/spectrum2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5633876392728230386" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a software developer, what roles do you interface with? What roles influence you? What roles provide the knowledge you need in order to do your job?&lt;br /&gt;&lt;br /&gt;If the majority of your interface is on the right side of this spectrum then your knowledge and experience is second-hand and chances are you aren't even aware of the problem. As a result, you are probably creating software that doesn't reflect the business domain. And unfortunately, the result is that the problem domain is often altered to fit the solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5701995472485542596?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5701995472485542596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5701995472485542596&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5701995472485542596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5701995472485542596'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/07/software-spectrum.html' title='Software Spectrum'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-GHe2C2e6DEQ/Ti-MUItreKI/AAAAAAAAAEU/QcyUDo5H5IM/s72-c/spectrum1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5011438635290855553</id><published>2011-07-15T18:11:00.000-07:00</published><updated>2011-07-18T15:23:58.612-07:00</updated><title type='text'>Uber Conference 2011</title><content type='html'>I attended the 2011 &lt;a href="http://uberconf.com/conference/denver/2011/07/home"&gt;Uber Conference&lt;/a&gt; in Denver this week and while it didn't "blow my mind", it did provide for some great camaraderie, learning and discoveries.  The space,  amenities, food and sessions were great.  The only complaint I had is with the wireless access, which was spotty and very sloooooow.&lt;br /&gt;&lt;br /&gt;The conference bills itself as "ultimate Java platform/agility experience" and it definitely delivered on the Java platform part.  The most interesting sessions for me, and the ones that made the most impact, were the ones related to jRuby and the Spock testing framework.  I still can't believe how easy mocking is with Spock.&lt;br /&gt;&lt;br /&gt;I had some great conversations and I picked up a few shortcuts and recommendations for personal productivity  applications.  For example, I downloaded Evernote to capture my conference notes.&lt;br /&gt;&lt;br /&gt;As in the last conference I attended, I was awed by the way new frameworks are abstracting away the tedious and repetitive parts of software development that don't add value.&lt;br /&gt;&lt;br /&gt;I've got a long list of tools and technologies to explore and I need to understand closures and mixins.&lt;br /&gt;&lt;br /&gt;On day one I attended the full day &lt;span style="font-weight:bold;"&gt;Android Workshop&lt;/span&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/ted_neward"&gt;Ted Neward&lt;/a&gt; where I got some exposure to Android, which appears to be a blend of Java, open source, and a mobile device platform.  I developed the sessions's simple app using the SDK,  development environment and emulator.  The Android API is a different mental model for me.  Another paradigm shift.  It seems a lot like the Java Swing event model with registration and call backs.&lt;br /&gt;&lt;br /&gt;At the end of the day my mind was full of Android but it was a lot of fun to expand my knowledge and stretch my Java comfort zone.&lt;br /&gt;&lt;br /&gt;In the day 1 &lt;span style="font-weight:bold;"&gt;keynote presentation&lt;/span&gt; &lt;a href="http://uberconf.com/conference/denver/2011/07/session?id=21691"&gt;Terry Ryan&lt;/a&gt; talked about how to overcome the common resistance you'll encounter when you try to implement the technologies and tools you're passionate about. Terry spoke about the patterns, and personas that you'll deal with.  As Terry pointed out, overcoming the resistence is simple, but not easy. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Day 2&lt;/span&gt; was the official start of the conference. I attended the following sessions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Continuous Delivery I and II &lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/jez_humble"&gt;Jez Humble&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Continuous delivery aims to avoid long periods between an idea that may provide value and the ability to determine if the value is real.  The goal is to release minimum marketable features quickly and get immediate feedback.  Also, continuous delivery results in software that's always ready so that software is not a company's bottleneck.&lt;br /&gt;&lt;br /&gt;Jez posed a great question worth pondering: How long would it take your organization to deploy a change that involves just one single line of code?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Using DDD Patterns for Supple Design&lt;/b&gt;  by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/paul_rayner"&gt;Paul Rayner&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This session was right up my alley because it dealt with ideas I've been exploring in my blog.  I really enjoyed the discussion about ubiquitous language since I've been advocating for it at my current job.  Some of the Domain Driven Development patterns that were presented: Entity, Value Object, Event, and Service. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Designing RESTful Services&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/ian_robinson"&gt;Ian Robison&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I'm currently reading Ian's book &lt;i&gt;REST In Practice&lt;/i&gt; and struggling to comprehend the concept so it was good to get some additional perspectives.  This was the most popular session that I attended.&lt;br /&gt;&lt;br /&gt;My take is that REST is about avoiding coupling in machine to machine interactions by simply using the standard HTTP interface.   The goal is to execute a specialized processes in a generalized way by focusing on what to do next and/or how to progress.  A key point is that the "application" is what the client perceives it to be - the server is just a collection of resources that "look out for themselves" and aren't concerned about the overall goal the client is trying to accomplish.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Effective Java Reloaded&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/speaker/matt_stine"&gt;Matt Stine&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This session was about writing better Java code by applying the tenets in the book &lt;i&gt;Effective Java&lt;/i&gt;. The following tenets were review/discussed:&lt;br /&gt;&lt;br /&gt;Make defensive copies when needed&lt;br /&gt;Obey the general contract when overriding equals&lt;br /&gt;Always override toString&lt;br /&gt;Consistently use the Override annotation&lt;br /&gt;Prefer primitive types to boxed Primitive&lt;br /&gt;Use overloading judiciously&lt;br /&gt;Remove empty arrays or collections, not nulls&lt;br /&gt;Minimize scope of local variables&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Java Web App Security: Develop. Penetrate. Protect. Relax.&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/matt_raible"&gt;Matt Raible&lt;/a&gt;&lt;br /&gt; &lt;br /&gt;This session demonstrated how to implement web authentication via Java EE Servlet 3.0, Spring Security and  Apache Shiro.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Software Craftsmanship: Positioning, Patterns and Practices&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/peter_bell"&gt;Peter Bell&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This session, the sixth of the day, was a good day ending one since it mostly high-level and based on familiar concepts.  We took a look at the state of the Software Craftsmanship movement and discussed its history, philosophy and practices.  &lt;br /&gt;&lt;br /&gt;There was an interesting discussion about the &lt;a href="http://martinfowler.com/bliki/CraftmanshipAndTheCrevasse.html"&gt;dust-up&lt;/a&gt; earlier in the year regarding the value of Software Craftsmanship.&lt;br /&gt;&lt;br /&gt;On &lt;span style="font-weight:bold;"&gt;Day 3&lt;/span&gt; I attended the following sessions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;JRuby in Depth I and II&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/neal_ford"&gt;Neal Ford&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This was one of the two sessions that really made an impact.  I hadn't previously thought about taking advantage of Ruby with existing Java projects.  JRuby makes it possible.  Ruby is just one of over 200 languages that run on the JVM but it's one of the oldest and most mature/stable.&lt;br /&gt;&lt;br /&gt;This session presented a demo of jRuby and the Ruby syntax.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Git Workshop&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/matthew_mccullough"&gt;Matt McCullough&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been using Git and github as my code repository so this session didn't present anything significantly new but I did pick up a few shortcuts and ideas.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tricks of the Trade - What Every Developer Should Know About App Security&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/frank_kim"&gt;Frank Kim&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This session was a real eye-opener.  Frank showed just how easy it can be to exploit app security flaws.  He demo'ed how to exploit flaws with Cross-Site Scripting, Cross-Site Request Forgery and SQL Injection.&lt;br /&gt;&lt;br /&gt; A couple of take-aways:  hacking is not hard, and don't trust any data coming into your app - either from the client or your own persistence.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Design Patterns in Modern JVM Languages&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/venkat_subramaniam"&gt;Venkat Subramaniam&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this session Venkat demonstrated how the newer JVM languages (Scala and Groovy) make it easier to implement the following patterns:&lt;br /&gt;&lt;br /&gt;abstract factory&lt;br /&gt;cascade&lt;br /&gt;fluency (closures)&lt;br /&gt;pluggable behavior&lt;br /&gt;decorator&lt;br /&gt;execute around method&lt;br /&gt;intercept, cache, invoke&lt;br /&gt;delegation&lt;br /&gt;&lt;br /&gt;On the &lt;span style="font-weight:bold;"&gt;final day&lt;/span&gt; of the conference I attended the following sessions:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Smarter Testing With Spock&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/peter_niederwieser"&gt;Peter Niederwieser&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Peter is author of Spock and provided some of the motivations and use-cases that were used to create Spock, which is a Developer testing framework based on Groovy, written in Java, and compatible with JUnit.&lt;br /&gt;&lt;br /&gt;Peter presented demo's of the major facets of the framework.  I was amazed and the simplicity and the obvious, self explanatory syntax of Spock.  I was really floored by the ease of mocking and stubbing.&lt;br /&gt;&lt;br /&gt;I'm looking forward to actually using this framework.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Functional Web Testing With Geb and Spock&lt;/b&gt; by &lt;a href="http://uberconf.com/conference/denver/2011/07/speakers/peter_niederwieser"&gt;Peter Niederwieser&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I was a little lost in this presentation because I've not done web page testing and I'm not well versed with jQuery. But Geb is a powerful tools that really works for web testing.&lt;br /&gt;&lt;br /&gt;All-in-all it was an excellent 4 days.  Very enlightening and energizing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5011438635290855553?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5011438635290855553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5011438635290855553&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5011438635290855553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5011438635290855553'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/07/uber-conference-2011.html' title='Uber Conference 2011'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8654827100031121325</id><published>2011-06-28T17:25:00.000-07:00</published><updated>2011-06-28T17:30:59.208-07:00</updated><title type='text'>Leader-Full</title><content type='html'>I attended the recent &lt;a href="http://www.BeyondAgile.org"&gt;Beyond Agile&lt;/a&gt; gathering where &lt;a href="http://www.estherderby.com/"&gt;Esther Derby&lt;/a&gt; talked about different types of leadership and the benefits of "Leader-Full Teams".  One of her main points was that the classic model of leadership - a single, charismatic figure and the followers - is outdated and doesn't fit today's software development world with its agile knowledge workers.  Instead, we form "goal oriented social units" where each member is a leader and is empowered to make small, subtle decisions and changes that ripple out with positive effect.&lt;br /&gt;&lt;br /&gt;For example, instead of a leader directing the team to "be more creative", a team member can throw out a wild idea to promote challenges and counter ideas.&lt;br /&gt;&lt;br /&gt;A leader...&lt;blockquote&gt;&lt;br /&gt;is self-aware - blind spots, filters, strengths/weaknesses - and aware of group and system dynamics.&lt;br /&gt;&lt;br /&gt;has tools and options for action, knows the relationships between them, and combines them to achieve desired outcomes.&lt;br /&gt;&lt;br /&gt;combines differences - skills, ideas, thinking - for effectiveness.&lt;br /&gt;&lt;br /&gt;tightens constraints to focus a group's attention or applies them to add organization to chaos.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;As a bit of an experiment, Esther got the group to form small teams tasked with creating an objet d'art.  The only requirements were height, strength and beauty, which led to some amazing creations and the highlighting of a valuable tool/option: don't over specify.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8654827100031121325?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8654827100031121325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8654827100031121325&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8654827100031121325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8654827100031121325'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/06/leader-full.html' title='Leader-Full'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5862560823102411640</id><published>2011-06-11T22:58:00.000-07:00</published><updated>2011-06-11T23:34:30.195-07:00</updated><title type='text'>The Psychology of Computer Programming</title><content type='html'>How do we make programming and software projects better?  More successful?  One way may be to pay more attention to the human, or psychological side.  In my experience, we rarely look at psychological issues related to software development. &lt;br /&gt;&lt;br /&gt;Prior to reading &lt;i&gt;The Psychology of Computer Programming&lt;/i&gt; by Gerald Weinberg I only thought about a small part of the human side of software development.  The book deals with subjects that are rarely discussed or addressed:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Personality traits&lt;/li&gt;&lt;li&gt;Leaders and leadership&lt;/li&gt;&lt;li&gt;Physical environments&lt;/li&gt;&lt;li&gt;Social organization and common social problems&lt;/li&gt;&lt;li&gt;How a team forms&lt;/li&gt;&lt;li&gt;Formal and informal structures at work in teams&lt;/li&gt;&lt;li&gt;Motivation&lt;/li&gt;&lt;li&gt;Training&lt;/li&gt;&lt;li&gt;Forces against learning&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As usual, Gerald Weinberg tells some great stories although this book was a little hard to get through since it read mostly like a text book.  It was a bit dated but it contained some great anecdotes and timeless themes. &lt;br /&gt;&lt;br /&gt;The book's main point is thinking about computer programming as a human activity and programmers as a human beings, rather than machines.  The benefit would be programmers functioning more efficiently and with greater satisfaction.&lt;br /&gt;&lt;br /&gt;The book discusses why the human side is overlooked:&lt;br /&gt;&lt;blockquote&gt;Computer programming is a human activity.  One could hardly dispute this assertion, and yet, perhaps because of the emphasis placed on the machine aspects of programming, many people  - many programmers - have never considered programming in this light.  Among programmers, there is a certain mystique - a certain waiving of the hands which takes place whenever one tries to probe the manner in which programming is done.  Programming is not done in a certain way, they say, it is just &lt;i&gt;done&lt;/i&gt;.  Either you can program or cannot. Some have it; some don't.&lt;/blockquote&gt;&lt;br /&gt;Some food for thought:&lt;br /&gt;&lt;blockquote&gt;Writing a program is a process of &lt;i&gt;learning&lt;/i&gt; - both for the programmer and the person who commissions the program.  Moreover, this learning takes place in the context of a particular machine, a particular programming language, a particular programmer or programming team in a particular working environment, and a particular set of historical events that determine not just the form of the code but also &lt;i&gt;what the code does&lt;/i&gt;!&lt;br /&gt;&lt;br /&gt;In a way, the most important reason for studying the process by which programs are written by people is not to make the programs more efficient, more compact, cheaper, or more easily understood.  Instead, the most important gain is the prospect of getting from our programs what we really want - rather than just whatever we can manage to produce in our fumbling, bumbling way.&lt;br /&gt;&lt;br /&gt;There are many reasons why  programs are built the way they are, although we may fail to recognize the multiplicity of reasons because we usually look at code from the outside rather than by reading it.  When we do read code, we find that some of it gets written because of machine limitations, some because of historical accidents, and some because of specifications - both essential an inessential.  But for whatever reason a particular piece of code gets inserted into the final product, there are psychological aspects to that reason.&lt;br /&gt;&lt;br /&gt;Putting a bunch of people to work on the same problem doesn't make them a team.&lt;br /&gt;&lt;br /&gt;Each person working on a team within a project has come to accept certain of the team goals as his own.  But when the team is specialized, its goals do not necessarily coincide with the overall goals of the project, or with the goals of another team.  These conflicts are invariably manifest is some sort of social relations.&lt;br /&gt;&lt;br /&gt;The job of getting from specifications to delivered program demands various kinds of work, which in turn, demand various talents...it may be that suitability for work in one stage of programming makes one more or less unsuited for work in another.&lt;br /&gt;&lt;br /&gt;Personality affects programming performance.&lt;br /&gt;&lt;br /&gt;If we are to ensure that the proper talents are available when needed, we shall have to classify the work that programmers do into somewhat more refined categories than the simple term "programming" covers.&lt;/blockquote&gt;&lt;br /&gt;An interesting topic was egoless programming or the ability to realize human limitations and the restructuring of the values system of programmers.  Programmers should look for and welcome criticism, and realize that we all have bad days or days where we are just not going to produce anything of value.&lt;br /&gt;&lt;br /&gt;I really liked the section that discussed documentation:&lt;br /&gt;&lt;blockquote&gt;The value of documentation is only to be realized if the documentation is well done.  If it is poorly done, it will be worse than no documentation at all.&lt;br /&gt;&lt;br /&gt;There is no way to &lt;i&gt;force&lt;/i&gt; programmers to produce &lt;i&gt;good&lt;/i&gt; documentation...The only hope for producing good documentation is to convince the programmer that is will benefit him to do so.  If the act of producing the document has demonstrable good effects, there will be no way of &lt;i&gt;preventing&lt;/i&gt; reasonably good documentation.&lt;br /&gt;&lt;br /&gt;"Depth" is one of the most important documentation concepts, especially for large systems.  If a system is of any size at all, different users of the documentation will need different levels of detail in the information they extract.  The highest level should be just sufficiently detailed to tell the user whether or not he will be able to read the documents.  At each level - because we can never be sure which document will fall into the user's hands - the first and most conspicuous thing in the document should be a reference to the documents above and below it in depth, along with an indication of the the depth to which the document goes and the knowledge the reader must have to use it.&lt;br /&gt;&lt;br /&gt;We have not accustomed ourselves to thinking of the cost of documentation as a part of the programming cost.&lt;br /&gt;&lt;br /&gt;There is no reason to believe that a professional programmer will be qualified as a professional documenter.&lt;/blockquote&gt;&lt;br /&gt;This book makes the case that software development is not always just hardware and software.  We humans are the main part of the equation and therefore software development carries all the issues and challenges as any other human endeavor.&lt;br /&gt;&lt;br /&gt;I really liked the book's description of the greatest challenge as "not creative thinking, but creative communicating: representing our thoughts in a way that other persons - each with a unique style - can understand."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5862560823102411640?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5862560823102411640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5862560823102411640&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5862560823102411640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5862560823102411640'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/06/psychology-of-computer-programming.html' title='The Psychology of Computer Programming'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2099170343959218143</id><published>2011-06-10T13:37:00.000-07:00</published><updated>2011-06-10T13:52:04.101-07:00</updated><title type='text'>Is Experience Valuable?</title><content type='html'>I viewed a couple of the presentations from the &lt;a href="http://www.agilejournal.com/agileconnect"&gt;Agile Connect 2011&lt;/a&gt; event this week.  One of my interests is software estimation and the challenge of estimating accurately so I really enjoyed the &lt;a href="http://www.agilejournal.com/pdf/Deception-and-Estimation_LindaRising.pdf"&gt;Deception and Estimation: How We Fool Ourselves&lt;/a&gt; presentation.&lt;br /&gt;&lt;br /&gt;A couple of key points:&lt;br /&gt;&lt;blockquote&gt;We deceive ourselves in all our daily estimates and we're hardwired to deceive&lt;br /&gt;&lt;br /&gt;Deception is rampant in our daily lives and even encouraged For example, we instruct our children to feign respect for their elders, to write thank you notes for disappointing presents and to refrain from telling grandma that her breath stinks&lt;/blockquote&gt;&lt;br /&gt;What was most interesting to me was the article that was referenced in the presentation - &lt;a href="http://hbr.org/2008/02/the-experience-trap/ar/1"&gt;The Experience Trap&lt;/a&gt; - where the main element of estimating, experience, was shown to be ineffective when dealing with complexity.&lt;br /&gt;&lt;br /&gt;A key paragraph from the article:&lt;br /&gt;&lt;blockquote&gt;When anyone makes a decision, he or she draws on a pre-existing stock of knowledge called a mental model. It consists largely of assumptions about cause-and-effect relationships in the environment. As people observe what happens as a result of their decisions, they learn new facts and make new discoveries about environmental relationships. Discoveries that people feel can be generalized to other situations are fed back, or “appropriated”, into their mental models. On the face of it, the process seems quite scientific — people form a hypothesis about a relationship between a cause and an effect, act accordingly, and then interpret the results from their actions to confirm or revise the hypothesis. The problem is that the approach seems to be effective only in relatively simple environments, where cause-and-effect relationships are straightforward and easily discovered. In more complex environments, such as software projects, the learning cycle frequently breaks down.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;So, cause-and-effect and mental models don't work well in complicated environments like software projects but, because humans are not good at dealing with complexity, we tend to use software to help with complex situations.&lt;br /&gt;&lt;br /&gt;I've often wondered about how software project failures would be different if we spent less time on estimating and more time on actual problem solving.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2099170343959218143?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2099170343959218143/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2099170343959218143&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2099170343959218143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2099170343959218143'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/06/is-experience-valuable.html' title='Is Experience Valuable?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8971742762501939690</id><published>2011-06-05T00:00:00.000-07:00</published><updated>2011-06-05T00:04:56.168-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>Documentation is the castor oil of programming - managers think it is good for programmers, and programmers hate it! - Gerald Weinberg in &lt;i&gt;The Psychology of Computer Programing&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8971742762501939690?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8971742762501939690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8971742762501939690&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8971742762501939690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8971742762501939690'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/06/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1364605852043331695</id><published>2011-05-21T22:08:00.000-07:00</published><updated>2011-05-21T22:31:54.976-07:00</updated><title type='text'>Understand the Problem</title><content type='html'>I came across an interesting &lt;a href="http://mattstine.com/?p=429"&gt;post&lt;/a&gt; with an anti-pattern that dovetails nicely with my focus on &lt;a href="http://logansrings.blogspot.com/2011/02/solving-problems-with-software.html"&gt;solving problems&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;b&gt;Understand the Problem vs. Jump to the Solution&lt;/b&gt; – only a couple of minutes into our discussion solutions were being flung about like drunken darts. This situation almost always leads to suboptimal or faulty solutions. As a facilitator, try to ensure that the problem has been clearly stated. If at all possible, write it down on a whiteboard. Make sure everyone agrees that the problem as stated is the problem the group is there to solve. Sure enough, after performing this exercise, we all had a very different and clear understanding of the problem than that with which we walked in the door.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1364605852043331695?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1364605852043331695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1364605852043331695&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1364605852043331695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1364605852043331695'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/05/understand-problem.html' title='Understand the Problem'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-645892557488313325</id><published>2011-04-24T20:57:00.001-07:00</published><updated>2011-04-24T20:57:56.462-07:00</updated><title type='text'>Q &amp; A</title><content type='html'>“What if we train our people and they leave?”&lt;br /&gt;“What if we don’t train our people, and they stay?”&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-645892557488313325?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/645892557488313325/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=645892557488313325&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/645892557488313325'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/645892557488313325'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/04/q.html' title='Q &amp; A'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5215405094724331862</id><published>2011-04-23T09:01:00.000-07:00</published><updated>2011-05-01T21:27:40.210-07:00</updated><title type='text'>Pragmatic Thinking and Learning</title><content type='html'>The problem with common sense is that it’s not that common.   I was reminded of this old adage while reading &lt;a href="http://pragprog.com/titles/ahptl"&gt;&lt;font style="font-style:italic;"&gt;Pragmatic Thinking and Learning&lt;/font&gt;&lt;/a&gt; because the book is full of common sense things that I've forgotten.&lt;br /&gt;&lt;br /&gt;For example, I need to use mind mapping as a note taking tool because it makes follow-up and retention so much easier.  Also I need to resume my meditating - my sleep is so much better when I do.&lt;br /&gt;&lt;br /&gt;The book explores the non-technical side of software development. A few areas I especially liked:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The use of symbols to aid learning.  I can now remember left brain (analytical/empirical) vs. right brain (creative) based on the "R" and "L" symbols.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The explanation of the &lt;a href:"http://en.wikipedia.org/wiki/Dreyfus_model_of_skill_acquisition"&gt;&lt;font style="font-style:italic;"&gt;Dreyfus Model of Skill Acquisition&lt;/font&gt;&lt;/a&gt;. It made me think about where I am in my career development.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The discussion about context switching and the design/use of multiple monitors.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Learning about &lt;a href:"http://en.wikipedia.org/wiki/Infinite_regress"&gt;&lt;font style="font-style:italic;"&gt;infinite regression&lt;/font&gt;&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Some takeaways for me:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Don't try to herd racehorses and don't try to race sheep.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;In systems thinking as in object-orient programming, it's often the relationships between things that are interesting , not the things themselves.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;There's always going to be a new technology to be learned. The technology itself isn't as important: it's the constant learning that counts.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When transitioning from one skill to another, you need to unlearn just as much as you need to learn.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5215405094724331862?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5215405094724331862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5215405094724331862&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5215405094724331862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5215405094724331862'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/04/pragmatic-thinking-and-learning.html' title='Pragmatic Thinking and Learning'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2326396079912399974</id><published>2011-04-17T08:09:00.000-07:00</published><updated>2011-05-01T15:11:27.062-07:00</updated><title type='text'>Hello Mac!</title><content type='html'>I got my first Mac (MacBook Pro).  I unpacked it on Friday evening and as of now (Sunday morning) it's completely replaced my Win 7 laptop.  I've installed all my social stuff and my dev tools, and I've pulled in all my code from github.&lt;br /&gt;&lt;br /&gt;Operating the new hardware/software involves a bit of a paradigm shift but I'm enjoying the challenge of learning.  After using the terminal utility to get my git environment set up I realized how much I miss the bash interface and vi!&lt;br /&gt;&lt;br /&gt;A few things led me to the switch:&lt;blockquote&gt;&lt;br /&gt;My laptop was regularly giving me the &lt;a href="http://en.wikipedia.org/wiki/Blue_Screen_of_Death"&gt;BSOD&lt;/a&gt; and I was constantly saving my work as a preventive measure.&lt;br /&gt;&lt;br /&gt;My battery life was only in the 1.5 to 2 hour range.&lt;br /&gt;&lt;br /&gt;The laptop power connector was constantly being pulled out or in the way. &lt;br /&gt;&lt;br /&gt;The Mac's compact size and its reputation.  Almost all of the seminars, training classes and webinars I've been to/seen are presented on Macs.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2326396079912399974?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2326396079912399974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2326396079912399974&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2326396079912399974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2326396079912399974'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/04/hello-mac.html' title='Hello Mac!'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7300463734376190406</id><published>2011-03-31T12:39:00.000-07:00</published><updated>2011-04-02T19:34:56.282-07:00</updated><title type='text'>Solving Problems (with software)</title><content type='html'>IT&lt;a href="http://spectrum.ieee.org/computing/software/why-software-fails"&gt; project failures&lt;/a&gt; are all too common and in my 25+ years of software development I've seen my share.  I've personally been involved in projects that were:&lt;UL&gt;&lt;LI&gt;Never completed&lt;/LI&gt;&lt;LI&gt;Never implemented&lt;/LI&gt;&lt;LI&gt;Without value and/or loaded with additional work for the user&lt;/LI&gt;&lt;/UL&gt;&lt;br /&gt;These failed projects all suffered from the same common problem: poor requirements.  Those involved were either unable or unwilling to define and communicate not only what was being created, but, just as important, why it was being created.  There was no notion of the project's &lt;i&gt;value&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This requirements problem is certainly well know and discussed.  Fred Brooks summed it up nicely in his popular essay &lt;i&gt;No Silver Bullet - Essence and Accident in Software Engineering&lt;/i&gt;:&lt;br /&gt;&lt;blockquote&gt;...the hard part of building software is the specification, design and testing of the conceptual construct (data sets, relationships, algorithms), not the labor of representing the construct and testing the fidelity of the representation.&lt;/blockquote&gt;&lt;br /&gt;Without well defined and communicated requirements we get poorly-implemented, over-engineered solutions to misunderstood problems.  And, we get the following types of conversations:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;User:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;How do I save the order?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;You can't save the order, you haven't entered the due date.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;User:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;The due date isn't supplied at the time of order entry ...&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;User:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;How do I get to client ABC?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Use the client drop down.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;User:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;But it's sorted by client number.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Developer:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;So?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;User:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;I never access clients by their number ...&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;&lt;table&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Project Manager:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;How do you like the new inventory system?&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;User:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;It's great but I can't find the low stock report.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;Project Manager:&lt;/b&gt;&lt;/td&gt;&lt;td&gt;That wasn't in scope ...&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;hr/&gt;&lt;br /&gt;Why is it so hard to capture and communicate requirements?  In a word, complexity.  Software is increasingly complex and, since we tend to tackle the "easy" problems first, each new problem is more complex.&lt;br /&gt;&lt;br /&gt;I've always been humbled and mindful of my project failures, and I've spent many hours contemplating better ways of defining requirements that would lead to more successes.  I've been heavily influenced by Gerald Weinberg, Martin Fowler, Tom DeMarco, Timothy Lister and James Shore.&lt;br /&gt;&lt;br /&gt;Communication is the key, of course.  But in coming up with what to communicate we must remember that software is a means to an end.  We must postpone the creation of the solution until we understand the problem, and we must focus on problem solving, not writing software.&lt;br /&gt;&lt;br /&gt;Also, communication cannot be one-dimensional and one-way.  You need feedback, because everyone has different knowledge, experience and assumptions, and you need non-verbal themes to guide and facilitate.  I've identified five key themes that have been prominent in my successful projects:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-HTBGR2pkAts/TXGHBGKPzUI/AAAAAAAAADs/lOXWy3BSk6U/s1600/Untitled.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 200px;" src="http://3.bp.blogspot.com/-HTBGR2pkAts/TXGHBGKPzUI/AAAAAAAAADs/lOXWy3BSk6U/s400/Untitled.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5580389866191965506" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ubiquitous Language&lt;/b&gt;&lt;br /&gt;Communicating clearly and accurately, especially regarding complexity, is made difficult because human language is so imprecise.  Multiple terms or words can mean the same thing and a single word or term can be understood to mean different things.  Now mix in team members at different levels of experience, understanding, skills and responsibilities, and confusion and errors result.  A Ubiquitous Language can help deal with this.&lt;br /&gt;&lt;br /&gt;Ubiquitous Language (UL) is a simple concept: All members of the team use a common language - the same language - to understand and describe, and it's the language of the problem domain.  The UL is used verbally, in written documentation and most importantly, in the code.&lt;br /&gt;&lt;br /&gt;Without a UL, precious time is wasted with misunderstandings and translations.  With a UL, ambiguity is reduced and communication is clear and accurate.  Another important benefit is that all the team activities are connected with the code.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jamesshore.com/Agile-Book/ubiquitous_language.html"&gt;James Shore&lt;/a&gt; has talked about UL as a key part of Agile Development.  In addition, UL is a key concept in &lt;a href="http://domaindrivendesign.org/node/132"&gt;Domain-Driven Design&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ground Truth&lt;/b&gt;&lt;br /&gt;Ever been to a planning/estimating meeting where developers roll their eyes when a go-live date is announced?  Ever been to a release demo where user's are focused on what's missing instead of what's presented? These are examples of what happens without ground truth, or shared assumptions and facts that are aligned with reality.&lt;br /&gt;&lt;br /&gt;In software we use models - schedules, documents, pictures - to aid decision making regarding scope, dates, quality and risks.  But the models are only valuable when they're rooted in reality.  And that means they must be constantly reviewed, evaluated and adjusted to reflect the truth.&lt;br /&gt;&lt;br /&gt;With ground truth the commitment and involvement of all team members is enhanced because everyone believes in the assumptions and facts used to make decisions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solution Abstraction&lt;/b&gt;&lt;br /&gt;When first contemplating how a software project will be done it's important to pull back from the mechanics of UI's, frameworks and protocols and think of the project as a value abstraction, focusing on the problem and pain points that are to be addressed/eliminated.  I've found it helpful to explore how the problem could be solved without a computer.  Client drop-downs and order entry screens are future details to be address after you discover and define the real value is notifying a client when their order cannot be fulfilled.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Constant Context&lt;/b&gt;&lt;br /&gt;One of the first books I read when I was transitioning to OO was &lt;a href="http://www.amazon.com/UML-Distilled-Standard-Modeling-Language/dp/0321193687"&gt;&lt;i&gt;UML Distilled&lt;/i&gt;&lt;/a&gt; by Martin Fowler.  The first few chapters did a good job of introducing this newbie to OO software development.  One of the concepts that made a lasting impression was the use of Perspectives.  Fowler described three perspective used with class diagrams:&lt;br /&gt;&lt;br /&gt;   Conceptual - the concepts in the domain&lt;br /&gt;   Specification - the interfaces&lt;br /&gt;   Implementation - how the classes are implemented&lt;br /&gt;&lt;br /&gt;These perspectives are also commonly used in all forms of communication related to requirements.  I've found it helpful to stay away from Implementation perspective so that your focus is on the solution, not the software.  Conceptual and specification perspectives are better suited for requirements but a constant context - the consistent use of one or the other - is necessary so that you can focus on the requirements without having to mentally shift between levels.  Its much easier to stay at a conceptual level, for instance, than to have to think conceptually and then shift into details and then back to concepts.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bridge, Not Ferry&lt;/b&gt;&lt;br /&gt;One of the parts of Agile development that I really like is the goal of bringing teams together so that collaboration and Q&amp;A are immediate and so that team members are exposed to day-to-day project details.  This team togetherness is only possible if the "gap" between the different groups on the team is not an impediment.  Historically, there's been a disconnect between business people and developers - described well as a &lt;a href="http://www.infoq.com/presentations/Fowler-North-Crevasse-of-Doom"&gt;&lt;i&gt;yawning crevasse of doom&lt;/i&gt;&lt;/a&gt;.  You need a bridge to provide direct communication between team members.  You don't want team members ferrying information and decisions back and forth across the divide.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7300463734376190406?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7300463734376190406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7300463734376190406&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7300463734376190406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7300463734376190406'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/solving-problems-with-software.html' title='Solving Problems (with software)'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-HTBGR2pkAts/TXGHBGKPzUI/AAAAAAAAADs/lOXWy3BSk6U/s72-c/Untitled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2772861065105427981</id><published>2011-03-30T20:33:00.000-07:00</published><updated>2011-03-30T20:37:14.170-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>A company is more likely to die of indigestion from too much opportunity than starvation from too little - David Packard, co founder of HP&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2772861065105427981?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2772861065105427981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2772861065105427981&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2772861065105427981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2772861065105427981'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/03/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4065423236266958376</id><published>2011-03-30T20:23:00.000-07:00</published><updated>2011-03-30T20:30:04.724-07:00</updated><title type='text'>QA vs. QC</title><content type='html'>In an earlier post I took a look at &lt;a href="http://logansrings.blogspot.com/2011/03/qa-isnt.html"&gt;Quality Assurance vs. Quality Control&lt;/a&gt;.  I find that there's an almost universal mislabeling of testing groups as QA when they're really QC.&lt;br /&gt; &lt;br /&gt;This week I attending a &lt;a href="http://www.castsoftware.com/Worldwide/events/capers-jones-software-risks.aspx"&gt;webinar&lt;/a&gt; where Capers Jones discussed software quality.  In the Q&amp;A session I asked Capers if he makes a distinction between QA and QC and his answer was consistent with my thinking:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Quality Assurance&lt;/span&gt; - concerned with ensuring, measuring and increasing quality&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Quality Control&lt;/span&gt; - concerned with problem detection and removal&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4065423236266958376?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4065423236266958376/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4065423236266958376&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4065423236266958376'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4065423236266958376'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/03/qa-vs-qc.html' title='QA vs. QC'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-795537763834299449</id><published>2011-03-23T15:20:00.000-07:00</published><updated>2012-01-05T19:00:39.757-08:00</updated><title type='text'>DRY SOCs</title><content type='html'>I'm taking a &lt;a href="http://www.springsource.com/training/curriculum"&gt;Core Spring training&lt;/a&gt; course this week and I'm really enjoying the challenge of taking it all in.  Core Spring is extremely powerful and comprehensive. It really eases the burden of developing enterprise applications.&lt;br /&gt;&lt;br /&gt;At the start the trainer presented the overriding tenet for Spring as an acronym: "&lt;span style="font-weight:bold;"&gt;DRY SOCs&lt;/span&gt;".  That is, &lt;a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself"&gt;Don't Repeat Yourself&lt;/a&gt; and &lt;a href="http://en.wikipedia.orghttp://www.blogger.com/img/blank.gif/wiki/Separation_of_concerns"&gt;Separation of Concerns&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That got me thinking about the acronyms/tenets that I've embraced.  Here are a few:&lt;ul&gt;&lt;br /&gt;&lt;li&gt;DTI - &lt;a href="http://en.wikipedia.org/wiki/Design_by_contract"&gt;Design To Interfaces&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LCSC - &lt;a href="http://en.wikipedia.org/wiki/Loose_coupling"&gt;Loose Coupling&lt;/a&gt; / &lt;a href="http://en.wikipedia.org/wiki/High_cohesion"&gt;Strong Cohesion&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;FCOI - &lt;a href="http://en.wikipedia.org/wiki/Composition_over_inheritance"&gt; Favor Composition Over Inheritance&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;SUFC - &lt;a href="http://www.netobjectives.com/resources/articles/separate-use-from-construction"&gt;Separate Use From Construction&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;TWVAEI - &lt;a href="http://www.informit.com/articles/article.aspx?p=167890&amp;seqNum=4"&gt;Take What Varies And Encapsulate It&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;DOD - &lt;span style="font-weight:bold;"&gt;Do Or Delegate&lt;/span&gt; - A class/method should either do work or delegate work to others. When it does both it's less cohesive and harder to understand and test. Also know as the Sargent/Private principle: either give orders or take orders.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;LYTOP - &lt;span style="font-weight:bold;"&gt;Limit Yourself To One Perspective&lt;/span&gt; - A class/method should operate at either the conceptual or implementation level.  Comprehension is easier when you don't have to move between the perspectives.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;And, of course, the revered acronym of acronyms: &lt;a href="http://en.wikipedia.org/wiki/Solid_%28object-oriented_design%29"&gt;SOLID&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-795537763834299449?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/795537763834299449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=795537763834299449&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/795537763834299449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/795537763834299449'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/03/dry-socs.html' title='DRY SOCs'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3046760424210921505</id><published>2011-03-20T09:03:00.000-07:00</published><updated>2011-03-20T10:01:08.863-07:00</updated><title type='text'>QA Isn't</title><content type='html'>The Quality Assurance team.  Every software project needs one.  Software bugs are a fact of life and QA teams are skilled at discovering and eliminating them.&lt;br /&gt;&lt;br /&gt;But this isn't quality &lt;i&gt;assurance&lt;/i&gt; really.  An emphasis on uncovering defects is  more like quality &lt;i&gt;control&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;In true QA, the quality is built-in and the entire team is focused on quality at every phase of a project.&lt;br /&gt;&lt;br /&gt;A recent post in the &lt;a href="http://blog.castsoftware.com/titanic-dilemma-the-seen-versus-the-unseen"&gt;On Quality&lt;/a&gt; blog revived my concern about the almost universal lack of true quality assurance.  I often wonder if quality would increase with a focus on the distinction between Quality Control and Quality Assurance.&lt;br /&gt;&lt;br /&gt;On Quality's post gets strait to the point:&lt;blockquote&gt;Does software quality come from testing?…No.&lt;/blockquote&gt;&lt;br /&gt;The problem is that QA's concern with what's seen doesn't address the unseen.  And that, like an iceberg, is the larger part:&lt;blockquote&gt;Testing can only address an application’s “external quality.” Testers can effectively address only visible symptoms such as correctness, efficiency or maintenance costs. What lies beneath the surface, however, the internal quality, directly impacts the external quality and can lead to even greater issues. These characteristics – program structure, complexity, coding practices, coupling, testability, reusability, maintainability, readability and flexibility – are the invisible root of the software quality iceberg and can do far more damage to a company’s reputation and IT maintenance budget than the visible issues.&lt;/blockquote&gt;&lt;br /&gt;The traditional approach, where quality is left to the developers, is problematic for a couple of reasons:&lt;ul&gt;&lt;li&gt;...time, business and cost pressures have all pushed developers to make sub-optimal choices that impact the quality and future performance of critical applications.&lt;/li&gt;&lt;li&gt;...there is just too much that needs to be reviewed for any individual developer – or even group of developers – to review efficiently and find the issues that could lead to application software malfunction.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The post recommends using automated tools to accomplish successful internal quality reviews.  But before that happens, I'd advocate for a development process that spends more time on ensuring quality is built-in rather than ensuring that bugs are taken out.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3046760424210921505?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3046760424210921505/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3046760424210921505&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3046760424210921505'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3046760424210921505'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/03/qa-isnt.html' title='QA Isn&apos;t'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1085676171858569287</id><published>2011-03-17T19:42:00.000-07:00</published><updated>2011-03-20T10:16:19.188-07:00</updated><title type='text'>Persistence Ignorance</title><content type='html'>Came across a great term today that well defines the goal of keeping the domain free of anything related to how data is persisted: &lt;a href="http://thinkddd.com/blog/2009/02/12/there-is-no-database"&gt;Persistence Ignorance&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1085676171858569287?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1085676171858569287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1085676171858569287&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1085676171858569287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1085676171858569287'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/03/persistence-ignorance.html' title='Persistence Ignorance'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6427462829007635595</id><published>2011-02-26T08:25:00.000-08:00</published><updated>2011-02-26T20:23:38.025-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>...the problem with being clever and original in software design is that it gets to be a habit - you start reflexively making things cute and complicated when you should be keeping them robust and simple. - Eric S. Raymond in &lt;span style="font-style:italic;"&gt;The Cathedral and the Bazaar&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6427462829007635595?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6427462829007635595/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6427462829007635595&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6427462829007635595'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6427462829007635595'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/quote-of-day_26.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-537729859393601187</id><published>2011-02-22T21:13:00.000-08:00</published><updated>2011-02-26T09:15:22.107-08:00</updated><title type='text'>Ruby Primer</title><content type='html'>I had a bit of good luck this week.  I found and attended a free Ruby Primer course given by Jeff Casimir of &lt;a href="http://jumpstartlab.com"&gt;jumpstartlab.&lt;/a&gt; I've dabbled a bit in Ruby and the primer provided a wealth of new learning.&lt;br /&gt;&lt;br /&gt;The course was excellent, both in content and presentation.  Jeff's background in education and teaching gives him a unique style - he's engaging and knowledgeable.  If you're in to Ruby/Rails, take a look at jumpstartlab's &lt;a href="http://jumpstartlab.com/courses"&gt;offerings.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-537729859393601187?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/537729859393601187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=537729859393601187&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/537729859393601187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/537729859393601187'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/ruby-primer.html' title='Ruby Primer'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-74458667585614888</id><published>2011-02-22T21:12:00.000-08:00</published><updated>2011-02-22T21:13:47.672-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>I'm one epiphany short of a paradigm shift. - Unknown&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-74458667585614888?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/74458667585614888/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=74458667585614888&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/74458667585614888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/74458667585614888'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8993021094160326735</id><published>2011-02-20T10:49:00.000-08:00</published><updated>2011-02-20T11:04:52.093-08:00</updated><title type='text'>Goals 2011</title><content type='html'>Well, it's the middle of February and I'm just now getting to my goals for 2011.  Better late than never!&lt;br /&gt;&lt;br /&gt;2010 was significant for me because I took charge of advancing and promoting my career.  The most important event was my job change which provided much needed momentum and new challenges and learning.&lt;br /&gt;&lt;br /&gt;For 2011 I want to continue the learning that I've started.  I want to focus on 2 things: &lt;blockquote&gt;My thinking, to get some maturity on the human and sociological thoughts and concepts that I've been gravitating towards - &lt;br /&gt;&lt;ul&gt;&lt;li&gt;How to be effective and not just efficient&lt;/li&gt;&lt;li&gt;How to add value and solve problems, with or without software&lt;/li&gt;&lt;li&gt;How to foster an environment that promotes the above&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;My technical skills in common enterprise frameworks such as Spring, Hibernate and Groovy/Grails&lt;/blockquote&gt; &lt;br /&gt;So, in 2011 I will ...&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;&lt;br /&gt;1. Read 5 software development related books&lt;/span&gt;&lt;br /&gt;There are currently 10 books in my "to read" stack and if history is a guide, that stack will grow.  This goal is a little less ambitious than last year due to goals 2 and 3.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2. Convert my "broken toy" library app to use Hibernate and Spring&lt;/span&gt;&lt;br /&gt;I want to expand my knowledge and skill with these frameworks and I need to do it on my own since I'm not working with them in my job.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3. Create a new "broken toy" app to help me keep track of the anniversaries and birthdays of my family and friends&lt;/span&gt;&lt;br /&gt;I'm always forgetting them so I could use some help.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4. Write two blog posts a month &lt;/span&gt;&lt;br /&gt;Continue with what I accomplished last year.  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Take some sort of multi-day software development training&lt;/span&gt;&lt;br /&gt;This will be a reoccurring goal.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8993021094160326735?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8993021094160326735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8993021094160326735&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8993021094160326735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8993021094160326735'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/goals-2011.html' title='Goals 2011'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5521853355777024175</id><published>2011-02-14T22:16:00.000-08:00</published><updated>2011-02-22T21:11:53.223-08:00</updated><title type='text'>The Design of Everyday Things</title><content type='html'>When I started reading &lt;i&gt;The Design of Everyday Things&lt;/i&gt; by Donald A. Norman I recalled when I encountered my first "Norman Door."  It had the same handles on both sides but only opened one way.  I scratched my head and pondered how best to operate the door.  And then felt really dumb when I chose the wrong way.&lt;br /&gt;  &lt;br /&gt;According to the author, &lt;blockquote&gt;Far too many items in the world are designed, constructed and foisted upon us with no understanding - or even care - for how we will use them. Calling something a "Norman door" is recognition of the lack of attention paid by the maker to the user&lt;/blockquote&gt;  I've been involved in numerous software projects that suffered from Norman doors, so I read this book to get a general understanding of what is a good design.  The book delivered, highlighting both good and bad designs.  And, now I no longer feel dumb when I fail at using a bad design.&lt;br /&gt;&lt;br /&gt;The book aims to answer a couple of questions:  &lt;blockquote&gt;When we first see an object we have never seen before how do we know how to use it?&lt;br /&gt;&lt;br /&gt; How do we manage tens of thousands of objects, many of which we encounter only once?&lt;/blockquote&gt;  Good designs provide: &lt;ul&gt; &lt;li&gt;Feedback so you know when something has or is happening&lt;/li&gt; &lt;li&gt;Constraints so it is impossible or not easy to make errors or mistakes&lt;/li&gt; &lt;li&gt;Affordances that show appropriate actions and hide inappropriate ones&lt;/li&gt; &lt;li&gt;Conceptual Models providing clues to how something works&lt;/li&gt; &lt;li&gt;Natural Mappings that take advantage of physical analogies and cultural standards&lt;/li&gt; &lt;/ul&gt;  I really enjoyed the chapter titled "Knowledge in the Head and in the World". Some important points for me:&lt;blockquote&gt; In everyday situations, behavior is determined by the combination of internal knowledge and external information and constraints.&lt;br /&gt;&lt;br /&gt; Whenever information needed to do a task is readily available in the world, the need for us to learn it diminishes&lt;br /&gt;&lt;br /&gt; There are two types of knowledge: Knowledge of (facts, rules) and knowledge how, which is difficult to teach&lt;br /&gt;&lt;br /&gt; Memory storage and retrieval are easier when the material makes sense and it fits into what is already known&lt;br /&gt;&lt;br /&gt; The difficulty of dealing with novel situations is directly related to the number of possibilities&lt;/blockquote&gt;&lt;br /&gt;  A couple of points that are especially applicable to software development: &lt;blockquote&gt;Creeping featurism is a disease, fatal if not treated promptly. There are some cures, but, as usual,the best approach is to practice preventive medicine. The problem is that the disease comes so naturally, so innocently. Analyze a task and you see how it can be made easier. Why, adding a feature seems so virtuous... &lt;br /&gt;&lt;br /&gt;Every student takes courses on the computational aspect of computers. But there are very few courses on the problems faced by the user...&lt;/blockquote&gt;  A couple of takeaways for me: &lt;blockquote&gt;Design is really an act of communication, which means having a deep understanding of the person with whom the designer is communicating &lt;br /&gt;&lt;br /&gt;When simple things need pictures, labels or instructions, the design has failed&lt;/blockquote&gt;  Anyone who creates something for human use or consumption, which describes those of us in software development, would benefit from the ideas and explanations in &lt;i&gt;The Design of Everyday Things&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5521853355777024175?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5521853355777024175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5521853355777024175&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5521853355777024175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5521853355777024175'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/design-of-everyday-things.html' title='The Design of Everyday Things'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-274672739063601029</id><published>2011-02-02T12:29:00.000-08:00</published><updated>2011-02-02T12:30:44.766-08:00</updated><title type='text'>Ouch!</title><content type='html'>Seen on a t-shirt:&lt;br /&gt;&lt;blockquote&gt;More people have read this t-shirt than have read your blog....&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-274672739063601029?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/274672739063601029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=274672739063601029&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/274672739063601029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/274672739063601029'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/02/seen-on-t-shirt-more-people-have-read.html' title='Ouch!'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-5788737098733351796</id><published>2011-01-01T08:47:00.000-08:00</published><updated>2011-01-02T15:52:51.001-08:00</updated><title type='text'>GOOOOALS, 2010 Review</title><content type='html'>I started blogging a little over a year ago and one of my first posts was a list of goals for 2010.  Now that it's the end of the year, let's see how I did.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2010 goal 1: Read a book a month.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I was close with 10.  Here's what I read:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Understanding the Professional Programmer&lt;/span&gt; and &lt;span style="font-style:italic;"&gt;Becoming a Technical Leader&lt;/span&gt; - Gerald Weinberg&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Cube Farm&lt;/span&gt; - Bill Blunden&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Software Craftsmanship&lt;/span&gt; - Pete McBreen&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Secrets of the Rock Star Programmers&lt;/span&gt; - Ed Burns&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;The Passionate Programmer&lt;/span&gt; - Chad Fowler&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Apprenticeship Patterns, Guidance for the Aspiring Software Craftsman&lt;/span&gt; - Dave Hoover and Adewale Oshineye&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency&lt;/span&gt; - Tom DeMarco&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Waltzing with Bears&lt;/span&gt; - Tom DeMarco and Timothy Lister&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Professional Software Development&lt;/span&gt; - Steve McConnell&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;I did start another book: &lt;span style="font-style:italic;"&gt;Write Great Code, Volume 1: Understanding the Machine&lt;/span&gt; by Randall Hyde.  This one is challenging to get through due to it's complexity and technical nature.  I will complete it this year and get to the second volume!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2010 goal 2. Finish the exploratory/learning "Rental Management System" (RMS) I've started writing in Java.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Not quite on this one.  My initial problem domain proved to be a little too complex in that I was spending more time on understanding the requirements rather than focusing on the code, so I switched to a simpler domain: a book library.  I was able to complete this system and I'm happy with the result.  The UI is not too fancy but functional.  More importantly, I really learned a lot by rolling my own persistence and error handling/logging.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2010 goal 3. Learn a new programming language by rewriting the RMS in that new language.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I really had fun with this one.  I rewrote the Java/JSF book library in Groovy/Grails.  The Grails framework is fascinating and I love its &lt;a href="http://logansrings.blogspot.com/2010/11/paradigm-shifting-again.html"&gt;abstractions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2010 goal 4.  Write two blog posts a month. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes! I got to 34:&lt;br /&gt;&lt;blockquote&gt;5 posts in January&lt;br /&gt;3 posts in February&lt;br /&gt;3 posts in March&lt;br /&gt;5 posts in April&lt;br /&gt;2 posts in May&lt;br /&gt;4 posts in June&lt;br /&gt;1 post in July&lt;br /&gt;1 post in August&lt;br /&gt;2 posts in September&lt;br /&gt;1 post in October&lt;br /&gt;5 posts in November&lt;br /&gt;2 posts in December&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5. Take some sort of multi-day software development training.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Yes!  I was able to attend the following:&lt;br /&gt;&lt;blockquote&gt;January - 10x Software Engineering at Construx Software&lt;br /&gt;&lt;br /&gt;April - &lt;a href="http://logansrings.blogspot.com/2010/04/seattle-code-camp.html"&gt;Seattle Code Camp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;September - &lt;a href="http://logansrings.blogspot.com/2010/09/pacific-nw-software-symposium.html"&gt;Pacific NW Software Symposium&lt;/a&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;All in all, I'm happy with my accomplishments and I'm looking forward to continued professional development in 2011!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-5788737098733351796?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/5788737098733351796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=5788737098733351796&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5788737098733351796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/5788737098733351796'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2011/01/gooooals-2010-review.html' title='GOOOOALS, 2010 Review'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3219185607259775194</id><published>2010-12-31T13:27:00.000-08:00</published><updated>2011-01-02T14:00:35.016-08:00</updated><title type='text'>Professional Software Development</title><content type='html'>Prior to reading &lt;span style="font-style:italic;"&gt;Professional Software Development&lt;/span&gt; by Steve McConnell I thought about Software Development as a career, but not as a &lt;i&gt;Profession&lt;/i&gt;.  And, although I'm constantly looking for ways to solve the quality and schedule problems that plague software development projects, I never really thought about whether or not a Profession's advantages would/could help solve the problems.&lt;br /&gt;&lt;br /&gt;After reading this book I'm looking at software development in a new light.&lt;br /&gt;&lt;br /&gt;The author makes a great case for a Software Development Profession, and explains how it can lead to predictable, controllable, economical and manageable projects.  He details both the problems and the solutions, and he presents the benefits in a compelling way.&lt;br /&gt;&lt;br /&gt;I don't see why software development can't be a profession like Medicine, Law, or Accounting but there are a few challenges:&lt;br /&gt;&lt;blockquote&gt;1. The immaturity of computers and software (which stands out when you compare it to Medicine or Law)&lt;br /&gt;&lt;br /&gt;2. The discounting or overlooking of quality, innovation and improvement and their associated benefits&lt;br /&gt;&lt;br /&gt;3. The fact that "good enough" software is so prevalent&lt;/blockquote&gt;&lt;br /&gt;My favorite parts of the book:&lt;br /&gt;&lt;blockquote&gt;The considerable discussion of "code and fix" development and why it's a common problem&lt;br /&gt;&lt;br /&gt;The clear and concise explanation of Fred Brooks article: &lt;span style="font-style:italic;"&gt;No Silver Bullets - Essence and Accidents of Software Engineering&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The chapter dealing with personnel or human-oriented factors&lt;/blockquote&gt;&lt;br /&gt;Anyone concerned about successful software development will gain valuable insights from the book.  In addition, the entire industry would benefit by thinking about software development in terms of professionalism.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3219185607259775194?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3219185607259775194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3219185607259775194&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3219185607259775194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3219185607259775194'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/12/professional-software-development.html' title='Professional Software Development'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2703976248020253716</id><published>2010-12-21T21:18:00.001-08:00</published><updated>2010-12-21T21:19:25.528-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>Systematic design excluding intuition yields pedestrian follow-ons and knock-offs; intuitive design without system yields flawed fancies. - Frederick Brooks, Jr. in &lt;i&gt;The Design of Design&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2703976248020253716?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2703976248020253716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2703976248020253716&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2703976248020253716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2703976248020253716'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/12/q.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-94778387665442313</id><published>2010-11-20T09:09:00.000-08:00</published><updated>2010-11-20T09:19:06.325-08:00</updated><title type='text'>Paradigm Shifting (again)</title><content type='html'>I began my software development career working with Cobol so I was one of those that had to struggle through the OO paradigm shift.&lt;br /&gt; &lt;br /&gt;Now I find myself shifting again. This time to the concept of "convention over configuration" and frameworks that abstract the mundane parts of software development like persistence and security.&lt;br /&gt; &lt;br /&gt;I love abstractions. I took it as a complement when a co-worker in a design session said I was "too abstract." So I love how the new frameworks aid in the design and creation of loosely coupled systems.&lt;br /&gt; &lt;br /&gt;Lately I've been working in Groovy/Grails and I'm really enjoying it. It's amazing how much less code you have to write to create a Groovy app with Grails, as compared to Java. You can literally get a web app created and running in a matter of minutes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-94778387665442313?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/94778387665442313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=94778387665442313&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/94778387665442313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/94778387665442313'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/11/paradigm-shifting-again.html' title='Paradigm Shifting (again)'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7690905948893935864</id><published>2010-11-14T17:05:00.000-08:00</published><updated>2010-11-14T18:05:30.448-08:00</updated><title type='text'>Slack</title><content type='html'>Much of my software development experience has been with "hurry up" organizations where the highest priority was getting work done quickly.  It was no surprise (to me anyway) that these organizations weren't very effective.&lt;br /&gt;&lt;br /&gt;So I was happy to find a Tom DeMarco book that presents a better way: &lt;i&gt;Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency - A Handbook for Managers, Entrepreneurs, and CEOs&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Slack&lt;/i&gt; is a small book that packs a quite a punch.  It's all about efficiency.  In part, "...a diatribe against efficiency." It focuses on why "hurry up" and "work harder" are wrong and why efficiency schemes, mandates and initiatives reduce, not promote, effectiveness. The book's position: &lt;blockquote&gt;It's not that "efficiency doesn't matter at all", it's that "it doesn't matter most of all"&lt;/blockquote&gt;&lt;br /&gt;In a way it concerns me that there is a need for this book.  Do we really need to be reminded that effective is better than efficient?  That knowledge workers have skills, talents and experience that are not exchangeable?  That humans are not efficient the same way machines are?&lt;br /&gt;&lt;br /&gt;Slack is:&lt;blockquote&gt;&lt;li&gt;Building a capacity to change into the modern enterprise&lt;/li&gt;&lt;li&gt;The degree of freedom in a company that allows for change and innovation&lt;/li&gt;&lt;li&gt; Room to think, innovate and reinvent&lt;/li&gt;&lt;/blockquote&gt;&lt;br /&gt;Many have written about the need for innovation.  Google CEO, Eric Schmidt, captured a key concept:&lt;blockquote&gt;The Internet has put abundant information and powerful tools in everyone's hands, innovation is often driven from the bottom up.  More than ever, innovation is disruptive and messy.  It can't be controlled or predicted.  The only way to ensure it can flourish is to create the best possible environment -   and then get out of the way.  Its a question of learning to live with a mess.&lt;/blockquote&gt;&lt;br /&gt;In a lot of companies it's efficiency - control and predictability - vs. innovation - disruptive, messy and can't be controlled or predicted.  Which side are you on?&lt;br /&gt;&lt;br /&gt;In my experience the "hurry up" organization shrinks schedules to provide a necessary "sense of urgency."  I've always bristled at that tactic - that pressure improves performance and that maximum performance can occur only in the presence of maximum pressure.  A great quote from the book (from Tim Lister) succinctly counters the concept: "People under time pressure don't think faster."&lt;br /&gt;&lt;br /&gt;I find myself in agreement with the author and the book paints an accurate and valuable picture about the state of software development.&lt;br /&gt;&lt;br /&gt;Some food for thought:&lt;blockquote&gt;Knowledge work is a card game where all the cards are wild.&lt;br /&gt;&lt;br /&gt;The more efficient you are, the harder it is to change.&lt;br /&gt;&lt;br /&gt;The missed schedule indicts the planners, not the workers.&lt;br /&gt;&lt;br /&gt;Good companies excel in the creative use of slack.  And bad ones can only obsess about removing it.&lt;br /&gt;&lt;br /&gt;The more successful a company is in extracting every bit of capacity from its workers, the more it exposes itself to turnover and attendant human capital loss.&lt;br /&gt;&lt;br /&gt;Projects in which the schedule is commonly termed aggressive or highly aggressive invariable turn out to be fiascoes.  "Aggressive schedule," ...is a kind of code phrase - understood implicitly by all involved - for a schedule that is absurd, that has no chance at all of being met."&lt;br /&gt;&lt;br /&gt;A good contract requires slack.  If a vendor commits to X by a given date, you act to your own peril to accept that commitment unless you can see that the vendor has left itself sufficient slack.&lt;br /&gt;&lt;br /&gt;When the new automation is in place, there is less total work to be done by the human worker, but what work is left is harder.&lt;br /&gt;&lt;br /&gt;When there is neither time nor staff to cope with work that runs more slowly than expected, then the cost of lateness is paid out of quality.&lt;br /&gt;&lt;br /&gt;Change can't happen without risk, and risk-taking is only possible in an environment that can be tolerant of at least some failure.&lt;br /&gt;&lt;br /&gt;Learning and reinvention take time.  If people are too busy doing the work they will never have the time to learn new ways to approach it.&lt;br /&gt;&lt;br /&gt;The earliest date by which the work could conceivable be done makes an excellent goal but an awful schedule.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Give your people time to think - innovation and reinvention will follow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7690905948893935864?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7690905948893935864/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7690905948893935864&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7690905948893935864'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7690905948893935864'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/11/slack.html' title='Slack'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6000808022606275669</id><published>2010-11-13T09:36:00.000-08:00</published><updated>2010-11-13T09:37:07.379-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>Leadership is the ability to enroll other people in your agenda - Tom DeMarco&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6000808022606275669?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6000808022606275669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6000808022606275669&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6000808022606275669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6000808022606275669'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/11/quote-of-day_13.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-9055012637339608101</id><published>2010-11-11T16:54:00.000-08:00</published><updated>2010-11-11T16:55:21.841-08:00</updated><title type='text'>Quote of the Day</title><content type='html'>People under time pressure don't &lt;i&gt;think&lt;/i&gt; faster. - Tim Lister&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-9055012637339608101?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/9055012637339608101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=9055012637339608101&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/9055012637339608101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/9055012637339608101'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/11/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6730168010422640433</id><published>2010-11-07T08:18:00.000-08:00</published><updated>2010-11-07T09:01:10.249-08:00</updated><title type='text'>Developer Bees</title><content type='html'>Came across a great post today &lt;a href="http://www.netjeff.com/humor/item.cgi?file=DeveloperBees"&gt;comparing developers to bees&lt;/a&gt; that really hit the trifecta - funny, insightful and, based on my experience, so true.&lt;br /&gt;&lt;br /&gt;It explores a basic premise: &lt;br /&gt;&lt;blockquote&gt;The environment that nutures creative programmers kills management and marketing types - and vice versa.&lt;/blockquote&gt;&lt;br /&gt;The development product - the software - is often the reason a company is hatched.  But as time goes on the software loses it's importance and is treated as a commodity.   This is so wrong because, in addition to providing business value, creative and quality software provides strategic value.  It really can be a company's competitive advantage.&lt;br /&gt;&lt;br /&gt;But only if development keeps its equal share of importance and influence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6730168010422640433?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6730168010422640433/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6730168010422640433&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6730168010422640433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6730168010422640433'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/11/developer-bees.html' title='Developer Bees'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7004201531898244984</id><published>2010-10-03T20:59:00.000-07:00</published><updated>2011-07-19T15:56:01.149-07:00</updated><title type='text'>Waltzing with Bears</title><content type='html'>I've seen many software projects fail because risks weren't addressed.  So I was interested to see what Tom DeMarco and Timothy Lister had to say about risk  in &lt;i&gt;Waltzing with Bears - Managing Risk on Software Projects.&lt;/i&gt; &lt;br /&gt;&lt;br /&gt;Software projects are all about risk.  How do you deal with the risk?  Do you welcome it?  Embrace it?  Search it out?  Or do you avoid it?&lt;br /&gt;&lt;br /&gt;Waltzing with bears explores these questions.  The right answer, according to the book, is to take on risk in a mature, honest and informed manner.  Because where there is risk there is reward.  And ultimately, competitive advantage.&lt;br /&gt;&lt;br /&gt;But dealing with risk is definitely not easy to do, or do well.&lt;br /&gt;&lt;br /&gt;The book defines risk management as the process of thinking out corrective actions before a problem occurs.  The opposite of risk management is crisis management, or trying to figure out what to do about a  problem after it happens.&lt;br /&gt;&lt;br /&gt;The prologue begins with a story to focus on how beliefs are acquired, and how beliefs can drive the approach to risk.  Do you honestly earn your beliefs in patient investigation?  Or do you simply stifle your doubts?&lt;br /&gt;&lt;br /&gt;To manage risks you must define and categorize them and not just make them disappear by ignoring them.&lt;br /&gt;&lt;br /&gt;The book explores 5 basic parts of risk management: &lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;1. Understand why it's important to do it&lt;br /&gt;2. Explore when it's appropriate to not do it&lt;br /&gt;3. Decide on much risk to take on&lt;br /&gt;4. How to go about it&lt;br /&gt;5. Know whether or not it's working &lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The book also provides a simple plan for risk:&lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;Categorize it up front&lt;br /&gt;Plan for mitigation&lt;br /&gt;See it coming&lt;br /&gt;Deal with it&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The book is full of practical advice to make the job of risk management a whole lot easier.&lt;br /&gt;&lt;br /&gt;My favorite quotes from the book:&lt;br /&gt;&lt;blockquote&gt; &lt;br /&gt;"Risk management is not the same as worrying about your project."&lt;br /&gt;&lt;br /&gt;"Risk management is project management for adults."&lt;br /&gt;&lt;br /&gt;"When a seven-month project ends up taking twelve months, angry upper managers seldom blame the schedule; Instead, they blame those who were supposed to make that schedule - no matter how ridiculous it was - into reality." &lt;br /&gt;&lt;br /&gt;Precisely stated costs and vaguely hinted-at benefits make a travesty of cost-benefit analysis.  More importantly, they also make sensible risk management impossible.&lt;br /&gt;&lt;br /&gt;Justification for the death march always takes the form of project importance: &lt;i&gt;This effort is so essential that it requires the utmost of project personnel&lt;/i&gt;. But there is a bit of a conundrum built into that statement.  If the project is so essential, why can't the company spend the time and money required to do it properly?&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7004201531898244984?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7004201531898244984/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7004201531898244984&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7004201531898244984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7004201531898244984'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/10/waltzing-with-bears.html' title='Waltzing with Bears'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2509235775867243663</id><published>2010-09-19T18:08:00.000-07:00</published><updated>2011-07-19T15:57:33.400-07:00</updated><title type='text'>Pacific NW Software Symposium</title><content type='html'>This weekend I attended the Pacific NW Software Symposium - part of the &lt;i&gt;No Fluff, Just Stuff&lt;/i&gt; tour.&lt;br /&gt;&lt;br /&gt;My goal was to get some clarification, or &lt;i&gt;concreteness&lt;/i&gt;, on the concepts I've been collecting in my head: Cloud, Google as a dev environment, Grails, NoSQL, etc.  I haven't kept pace with the industry and I have a nagging suspicion that I need to change the way I think about development.  &lt;br /&gt;&lt;br /&gt;Overall I had a great time and learned a lot.  The venue and amenities were fine, although the rooms were a bit cramped at times.  This was a full three day event (Friday, Saturday and Sunday) and much to my surprise, I wasn't "full" on the last day.  I could have kept going.  But now I need a month off to pursue the all the ideas I've accumulated over the weekend.&lt;br /&gt;&lt;br /&gt;The first day was about doing.  I attended 3 sessions presented by Jeff Brown:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Enterprise Applications With Grails&lt;/i&gt;&lt;br /&gt;&lt;i&gt;GORM Inside and Out&lt;/i&gt;&lt;br /&gt;&lt;i&gt;Building Twitter with Grails in 90 Minutes&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;I didn't have any prior exposure to Grails, which is a framework for building CRUD web apps using the Groovy language.   Grails is powerful and easy to use. It abstracts and automates the common tasks of web app authoring. During the session I was able to quickly set-up and use Groovy/Grails and by the end of the session I had a simple web app running.&lt;br /&gt;&lt;br /&gt;One of my 2010 goals is to port my "breakable toy" JSF/Java web app  to a new language.  Prior to this session I was thinking about Ruby as the new language.  After this session I think I'll give Grails/Groovy a try.  &lt;br /&gt;&lt;br /&gt;GORM is Grails Object Relational Mapping.  It sits on top of Hibernate and makes it easy to deal with persistence.&lt;br /&gt;&lt;br /&gt;In the final Grails session we were able to create a web app with the following functionality (in just 90 minutes!):&lt;br /&gt;&lt;blockquote&gt;&lt;li&gt;login / logout&lt;/li&gt;&lt;li&gt;enter text on web page&lt;/li&gt;&lt;li&gt;save in db&lt;/li&gt;&lt;li&gt;query db&lt;/li&gt;&lt;li&gt;display entries saved in db&lt;/li&gt;&lt;li&gt;caching&lt;/li&gt;&lt;li&gt;post / consume JMS messages&lt;/li&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Prior to this introduction and use of Grails I didn't really understand how frameworks make development easier.  But the sessions gave me an "aha" moment in understanding the abstraction of authentication, data input/display, persistence, etc.&lt;br /&gt;&lt;br /&gt;The second day was mostly about thinking.  I attended the following sessions:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Complexity Theory and Software Development&lt;/i&gt; by Tim Berglund&lt;br /&gt;&lt;i&gt;Decision Making in Software Teams&lt;/i&gt; by Tim Berglund&lt;br /&gt;&lt;i&gt;Pragmatic Architecture&lt;/i&gt; by Ted Neward&lt;br /&gt;&lt;i&gt;Architectural Kata Workshop&lt;/i&gt; by Ted Neward&lt;/blockquote&gt;&lt;br /&gt;It was interesting to discover the overlap between the books I have been reading and what was presented in the first two sessions.  Seems like I gravitate towards human interaction topics.  All of these sessions got my mind going.  One of my biggest challenges is affecting some kind of change that can eliminate the downside of focusing strictly on the technical side of software development.&lt;br /&gt;&lt;br /&gt;The third day was a mix of thinking and doing.  I attended the following sessions:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Cloud Computing Boot Camp on the Google App Engine&lt;/i&gt; by Matthew McCullough&lt;br /&gt;&lt;i&gt;GAELYK - Lightweight Groovy on the Google App Engine&lt;/i&gt; - Tim Berglund&lt;br /&gt;&lt;i&gt;Busy Java Developer's Guide to MongoDB&lt;/i&gt; - Ted Neward&lt;br /&gt;&lt;i&gt;Hacking Your Brain for Fun and Profit&lt;/i&gt; - Nathaniel Schutta&lt;/blockquote&gt;&lt;br /&gt;Learning about the Google App Engine and MongoDB forced me to alter and expand my software mindset.  Thanks, I needed that!&lt;br /&gt;&lt;br /&gt;The only session that didn't rate excellent with me was the Architectural Kata Workshop.  I was hoping to pick up some architecting skills but because of the attendees' skill variance and lack of domain knowledge of the kata, most of our time was spent trying to define and understand requirements.&lt;br /&gt;&lt;br /&gt;Overall, I'm very satisfied and glad I attended.  I'm looking forward to next year's event.  The main takeaway for me: Don't think "Java" anymore, think "languages of the JVM."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2509235775867243663?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2509235775867243663/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2509235775867243663&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2509235775867243663'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2509235775867243663'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/09/pacific-nw-software-symposium.html' title='Pacific NW Software Symposium'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7112210132677769326</id><published>2010-09-12T09:21:00.000-07:00</published><updated>2010-09-12T09:24:18.811-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"The difference between strategic thinking and drift is a matter of whether the key choices are made mindfully or mindlessly." - Tom DeMarco in &lt;i&gt;Slack&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7112210132677769326?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7112210132677769326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7112210132677769326&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7112210132677769326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7112210132677769326'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/09/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3601274321033065554</id><published>2010-08-18T22:07:00.000-07:00</published><updated>2010-08-18T22:09:52.513-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"While it's possible to specify a product ambiguously, it is not possible to build a product ambiguously." - Tom DeMarco and Timothy Lister in &lt;i&gt;Waltzing with Bears&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3601274321033065554?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3601274321033065554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3601274321033065554&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3601274321033065554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3601274321033065554'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/08/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-639799632359529456</id><published>2010-07-10T22:38:00.000-07:00</published><updated>2010-07-10T23:07:51.901-07:00</updated><title type='text'>Becoming a Technical Leader</title><content type='html'>I picked up Gerald M. Weinberg's &lt;i&gt;Becoming a Technical Leader: An Organic Problem-Solving Approach&lt;/i&gt; because I'm interested in the intersection of leadership and technology, having seen the results of a lack of leadership.&lt;br /&gt;&lt;br /&gt;Like all of GW's books, this book made me think and reflect personally. In this case, on my own leadership style (or lack thereof).  &lt;br /&gt;&lt;br /&gt;The book is based on the knowledge GW has acquired from 20 years of running leadership workshops. One constant about Gerald Weinberg: He is a master storyteller.  At times I forget that I'm reading a technical book.&lt;br /&gt;&lt;br /&gt;The book begins with a premise - leadership is familiar, but not well understood - and provides a basic definition: &lt;br /&gt;&lt;blockquote&gt;Technical Leadership is the process of creating an environment in which people become empowered to solve problems.&lt;/blockquote&gt;&lt;br /&gt;The book presents some interesting observations about technical leaders:&lt;br /&gt;&lt;blockquote&gt;&lt;list&gt;&lt;li&gt;They are not the pure technicians produced by the engineering and science schools, nor are they the conventional leaders trained in the schools of management.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;They have a rare combination of technical expertise and leadership skills&lt;/li&gt;&lt;br /&gt;&lt;li&gt;They have a concern for the quality of ideas and want everything to be the best&lt;/li&gt;&lt;br /&gt;&lt;li&gt;They have a nurturing process and do not take charge of people's lives&lt;/li&gt;&lt;/list&gt;&lt;/blockquote&gt;&lt;br /&gt;GW humorously describes his initial desire to avoid leadership:&lt;blockquote&gt;...to make doubly sure I would never have to deal with leadership questions, I chose a  career in computer software.&lt;/blockquote&gt;&lt;br /&gt;He then goes on to describe how he fell into leadership, which is how I see a lot technologists become leaders:&lt;blockquote&gt;Whenever I did a reasonably good technical job, my co-workers learned to respect me a bit more.  Because they respected me, they looked to me for advice, for leadership.&lt;/blockquote&gt;&lt;br /&gt;The books presents and describes leadership within two models: Linear, where one effect stems from one cause, and organic, where an event is the outcome of hundreds of other factors, including the passage of time.&lt;br /&gt;&lt;br /&gt;The linear model is focused on leading people and allows for dealing with people quickly and efficiently.  But the linear model tends to place individuals into categories or roles, or what people should be.  This results in a tendency to view leadership as simply a role of issuing threats and doling out rewards.  Also, the linear model does not handle complexity which is prevalent in most critical events involving people.&lt;br /&gt;&lt;br /&gt;The organic model defines people in terms of their uniqueness and allows different people to find a common basis for working together in complex situations.  Instead of leading people, the organic models focuses on leading process.  The organic model is useful in technical work because it takes complexity and innovation into account.  The organic model focuses on empowering people.  &lt;br /&gt;&lt;br /&gt;Technical leadership fosters an environment where change can occur.  Change in other people, change in working groups, and change in organizations. In order for change to occur the environment must contain three factors: motivation, organization and innovation.&lt;br /&gt;&lt;br /&gt;The best technical leaders use these three factors to create a problem-solving leadership style that concentrates on three major areas:&lt;br /&gt;&lt;list&gt;&lt;li&gt;understanding the problem&lt;/li&gt;&lt;li&gt;managing the flow of ideas&lt;/li&gt;&lt;li&gt;maintaining quality&lt;/li&gt;&lt;/list&gt;&lt;br /&gt;&lt;br /&gt;The book does a good job of describing both the obstacles to motivation, organization and innovation, and ways to promote them. It also describes how to transition to leadership, where you'll have a whole new set of rules but no rulebook.&lt;br /&gt;&lt;br /&gt;A couple of quotes that stood out for me are: &lt;br /&gt;&lt;blockquote&gt;Leaders that don't care about people don't have anyone to lead, unless their followers don't have a choice.&lt;br /&gt;&lt;br /&gt;Leaders have twice as many areas to criticize - both content and process.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The part of the book that I enjoyed the most is the epilogue where GW offers some really good advice on the need to think about whether or not you want to be a leader.&lt;br /&gt;&lt;br /&gt;It takes many leaders to create software that is successful. And whether or not you have &lt;i&gt;Leader&lt;/i&gt; in your title this book will help you become a problem solver and someone that others look to for advice and leadership.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-639799632359529456?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/639799632359529456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=639799632359529456&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/639799632359529456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/639799632359529456'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/07/becoming-technical-leader.html' title='Becoming a Technical Leader'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1859588544823798523</id><published>2010-06-19T10:00:00.000-07:00</published><updated>2010-06-19T08:00:54.534-07:00</updated><title type='text'>End of a Chapter</title><content type='html'>For the past couple of years I've been examining my personal and professional goals.&lt;br /&gt;&lt;br/&gt;This blog is a result of that examination and the realization that I need to take charge of my career.&lt;br /&gt;&lt;br/&gt;Another thing I realized is that I had outgrown my current position.  My goals and vision didn't match those of my employer for the last 8 years.&lt;br /&gt;&lt;br/&gt;So, one thing led to another and the result is that I'm opening a new employment chapter next week.&lt;br /&gt;&lt;br/&gt;I'm looking forward to the challenge and the opportunities to come.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1859588544823798523?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1859588544823798523/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1859588544823798523&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1859588544823798523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1859588544823798523'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/06/end-of-chapter.html' title='End of a Chapter'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2369903502335092573</id><published>2010-06-19T07:40:00.000-07:00</published><updated>2010-06-19T07:58:05.188-07:00</updated><title type='text'>Apprenticeship Patterns</title><content type='html'>In my investigating on what it means to be a professional programmer I came across a great &lt;a href="http://apprenticeship-patterns.labs.oreilly.com/index.html"&gt;on-line book&lt;/a&gt; that combines patterns and software craftsmanship:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Apprenticeship Patterns, Guidance for the Aspiring Software Craftsman&lt;/i&gt; by Dave Hoover and Adewale Oshineye.&lt;br /&gt;&lt;br /&gt;Like many of the blogs, books and sites I've been reading lately, this book reinforces my thoughts that I need to move on, and become proactive about taking my developer career to the next level.&lt;br /&gt;&lt;br /&gt;The book's stated goal is &lt;blockquote&gt;&lt;br /&gt;....to share solutions to the dilemmas that are often faced by inexperienced software developers....the dilemmas that we focus on are more personal, concerning your motivation and morale.&lt;/blockquote&gt;&lt;br /&gt;Part of the conclusion really resonates with me:&lt;blockquote&gt;&lt;br /&gt;Software development is a craft precisely because we don’t understand it well enough to make it a codified discipline like science or engineering. Despite the best efforts of groups like the Software Engineering Institute and the Agile Alliance, our field is still one where individual skill is often the most significant determining factor in a project’s success. When we use the word skill, we don’t just mean how much computer science you know or the effectiveness of your development process or how much experience you have. We mean the union of all the things it takes to deliver working software.&lt;/blockquote&gt;&lt;br /&gt;The book contains 34 patterns, or common solutions to common problems, that got me to focus on my feelings about where I am professionally.  I fit some of the books insights:&lt;blockquote&gt;&lt;br /&gt;Restless&lt;br /&gt;&lt;br /&gt;You need to grow your skills, your confidence, and your portfolio of successful work. You feel the need to challenge yourself with bigger things. This may involve bigger projects, larger teams, more complex tasks, new and business domains, or new places.&lt;br /&gt;&lt;br /&gt;You are beginning to realize how little you know&lt;br /&gt;&lt;br /&gt;As you are introduced to the vast reaches of your ignorance you are overwhelmed.&lt;br /&gt;&lt;br /&gt;Need to collaborate face-to-face with some exceptional software developers.&lt;br /&gt;&lt;br /&gt;“Just” a software developer.&lt;br /&gt;&lt;br /&gt;Current environment stifles your passion for the craft.&lt;br /&gt;&lt;br /&gt;You find that your vision of yourself is not in accord with your employer’s vision for you, and there doesn’t seem to be a way to reconcile the differences&lt;br /&gt;&lt;br /&gt;Surround yourself with developers who are better than you. Find a stronger team where you are the weakest member and have room to grow.&lt;br /&gt;&lt;br /&gt;You are months or years into your apprenticeship and you find yourself discouraged by the culture of your development organization.&lt;br /&gt;&lt;br /&gt;You find yourself stranded without mentors and in an atmosphere that seems at odds with your aspirations.&lt;/blockquote&gt;&lt;br /&gt;There's a lot of great information in the book and I'm going to keep it handy in order to keep up my motivation, morale and learning.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2369903502335092573?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2369903502335092573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2369903502335092573&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2369903502335092573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2369903502335092573'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/06/apprenticeship-patterns.html' title='Apprenticeship Patterns'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2735016793540273128</id><published>2010-06-02T20:31:00.000-07:00</published><updated>2010-06-02T20:41:31.473-07:00</updated><title type='text'>Interruptions</title><content type='html'>In a recent "lunch and learn" session our assignment was to take on a &lt;a href="http://codekata.pragprog.com/"&gt;code kata&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I worked on it at home and got buried in it,  what &lt;a href="http://en.wikipedia.org/wiki/Tom_DeMarco"&gt;Tom DeMarco&lt;/a&gt; calls "flow time."  So much so that when I stopped with a solution, two hours had passed. I know it's a common pattern among developers: you're so focused that nothing else matters.  Developers are knowledge workers and thinking is the main part of our jobs.&lt;br /&gt;&lt;br /&gt;So, what's your work environment like?  How long can you focus?  How many interruptions do you get in a day?  How many of those interruptions are even related to the task at hand?&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.geraldmweinberg.com/Site/Software.html"&gt;Gerald Wienberg&lt;/a&gt; says in &lt;i&gt;Understanding the Professional Programmer&lt;/i&gt; that "...programming computers is &lt;i&gt;by far&lt;/i&gt; the hardest intellectual task that human beings have ever tried to do. Ever."   If so, (and I think it is) then the ability to focus should be a given.&lt;br /&gt;&lt;br /&gt;It's too bad that a quiet, interruption-free development environment is so rare.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2735016793540273128?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2735016793540273128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2735016793540273128&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2735016793540273128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2735016793540273128'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/06/interruptions.html' title='Interruptions'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3008128761943671150</id><published>2010-06-01T21:09:00.000-07:00</published><updated>2010-06-01T21:14:53.040-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"Many project managers really don’t care if the end product is successful, and many times a project manager doesn’t really care if the product is useful. They are given a spec and are told when the product is needed by. Project managers maximize efficiency and control for change." - Trapper Markelz in &lt;a href="http://www.basdebaar.com/difference-project-product-management-2879.html"&gt;&lt;i&gt;The Difference between Project Management and Product Management&lt;/i&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3008128761943671150?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3008128761943671150/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3008128761943671150&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3008128761943671150'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3008128761943671150'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/06/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3349737146365141995</id><published>2010-05-25T21:58:00.000-07:00</published><updated>2010-05-25T22:01:54.066-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"Your grandmother may have told you that practice makes perfect. She was wrong. In fact, practice makes permanent. So be careful what you practice...." - Dave Hoover and Adewale Oshineye in &lt;i&gt;Apprenticeship Patterns, Guidance for the Aspiring Software Craftsman&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3349737146365141995?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3349737146365141995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3349737146365141995&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3349737146365141995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3349737146365141995'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/05/q.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4883139163481369454</id><published>2010-05-20T22:07:00.000-07:00</published><updated>2010-05-20T22:09:12.380-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"...our task in a software development project is &lt;i&gt;to manage the&lt;br /&gt;incompleteness of our communications&lt;/i&gt;" - Alistair Cockburn&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4883139163481369454?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4883139163481369454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4883139163481369454&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4883139163481369454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4883139163481369454'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/05/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6344110966186276702</id><published>2010-04-25T08:58:00.000-07:00</published><updated>2010-04-25T08:59:26.491-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"An error detected in integration is not an integration error." - Alan Shalloway&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6344110966186276702?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6344110966186276702/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6344110966186276702&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6344110966186276702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6344110966186276702'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/04/quote-of-day_25.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7297623209201969121</id><published>2010-04-19T21:09:00.000-07:00</published><updated>2010-04-19T21:19:50.237-07:00</updated><title type='text'>Seattle Code Camp</title><content type='html'>&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;I attended Seattle Code Camp this weekend.  It was a great event.  The venue, one of the buildings in the new Microsoft Commons complex in Redmond, was awesome and the logistics/amenities were excellent.   &lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;My only complaint is that the sessions were mostly focused on Microsoft technologies (SQL Server, ASP.Net, C#) - there weren't any Java/Oracle specific sessions. Having said that, I did learn something in each session I attended and I'm going to follow-up by writing some jQuery and Ruby code.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"   style="  border-collapse: collapse; font-family:arial, sans-serif;font-size:13px;"&gt;Sessions I attended:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;jQuery for the Unconvinced&lt;/b&gt; - Scott Koon&lt;br /&gt;A look at the jQuery JavaScript library.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Fast… Faster… FASTER!&lt;/b&gt; - Ade Miller&lt;br /&gt;Using the latest parallel programming features of C#, F# and C/C++ to improve performance.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Mind Mapping by Hand&lt;/b&gt; - Justin Bozonier&lt;br /&gt;A look at the presenter's maps to understand how to be a more effective note taker.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ramp Up Your Presentations!&lt;/b&gt; - Arnie Rowland&lt;br /&gt;How to succeed as an outstanding presenter.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Secure Authentication and Session Management&lt;/b&gt; - Don Ankney&lt;br /&gt;A look at how you can protect your user’s private data even if the application is compromised.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dependency Injection and Library Design&lt;/b&gt; - Chris Tavares&lt;br /&gt;A look at how Dependency Injection can be applied in a library.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Journeyman Programmer Pilgrimage&lt;/b&gt; - Liam McLennan&lt;br /&gt;What is the Software Craftsmanship movement? The highs and lows of a journeyman programmer's travels across the country.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ruby for Newbs&lt;/b&gt; - Bobby Johnson&lt;br /&gt;A basic look at the Ruby language.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7297623209201969121?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7297623209201969121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7297623209201969121&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7297623209201969121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7297623209201969121'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/04/seattle-code-camp.html' title='Seattle Code Camp'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1840025888645805125</id><published>2010-04-16T20:52:00.000-07:00</published><updated>2010-04-16T20:53:04.391-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>"Don't accommodate an impediment." - Alan Shalloway&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1840025888645805125?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1840025888645805125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1840025888645805125&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1840025888645805125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1840025888645805125'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/04/quote-of-day_16.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1595263894665467713</id><published>2010-04-11T08:47:00.001-07:00</published><updated>2010-06-06T11:53:05.695-07:00</updated><title type='text'>More Better</title><content type='html'>&lt;div&gt;Recently Jeff Atwood's Coding Horror blog had a great post about &lt;a href="http://www.codinghorror.com/blog/2010/03/the-opposite-of-fitts-law.html"&gt;User Interface and Fitt's law.&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;As mentioned in the blog Fitt's Law has a couple of basic tenets.  One is&lt;br /&gt;&lt;i&gt;&lt;blockquote&gt;Make clickable areas as large as you can. Larger targets are easier to click on.&lt;/blockquote&gt;&lt;/i&gt;Common sense, right?&lt;br /&gt;&lt;br /&gt;I was thinking of this tenet when using facebook's UI control for accessing additional posts at the bottom of a screen. The facebook control looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kTAkhjXtJ9g/S8H8DhOzemI/AAAAAAAAADE/STUrwvqoPMY/s1600/fb.bmp"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 31px;" src="http://1.bp.blogspot.com/_kTAkhjXtJ9g/S8H8DhOzemI/AAAAAAAAADE/STUrwvqoPMY/s400/fb.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5458921360740022882" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;It looks like a big button but the "Older Posts" text is the only clickable area.  There's that whole big button-like area but the user has to hit the tiny text target! &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Until I read about Fitt's Law this tiny target issue was just a nuisance.   But now when I compare it to other sites it sticks out like a sore thumb.  For example, twitter's UI control  for accessing additional posts makes it easy and obvious:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kTAkhjXtJ9g/S8H8dGZD5JI/AAAAAAAAADM/i1j_6MPDIgo/s1600/tw.bmp"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 32px;" src="http://3.bp.blogspot.com/_kTAkhjXtJ9g/S8H8dGZD5JI/AAAAAAAAADM/i1j_6MPDIgo/s400/tw.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5458921800211883154" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Just hit anywhere in the giant &lt;i&gt;more &lt;/i&gt;button.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Thats "more better!"&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1595263894665467713?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1595263894665467713/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1595263894665467713&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1595263894665467713'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1595263894665467713'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/04/more-better.html' title='More Better'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_kTAkhjXtJ9g/S8H8DhOzemI/AAAAAAAAADE/STUrwvqoPMY/s72-c/fb.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8947096731417485262</id><published>2010-04-09T21:05:00.000-07:00</published><updated>2010-04-09T21:06:47.248-07:00</updated><title type='text'>Quote of the Day</title><content type='html'>There's nothing I wouldn't do, including doing nothing - Wood Beez, Scritti Politti&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8947096731417485262?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8947096731417485262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8947096731417485262&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8947096731417485262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8947096731417485262'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/04/quote-of-day.html' title='Quote of the Day'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1695915331263411229</id><published>2010-03-29T20:21:00.000-07:00</published><updated>2010-06-06T11:54:24.609-07:00</updated><title type='text'>Secrets of the Rock Star Programmers</title><content type='html'>In keeping with my quest to learn I picked up Ed Burns' book &lt;i&gt;Secrets of the Rock Star Programmers&lt;/i&gt;.  The questions in the introduction piqued my interest:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;How in the world can I keep up with all this information coming at me every day?&lt;br /&gt;&lt;br /&gt;What can I do to ensure that I keep bringing value to my employer or client and to help ensure continued career success?&lt;br /&gt;&lt;br /&gt;What will the practice of software development look like in ten year's time?&lt;br /&gt;&lt;br /&gt;How do I know where to invest time and effort in stewarding my skillset?&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The claim on the back cover, "Find out what it takes to push your programming chops to the next level and design killer software by getting inside the minds of today's rock star programmers", is a bit over the top but it was great to get a little insight into the thoughts of some of the industry "&lt;A HREF="http://logansrings.blogspot.com/2009/12/dark-side-of-moon.html"&gt;suns&lt;/A&gt;" that I follow.&lt;br /&gt;&lt;br /&gt;After finishing the book I'm struck by a couple of things: the programmers interviewed in the book, the rockstars, are mostly (much) younger than me and mostly less "experienced" than me.  Damn! - I'm older, I have more years in the industry but I'm just another coder.&lt;br /&gt;&lt;br /&gt;I don't need to be a rockstar but it would be great to be recognized as someone who can deliver well designed, high quality applications.  Or as Rod Johnson (one of the Rockstar programmers) said, quoting E.M. Forster, "...earn the respect of people that I respect."&lt;br /&gt;&lt;br /&gt;Some other quotes that stood out for me:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Rod Johnson:&lt;br /&gt;I think if you consistently find that the right thing is hard to do, there's something wrong.  The right thing should be the right thing partly because it's easy and natural to do.  If the right thing is unnatural, that is kind of an environment smell.  It's beyond a code smell.  It's telling you something.&lt;br /&gt;&lt;br /&gt;...about 90 percent of the work that I've seen where people are optimizing code in a business application is a complete waste of time, and they're simply making the application more bug-prone...prove to me that it's a problem before you spend any time making it faster.&lt;br /&gt;&lt;br /&gt;Hani Suleiman:&lt;br /&gt;Be skeptical...There's too much eagerness: "let's follow this new approach," "let's do this new thing," and so on...Everyone looks at the upsides; no one looks at the downsides.&lt;br /&gt;&lt;br /&gt;Floyd Marinescu:&lt;br /&gt;Ultimately, we're solving business problems - I think a lot of developers need to remember that the purpose of the job is to build applications [that are] useful to users. The software is only as good as how it serves the functional and non-functional requirements of the application.&lt;br /&gt;&lt;br /&gt;Dave Thomas:&lt;br /&gt;Many IT professional don't have the concept of "component" or "system." It's just not how they think about the world. This is one reason why enterprise business objects and business architectures often run into difficulty. These organizations are frequently driven by a &lt;i&gt;project&lt;/i&gt; culture versus a &lt;i&gt;product&lt;/i&gt; culture; hence, components, reuse, and other long-terms investments have little value. Trying to do component engineering in a project culture is very, very difficult because the driver is "How does this help me get my application done faster?"  This is always in conflict with any kind of object architecture, business objects, etc.&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1695915331263411229?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1695915331263411229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1695915331263411229&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1695915331263411229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1695915331263411229'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/03/secrets-of-rock-star-programmers.html' title='Secrets of the Rock Star Programmers'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2355082423361486556</id><published>2010-03-14T19:00:00.000-07:00</published><updated>2010-03-14T19:05:38.955-07:00</updated><title type='text'>The Passionate Programmer</title><content type='html'>If your software development career needs a "kick in the pants" then you need this book. I needed this book.&lt;br /&gt;&lt;br /&gt;I ordered the book because felt my passion for quality software development growing and I wanted to get another take what it means to be passionate about programming.  &lt;br /&gt;&lt;br /&gt;Ouch! Yes, my thinking is aligned with the author's but my actions don't reflect my passion.  I was, like the book says, just floating down the stream of my career, letting the current take me where it may.&lt;br /&gt;&lt;br /&gt;For me, the preface alone was worth the price of the book:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;    If your life is primarily consumed by your work, then loving your work is one of the most important keys to loving your &lt;i&gt;life.&lt;/i&gt;  Challenging , motivating, rewarding work is more likely to make you want to get up in the morning than dull, average tasks....if you don't do your job well, a large amount of your time will be spent feeling inadequate or guilty over not performing at your best.&lt;br /&gt;&lt;br /&gt;    This book isn't about struggling to maintain the level of mediocrity required not to get fired.  It's about being awesome.  It's about winning.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;The book is also full of practical advice and "Act on It!" sections with specific, concrete steps to take to advance your career.&lt;br /&gt;&lt;br /&gt;Some gems that hit a little too close to home:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;It drives me crazy to ask people whether they've seen or used certain not-quite-mainstream technologies only to hear, "I haven't been given the opportunity to work on that" in return.  &lt;i&gt;Given&lt;/i&gt; the opportunity? Neither was I. I &lt;i&gt;took&lt;/i&gt; the opportunity to learn.&lt;br /&gt;&lt;br /&gt;Fear-driven career planning is more likely to land you in a cubicle farm for the rest of your life than on the path to greatness.  Sure, it's safe, but it's no fun.&lt;br /&gt;&lt;br /&gt;Passion leads to excellence. And without fun, there's unlikely to be any passion in a software job.&lt;br /&gt;&lt;br /&gt;You have to be passionate about your work if you want to be &lt;i&gt;great&lt;/i&gt; at your work. If you don't care, it will show.&lt;br /&gt;&lt;br /&gt;You have to start by realizing that even if you're on the bleeding edge of today's wave, you're already probably behind on the next one.&lt;br /&gt;&lt;br /&gt;Don't hide behind the shield of mediocrity.&lt;br /&gt;&lt;br /&gt;Change is not only possible in your career but necessary.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;No longer will I, as the book so succinctly states, do an excellent job at delivering a career to myself that I don't want. I'll continue to work towards becoming a Passionate Programmer - I definitely don't want to end up in a "technology hospice" where all I do is help old systems die comfortably and with dignity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2355082423361486556?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2355082423361486556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2355082423361486556&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2355082423361486556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2355082423361486556'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/03/passionate-programmer.html' title='The Passionate Programmer'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4453326853227258348</id><published>2010-03-01T20:59:00.000-08:00</published><updated>2010-03-26T22:27:57.433-07:00</updated><title type='text'>Similarities Between Interaction Designers and Agile Programmers</title><content type='html'>I've been a fan of Alan Cooper ever since I heard him speak at the Puget Sound SIG on Computer Human Interaction in 2005.  He's one of the "&lt;A HREF="http://logansrings.blogspot.com/2009/12/dark-side-of-moon.html"&gt;suns&lt;/A&gt;" I identified in an earlier post. He's insightful, outspoken and always thought-provoking.&lt;br /&gt;&lt;br /&gt;I came across an interview - Similarities Between Interaction Designers and Agile Programmers - he gave at Agile 2008 and once again I was captivated.  If you like Alan you'll love this &lt;A HREF="http://www.infoq.com/interviews/Interaction-Design-Alan-Cooper"&gt;interview&lt;/A&gt;. If you don't know of Alan you're in for a treat.&lt;br /&gt;&lt;br /&gt;I like Alan's focus on quality and the need to define the problem before creating the solution.  Some quotes that stood out for me:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;The fundamental goals of Agile programming are to let programmers who are knowledge workers get to the core of their motivation and the core motivation of all knowledge workers is to do good work. And I think there are a lot of people around the fringes of the Agile movement who don't get that yet and who think that Agile is about productivity, and it is not about productivity, I think that productivity is a byproduct, but if you set that up as your goal you will fail&lt;br /&gt;&lt;br /&gt;[agile's core is] introspection, it's doing it and then make sure we did it right, and then pay close attention to what parts of it we didn't do right, and bringing some questioning analysis to that so to increase the proportion of rightness in what you do in the future. So the essence of Agile is reflective, it's transformative and it's on going, and it's self correcting.&lt;br /&gt;&lt;br /&gt;The economics of software are qualitatively different than the economics of industry...In software there is no on-going cost, there is no manufacturing cost there is no material costs, so driving cost down just reduces the desirability of the product...What you want to do is create your number one goal, to say what do we have to do to elevate the quality, the desirability, of the end product. And when you worry about costs, you hurt that. And one of the great things that I see in Agile is an understanding that says "Hey mister businessman, stop worrying about the costs and start worrying about the quality"...don't start thinking about delivery times and don't start thinking about costs reduction and don't start thinking about ROI, think about the quality because that's why we are all playing this game.&lt;br /&gt;&lt;br /&gt; And one of the great weaknesses in the process is that there is nobody figuring out what the problem is and what the solution is. There is lots of good people figuring out how to build the solution, and there is lots of people figuring out actually building the solution....it is considered normal in the software business, that building the solution to the wrong problem is normal, and you will go on from there.&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4453326853227258348?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4453326853227258348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4453326853227258348&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4453326853227258348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4453326853227258348'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/03/similarities-between-interaction.html' title='Similarities Between Interaction Designers and Agile Programmers'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-7442653639400746859</id><published>2010-02-22T20:46:00.000-08:00</published><updated>2010-02-22T20:49:21.306-08:00</updated><title type='text'>Cube Farm</title><content type='html'>The title of Bill Blunden's book, &lt;i&gt;Cube Farm&lt;/i&gt;, piqued my interest because at times I've been one of the many development resources housed in cubes.  And although my experiences don't live up to the authors, I was able to commiserate with the narrative.&lt;br /&gt;&lt;br /&gt;I enjoyed the book. It was humorous and mirrored some of my experiences. I found quite a bit of food for thought despite the lighthearted approach. In fact, the book can be treated as one giant software development case study.&lt;br /&gt;&lt;br /&gt;The back cover sets the stage:&lt;br /&gt;&lt;blockquote&gt;Truth is stranger than fiction, especially when it comes to the workplace. Consider this book a reality check for anyone preparing to enter the work force, and a survival guide for those entangled in their own personal version of &lt;i&gt;Office Space.&lt;/i&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The preface lays out the ground rules:  &lt;br /&gt; &lt;blockquote&gt;The reality is that competition not only exists between corporations but also inside of them.  For all the cloying praise that's heaped on the concept of teamwork in business schools and by motivational speakers, in many cases your coworkers are also your opponents ... People compete for better projects, better resources, promotions, pay raises, and nicer offices.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The chapters introduce the cast of characters:&lt;br /&gt;&lt;blockquote&gt;Houdini&lt;br /&gt;Gigolo&lt;br /&gt;Godfather&lt;br /&gt;Long John Silver&lt;br /&gt;Last Mohican&lt;br /&gt;Mad Prophet&lt;br /&gt;Puppet Master&lt;br /&gt;Shill&lt;br /&gt;Wax Artist&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The physical setting, the cube farm, adds to the theatre:&lt;br /&gt;&lt;blockquote&gt;Rows upon rows of people laboring under the unremitting glow of fluorescent track lighting. If you listen carefully, you could hear the employees groan as the inverted pyramid of management bore down upon them. Being passive and obedient workers, they were milked for all they were worth.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;And the authors personal story completes the saga:&lt;br /&gt;&lt;blockquote&gt;....I participated in a smorgasbord of failed projects.  The failures were all caused by political, rather than technical problems: in fighting, empire building, backstabbing, nepotism, witch hunts, collusion, sabotage and duplicity, just to name a few. I honest believe that some software companies ... are their own worst enemies.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;A grim quote from the book is a coworkers reply to the author's lament about his multiple failed projects:&lt;br /&gt;&lt;blockquote&gt;It's just the nature of the beast. I'll tell you something. I've been in software for over 30 years, and out of those 30 years I've only shipped one product. This is just the way things are.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;If nothing else, the book got me to reflect on why this shouldn't be the way things are.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-7442653639400746859?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/7442653639400746859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=7442653639400746859&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7442653639400746859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/7442653639400746859'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/02/cube-farm.html' title='Cube Farm'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3309511180929806052</id><published>2010-02-07T12:39:00.000-08:00</published><updated>2010-02-07T13:43:41.266-08:00</updated><title type='text'>Software Craftsmanship</title><content type='html'>I've been hearing and reading a lot about software development as a craft so I picked up the book &lt;i&gt;Software Craftsmanship&lt;/i&gt; by Pete McBreen.&lt;br /&gt;&lt;br /&gt;After reading the book I realized that I have been gravitating in the craftmanship direction for some time.  It was good to get a different perspective that reinforces my thoughts.  Like the author I sense that the current state of software building is not working.&lt;br /&gt;&lt;br /&gt;The author's motivation for the book was his acknowledgment that it was time to stop complaining about the state of software development and write about the issues.  The book is a "call to arms" and the author states that "we must insist that developers really know their craft before we trust them to create systems for us or with us."  It's hard to disagree.&lt;br /&gt;&lt;br /&gt;The book does a good job of defining the traditional development approach - Software Engineering - and explains why it doesn't work and why it is not the right choice for Craft projects.  It then goes on to present the case for Software Craftsmanship.&lt;br /&gt;&lt;br /&gt;Some of the main points of software craftsmanship that I like:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;People, not processes, are the focus&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Teams are made up of skilled resources - apprentices, journeymen and craftsman - constantly learning from each other&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Software is long-lived and treated as capital&lt;/li&gt;&lt;br /&gt;&lt;li&gt;The useful life of applications is maximized because the cost and risks of replacement are immense&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Developers have unique skills and are paid to think&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Developers have a personal commitment, take pride in their work and "own" their work&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Developers need to practice - learning is hands-on&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I believe Software Craftsmanship will be embraced by shops that are open to change and improvement, but, unfortunately, will be a hard-sell in shops that are all about productivity.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3309511180929806052?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3309511180929806052/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3309511180929806052&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3309511180929806052'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3309511180929806052'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/02/software-craftsmanship.html' title='Software Craftsmanship'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2151224588578646012</id><published>2010-02-03T21:02:00.001-08:00</published><updated>2010-02-03T21:51:16.137-08:00</updated><title type='text'>Where Do You Start?</title><content type='html'>Why write software?  To solve a problem of course.&lt;br /&gt;Simply stated, software is used to model the real world, or problem domain, in the computer to solve a real world problem.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_kTAkhjXtJ9g/S2pWPEhz9fI/AAAAAAAAAA4/BfOPsjv52Tk/s1600-h/problemSolution.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 93px;" src="http://4.bp.blogspot.com/_kTAkhjXtJ9g/S2pWPEhz9fI/AAAAAAAAAA4/BfOPsjv52Tk/s400/problemSolution.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5434250717289510386" /&gt;&lt;/a&gt;&lt;br /&gt;A key question that needs to be answered initially is, “Where do you start?”  More specifically, do you start on the Problem Domain side?  On the Solution side?  Somewhere in the middle?  I've always leaned towards the “Problem Domain” side – seems to me that it’s the right answer in an agile/OO world.&lt;br /&gt;&lt;br /&gt;Jon Kern at technicalDebt.com summed up my thinking in a post titled &lt;a href="http://technicaldebt.com/archives/2008_08.html#000748"&gt;Good Judgment is Agile&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;...The key to development is separation of concerns&lt;br/&gt; &lt;br /&gt;&lt;li&gt;the &lt;b&gt;core is the problem domain&lt;/b&gt; built to support the requirements.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;get this wrong, &lt;i&gt;nothing else in the app matters.&lt;/i&gt; nothing.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;not the UI/UX.&lt;/li&gt;&lt;li&gt;not the 5th normal form DB.&lt;/li&gt;&lt;li&gt;not the worlds most articulate UML models.&lt;/li&gt;&lt;li&gt;not the worlds best cruise-controlled, TDD, 100% test coverage.&lt;/li&gt;&lt;li&gt;not the best joshua bloch-/steve mcconnel-blessed code.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;    &lt;li&gt;this core generally transcends UI, database, and even the language chosen to code the app. In other words, the "problem domain" reflects the relatively stable "business" world. I know it sounds trite, but despite all our wonderful software advances from green screen to now, the world of mortgage/insurance/banking has changed little, fundamentally, or relatively.&lt;/li&gt; &lt;br /&gt;      &lt;ul&gt;&lt;li&gt;the app is all about the "business" needs&lt;br /&gt;&lt;/li&gt;&lt;li&gt;the User Experience/UI is a separate thing&lt;br /&gt; &lt;/li&gt;&lt;li&gt;The persistence is a separate thing&lt;/li&gt; &lt;/ul&gt;  &lt;/blockquote&gt;&lt;br /&gt;Let’s say that there is a business requirement for doodads and thingamajigs:&lt;br /&gt;&lt;br /&gt;&lt;i&gt;A doodad and a thingamajig must be captured while creating a …&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;I often see a start on the solution side that goes something like this:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Doodads and thingamajigs, hmmm.  They have a code and description so they’re just simple reference data.  We’ll use a ReferenceDataWidget to supply a list of reference values from the database.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;On the problem/solution scale &lt;b&gt;“ReferenceDataWidget”&lt;/b&gt;, &lt;b&gt;“list”&lt;/b&gt; and &lt;b&gt;“database”&lt;/b&gt; fall on the solution side.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_kTAkhjXtJ9g/S2pXXu7sTjI/AAAAAAAAABA/ZA5Es6ntDqg/s1600-h/problemSolution2.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 91px;" src="http://3.bp.blogspot.com/_kTAkhjXtJ9g/S2pXXu7sTjI/AAAAAAAAABA/ZA5Es6ntDqg/s400/problemSolution2.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5434251965622930994" /&gt;&lt;/a&gt;&lt;br /&gt;Why is this a bad thing?  Because there isn’t any representation of the problem domain, i.e doodad, and there isn’t any means for abstraction of the problem, which is necessary to reduce complexity.  The client of this solution will be coupled to a specific solution implementation.&lt;br /&gt;&lt;br /&gt;Steve McConnell, in his classic book &lt;i&gt;Code Complete&lt;/i&gt;, addresses this abstraction and complexity when he talks about Programming in Terms of the Problem Domain:&lt;br /&gt;&lt;blockquote&gt;…Another specific method of dealing with complexity is to work at the highest possible level of abstraction.  One way of working at a high level of abstraction is to work in terms of the programming problem rather than the computer-science solution.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;So how about something like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_kTAkhjXtJ9g/S2pYHoyOlQI/AAAAAAAAABI/3sN2YGozyV8/s1600-h/problemSolution3.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 92px;" src="http://1.bp.blogspot.com/_kTAkhjXtJ9g/S2pYHoyOlQI/AAAAAAAAABI/3sN2YGozyV8/s400/problemSolution3.bmp" border="0" alt=""id="BLOGGER_PHOTO_ID_5434252788606342402" /&gt;&lt;/a&gt;&lt;br /&gt;The client of this solution will be coupled to an abstraction, Doodad, which can then be implemented (or re-implemented) in any fashion.  This decouples the problem domain and the solution, which allows the solution to change without affecting the client.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2151224588578646012?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2151224588578646012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2151224588578646012&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2151224588578646012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2151224588578646012'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/02/where-do-you-start.html' title='Where Do You Start?'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_kTAkhjXtJ9g/S2pWPEhz9fI/AAAAAAAAAA4/BfOPsjv52Tk/s72-c/problemSolution.bmp' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2986365895075933027</id><published>2010-01-27T20:49:00.000-08:00</published><updated>2010-02-13T12:12:24.304-08:00</updated><title type='text'>To Optimize, Or Not...</title><content type='html'>A recent code review spawned a spirited discussion about list creation and whether or not to set an initial size when the number of elements is known.&lt;br /&gt;&lt;br /&gt;In Java an array that holds 3 widgets could be create a couple of ways:&lt;blockquote&gt;&lt;br /&gt;     List list = new ArrayList();&lt;br /&gt;&lt;br /&gt;     list.add(new Widget("alpha"));&lt;br /&gt;     list.add(new Widget("beta"));&lt;br /&gt;     list.add(new Widget("gamma"));&lt;br /&gt;     &lt;br /&gt;or&lt;br /&gt;&lt;br /&gt;     List list = new ArrayList(&lt;b&gt;3&lt;/b&gt;);&lt;br /&gt;&lt;br /&gt;     list.add(new Widget("alpha"));&lt;br /&gt;     ....&lt;/blockquote&gt;&lt;br /&gt;The spirited part of the discussing boiled down to the question, "Which way is better?"&lt;br /&gt;&lt;br /&gt;The second option certainly appears better from a performance standpoint. It's logical: Letting the code create the list at the exact size needed is faster than a list that has to grow as it is populated.&lt;br /&gt;&lt;br /&gt;On the other hand, as the "premature optimization" camp believes, writing code that is easy to understand/extend/modify should be the overriding goal - you worry about optimization when you a have a specific, quantified problem - and the second option creates one more thing for a dev to keep in mind as he works the code.  That is, six months from now when a new entry is added to the list the initial size will have to be updated.  Any bets on the chance that the update will be missed?&lt;br /&gt;&lt;br /&gt;And then there's the unknown:  What does the specific compiler and/or the underlying execution do with the statement&lt;br&gt; "List list = new ArrayList(3)?"&lt;br&gt;Could there be some built in optimization that would be overridden by setting an initial list size?&lt;br /&gt;&lt;br /&gt;I was pretty vocal about the need to avoid premature optimization but I didn't want to just pontificate. I decided to get some metrics on the specific case we reviewed and the result was that using an unsized list took just a fraction of a second (6/100ths) longer.&lt;br /&gt;&lt;br /&gt;I then ran 4 sets of additional tests comparing how long it takes to add simple objects to an unsized list and a sized list.  The tests used 1 thousand, 10 thousand, 100 thousand and 1 million elements.&lt;br /&gt;&lt;br /&gt;The results showed that until the element count reached 100 thousand there was no time difference.  And at 1 million elements the typical time difference was only 120 milliseconds:&lt;blockquote&gt;&lt;br /&gt;   140 milliseconds to add to an unsized list&lt;br /&gt;   20 milliseconds to add to a list with an initial size of 1000000&lt;/blockquote&gt;&lt;br /&gt;In other words, there was only about 1/10th of a second difference when dealing with 1 million elements. An interesting discovery is that it took 2/100ths of a second longer to &lt;i&gt;create&lt;/i&gt; the sized list.&lt;br /&gt;&lt;br /&gt;So, which way &lt;i&gt;is&lt;/i&gt; better?  As always, the answer is "it depends!" This example is just a nit, but  design/coding decisions have a cumulative effect so it's important to be conscious of the trade offs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2986365895075933027?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2986365895075933027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2986365895075933027&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2986365895075933027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2986365895075933027'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/01/to-optimize-or-not.html' title='To Optimize, Or Not...'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-8897410488678195781</id><published>2010-01-15T21:22:00.000-08:00</published><updated>2010-01-15T21:27:28.595-08:00</updated><title type='text'>Books Can't Teach</title><content type='html'>A while back I bought Martin Fowler's book, &lt;i&gt;Patterns of Enterprise Application Architecture.&lt;/i&gt;  I had grand learning plans and was prepared to take it all in.&lt;br /&gt;&lt;br /&gt;I read the introduction and loved it - great information that made sense. I then read the narratives. They made some sense but the information was complicated and full of references to unknown patterns. The love was fading. Then I came to the actual patterns. Huh? It was like a foreign language. I was so confused and disheartened that I sent the book back.&lt;br /&gt;&lt;br /&gt;As time passed I had a gnawing suspicion that there was some important information in that book that I really should know (or at least know about). And then a funny thing happened.&lt;br /&gt;&lt;br /&gt;I was playing around with my little web app that I use for learning and I was rolling my own object/relational layer. I had a few design theories but every time I started to make progress some detail came up that made me rethink my approach. I realized that I could use some outside help. And then I remembered the book. I borrowed a copy and started reading.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Active Record.&lt;/i&gt; Hmmmm. &lt;i&gt;Data Mapper.&lt;/i&gt; Interesting. &lt;i&gt;Unit of Work.&lt;/i&gt; Ok. &lt;i&gt;Identity Field.&lt;/i&gt; My head was nodding.&lt;br /&gt;&lt;br /&gt;As I was pondering the patterns (the many patterns) I realized that they made sense.  I had a problem context and in this context some of the patterns jumped out as possible solutions.&lt;br /&gt;&lt;br /&gt;So, in addition to learning some new patterns I also learned an important lesson:  Books can't teach but they certainly make learning easier.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-8897410488678195781?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/8897410488678195781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=8897410488678195781&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8897410488678195781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/8897410488678195781'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/01/books-cant-teach.html' title='Books Can&apos;t Teach'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-4949312253422501501</id><published>2010-01-10T21:26:00.000-08:00</published><updated>2010-01-11T21:44:22.761-08:00</updated><title type='text'>Testing the UI and Business Logic</title><content type='html'>Michael Feathers has a post up about &lt;a href="http://blog.objectmentor.com/articles/2010/01/04/ui-test-automation-tools-are-snake-oil"&gt;UI Test Automation tools&lt;/a&gt; and the gap between the dream and the reality. The post got me to focus on some thoughts/concerns I have about testing and the UI.&lt;br /&gt;&lt;br /&gt;I've never understood the (un)intentional coupling of the UI and business logic.  I agree with Feathers: &lt;blockquote&gt;...testing your full application end-to-end through a UI Testing tool...couples some of the most important tests in your system to one of the most volatile parts of it. It’s easy for us to see business logic as volatile, but really, the UI is the thing which twists and ripples in the winds of change.&lt;/blockquote&gt;&lt;br /&gt;I've seen this coupling also create the situation where, in order to test comprehensively, every single possible data/behavior combination must be initiated from the UI.  Seems to me that the testing needed at the UI level is &lt;i&gt; does the UI meet the API of the layer below it?&lt;/i&gt;  Of course, that's only possible if the UI and the lower layer are decoupled.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-4949312253422501501?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/4949312253422501501/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=4949312253422501501&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4949312253422501501'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/4949312253422501501'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/01/testing-ui-and-business-logic.html' title='Testing the UI and Business Logic'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-2581049550663521263</id><published>2010-01-10T14:28:00.000-08:00</published><updated>2010-01-10T21:23:46.773-08:00</updated><title type='text'>Understanding the Professional Programmer</title><content type='html'>Just finished Gerald Weinberg's &lt;i&gt;Understanding the Professional Programmer.&lt;/i&gt;  The book is a collection of essays and is an easy read.  The essays are short, informative and to the point.&lt;br /&gt;&lt;br /&gt;If the author wasn't Gerald Weinberg (GW) I may have passed on this book based on the title, thinking it was about how non-programmers can understand programmers. But the book is really about how to be a successful programmer.&lt;br /&gt;&lt;br /&gt;I enjoyed the book.  This is true for almost all of the books I've read by GW - seems I either enjoy them or don't understand them. &lt;br /&gt; &lt;br /&gt;This book I definitely understood.  A lot of the material hit home and caused introspection.  Although the book was published in 1988 its concepts are timeless.  In fact, as I read the book I recognized themes that I've seen explored in contemporary books, such as code quality, productivity measurement and constant learning.&lt;br /&gt;&lt;br /&gt;The book presents the following definitions and examines them in the context of steadily improving performance:&lt;br /&gt;&lt;blockquote&gt;&lt;i&gt;Professional&lt;/i&gt; - Having great skill or experience in a particular field of activity&lt;br /&gt;&lt;i&gt;Programmer&lt;/i&gt; - A person who solves problems for other people&lt;/blockquote&gt;&lt;br /&gt;I was able to relate to many of the book's insights  - for instance:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Not all programmers qualify as professional, but few can tell the difference&lt;/li&gt;&lt;li&gt;Without professional programmers installations tend to drift into mediocrity&lt;/li&gt;&lt;li&gt;Writing code is not always recognized as a separate skill, talent or profession&lt;/li&gt;&lt;li&gt;In ill-defined situations programmers will define the problem they'd like to solve&lt;/li&gt;&lt;li&gt;Non change is the rule, and change is the exception&lt;/li&gt;&lt;li&gt;The inability to change eventually leads to dramatic or catastrophic change&lt;/li&gt;&lt;li&gt;An average programmer's needs are: belonging, esteem and self-actualization&lt;/li&gt;&lt;li&gt;Some programmers are too eager to code and too reluctant to think&lt;/li&gt;&lt;li&gt;A programmer may prove that a program does what he thinks it should do, but he cannot prove that what he thinks it should do is what the user wants it to do&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;I especially liked the book's fables. My favorite is &lt;i&gt;The Butterfly and the Buttercup&lt;/i&gt; which ends with the following moral:&lt;blockquote&gt;It's well nigh impossible for those who are motivated by productivity to understand those who are motivated by quality - and vice versa.&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;There are many amusing sections.  For example, Weinberg's Precious Programming Principles.  Some that made me chuckle:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Standards aren't standard&lt;/li&gt;&lt;li&gt;An ounce of prevention is worth a pound of cure, but management won't pay a penny for it&lt;/li&gt;&lt;li&gt;Specifications, design and coding can be done at any speed - only debugging takes time&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;The takeaway for me was the Professional Expiration Test:  When learning's finished, you're finished. To that end, I'll continue to read GW's books.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-2581049550663521263?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/2581049550663521263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=2581049550663521263&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2581049550663521263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/2581049550663521263'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/01/understanding-professional-programmer.html' title='Understanding the Professional Programmer'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-6320509811156449784</id><published>2010-01-03T18:57:00.000-08:00</published><updated>2010-01-03T19:59:15.935-08:00</updated><title type='text'>The Critic</title><content type='html'>Software developers love to critique software.  Combine this fact with my new found ability to look at UI's thru the eyes of Logan, who is four, and the urge to critique is strong!&lt;br /&gt;&lt;br /&gt;So...&lt;br /&gt;&lt;br /&gt;I use Facebook (yeah, yeah) as a simple/quick way to keep up with "friends."  My "user story" would be:&lt;br /&gt;&lt;br /&gt;&lt;i&gt; As a friend, I want to quickly scan recent posts so I can see if there is anything of interest that I want to explore further.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;Facebook recently created a duel mode UI: "Live Feed" and "News Feed".  This just confuses me. I prefer Live Feed but sometimes I'm switched to News Feed.  Which mode is active is not obvious because both modes look the same except for a small difference in text sequence, bolding and color at the top of the page. My focus, however, is not at the top of the page, it's on the posts and those look the same.&lt;br /&gt;&lt;br /&gt;It's not until I've read a few posts that I recognize them as old, a sign of News Feed.  So I switch to Live Feed, and then, OK, now I can use Facebook as I desire.  The problem (my problem?) is that the recognition and mode switch detracts from my goal of quickly scanning recent posts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-6320509811156449784?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/6320509811156449784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=6320509811156449784&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6320509811156449784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/6320509811156449784'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2010/01/critic.html' title='The Critic'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-1125394244001679144</id><published>2009-12-31T23:47:00.000-08:00</published><updated>2010-01-15T22:49:28.734-08:00</updated><title type='text'>GOOOOALS</title><content type='html'>Welcome to 2010!  Let it be a year of professional action and growth.&lt;br /&gt;&lt;br /&gt;You've got to set goals if you want to achieve, right?  And put them in writing.  It's &lt;a href="http://www.noop.nl/2009/12/checklist-for-goals-and-resolutions.html"&gt;serious stuff&lt;/a&gt;.  But, I'm not going to get too &lt;a href="http://en.wikipedia.org/wiki/SMART_criteria"&gt; complex &lt;/a&gt;.  I'm shooting for doable, understandable, manageable &amp; beneficial. &lt;br /&gt;&lt;br /&gt;So, without further ado, here are my goals for 2010:&lt;br /&gt;&lt;br /&gt;1. Read a book a month.&lt;br /&gt;Something software development related, either management or technical.  Here's my (ever growing) to-be-read list:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Becoming a Technical Leader -  Gerald M. Weinberg&lt;/li&gt;&lt;li&gt;Clean Code - Robert C. Martin&lt;/li&gt;&lt;li&gt;Exploring Requirements - Donald C. Gause and Gerald M. Weinberg&lt;/li&gt;&lt;li&gt;Handbook of Walkthroughs, Inspections, and Technical Reviews - Daniel P. Freedman, Gerald M. Weinberg&lt;/li&gt;&lt;li&gt;Pragmatic Thinking and Learning - Andy Hunt&lt;/li&gt;&lt;li&gt;The Psychology of Computer Programming - Gerald M. Weinberg&lt;/li&gt;&lt;li&gt;Software Craftsmanship - Pete McBreen&lt;/li&gt;&lt;li&gt;Understanding the Professional Programmer - Gerald M. Weinberg&lt;/li&gt;&lt;li&gt;Waltzing With Bears  - Tom DeMarco, Timothy Lister&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;2. Finish the exploratory/learning "Rental Management System" (RMS) I've started writing in Java.&lt;br /&gt;&lt;br /&gt;3. Learn a new programming language by rewriting the RMS in that new language.&lt;br /&gt;Any suggestions?&lt;br /&gt;&lt;br /&gt;4. Write two blog posts a month.  &lt;br /&gt;This is harder than it sounds (for me, at least).  &lt;br /&gt;&lt;br /&gt;5. Take some sort of multi-day software development training.&lt;br /&gt;It can't be all book-learning and coding!&lt;br /&gt;&lt;br /&gt;Wish me luck...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-1125394244001679144?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/1125394244001679144/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=1125394244001679144&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1125394244001679144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/1125394244001679144'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2009/12/gooooals.html' title='GOOOOALS'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8902414917462363900.post-3890144202375433903</id><published>2009-12-23T20:55:00.001-08:00</published><updated>2009-12-23T20:55:43.127-08:00</updated><title type='text'>Dark Side of the Moon</title><content type='html'>There is no dark side of the moon really. Matter of fact it's all dark. -- Pink Floyd&lt;br /&gt;&lt;br /&gt;I'm a moon.  That is, in the software development community I don't give off any light.  I absorb the light from the "suns", the leaders and innovators:&lt;br /&gt;&lt;br /&gt;Alan Cooper, Alan Shalloway, Alistair Cockburn, Andy Hunt, Dave Thomas, Gerald Weinberg, James Shore, Kent Beck, Martin Fowler, Robert C. Martin, Robert L. Glass, Scott Bain, Scott W. Ambler, Steve McConnell, Tom DeMarco, Ward Cunningham&lt;br /&gt;&lt;br /&gt;There are many others but these are the ones that have had a profound affect on me.  My thinking and knowledge have grown immensely due to their contributions.  I'm glad I found them.&lt;br /&gt;&lt;br /&gt;Can I be someone who contributes to the development community? Someone who has a positive affect on others?&lt;br /&gt;&lt;br /&gt;Do I have the passion?  It's building.  I'm pushing for technical excellence at work.  My gut aches when it's lacking.&lt;br /&gt;&lt;br /&gt;Do I have a desire to learn? I'm constantly reading books, blogs and articles and my reading list is ever-growing. I'm attending seminars and participating in user groups.  I'm testing my ideas and theories in code at home.&lt;br /&gt;&lt;br /&gt;Can I lead?  I've initiated OO and Agile discussions with coworkers and I've started a coding dojo.&lt;br /&gt;&lt;br /&gt;So maybe I'm sparking just a bit?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8902414917462363900-3890144202375433903?l=logansrings.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://logansrings.blogspot.com/feeds/3890144202375433903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8902414917462363900&amp;postID=3890144202375433903&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3890144202375433903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8902414917462363900/posts/default/3890144202375433903'/><link rel='alternate' type='text/html' href='http://logansrings.blogspot.com/2009/12/dark-side-of-moon.html' title='Dark Side of the Moon'/><author><name>Logan's dad</name><uri>http://www.blogger.com/profile/05253520764711841760</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://1.bp.blogspot.com/_kTAkhjXtJ9g/SzOf-O5TNhI/AAAAAAAAAAM/bPaLTIAwwio/S220/logansRings.JPG'/></author><thr:total>1</thr:total></entry></feed>
