<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>wandercoding.com</title>
	<atom:link href="http://www.wandercoding.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.wandercoding.com</link>
	<description>The Site for Software People and Their Careers</description>
	<pubDate>Sun, 23 Nov 2008 22:36:26 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5</generator>
	<language>en</language>
			<item>
		<title>Delete On Exit</title>
		<link>http://www.wandercoding.com/archives/46</link>
		<comments>http://www.wandercoding.com/archives/46#comments</comments>
		<pubDate>Sun, 23 Nov 2008 22:36:26 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=46</guid>
		<description><![CDATA[A couple of days ago, I was working on some code.  I had created a few temporary files on disk and needed to delete them.  I was going to work out a scheme for recording the file names and hooking into an exit routine to delete them.  I went to look for [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of days ago, I was working on some code.  I had created a few temporary files on disk and needed to delete them.  I was going to work out a scheme for recording the file names and hooking into an exit routine to delete them.  I went to look for the delete file command in Java and found something brilliant: File.deleteOnExit.</p>
<p>I was thrilled and stunned to be confronted with the answer to my problem.  All I had to do was call this function and Java would take care of the rest.  It doesn&#8217;t get any easier than that.  This is just one reason that I don&#8217;t agree with <a href="http://www.codinghorror.com/blog/archives/001188.html" target="_blank">Jeff Atwood</a> on his assertion that you must be a good typist to write code.  If I had blindly started writing this utility, I would have added a few dozen lines of unneeded code.  However, that&#8217;s not really the point here, just a corollary point.</p>
<p>My real point is that including deleteOnExit was brilliant.  It&#8217;s just one example of why I love Java for writing an application.  I&#8217;ve written loads of C++, and a little C# (but, not enough to know all of the hidden functionality).  What amazes me is that I&#8217;ve been able to make incredible progress on my application than I would have considered possible in C++ in more than twice the time.  Part of it is due to Java&#8217;s integrated UI, graphics, and table functionality.  In C++, there&#8217;s an object oriented language, some utility classes, and the Microsoft windowing and graphics stuff that&#8217;s really old and poorly designed.  In C#, at least there&#8217;s some integration of these things as an environment.  But, that&#8217;s still not the point.</p>
<p>Getting back to the point - including useful functionality as part of the package saves people time.  It&#8217;s part of picking the right tool for the job.  It&#8217;s why you should write a script for repetetive programming tasks.  It&#8217;s why you should refactor your code to create as many utility functions for other programmers to use.  It&#8217;s why the Extreme Programming mantra <em>you&#8217;re not going to need it</em> is only partially on the mark.  It&#8217;s why you should always think about how to make your code reusable.  It&#8217;s why you should try to write as little code as you can to do the job correctly, creating and using the tools available to make coding easier.</p>
<p>The next time you&#8217;re writing some code, think about whether there&#8217;s a way that you can make it easier to use.  Including deleteOnExit is just one example of saving thousands of users time because one programmer thought to add it to the toolkit.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/46/feed</wfw:commentRss>
		</item>
		<item>
		<title>Being There</title>
		<link>http://www.wandercoding.com/archives/45</link>
		<comments>http://www.wandercoding.com/archives/45#comments</comments>
		<pubDate>Mon, 17 Nov 2008 12:51:43 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=45</guid>
		<description><![CDATA[Today&#8217;s world of software development is decidedly more global.  Outsourcing and offshoring is common because every knows &#8220;it&#8217;s more economical.&#8221;  While I won&#8217;t debate that last statement (I&#8217;m not really convinced it&#8217;s more economical), it is simply a fact of life and not really the point of this particular post anyway.
Currently, I work [...]]]></description>
			<content:encoded><![CDATA[<p>Today&#8217;s world of software development is decidedly more global.  Outsourcing and offshoring is common because every knows &#8220;it&#8217;s more economical.&#8221;  While I won&#8217;t debate that last statement (I&#8217;m not really convinced it&#8217;s more economical), it is simply a fact of life and not really the point of this particular post anyway.</p>
<p>Currently, I work from home.  I&#8217;m doing some contract programming work for a local company.  I&#8217;m  developing an application that they had had an intern start.  The intern had spent several months working on it and it was allegedly nearing the stage where it might be considered sellable.  As it was used mainly internally, the requirements for style, bug-proofedness (is that a word?), and functional completeness were a little lax.  And so I come to inherit a piece of code written a couple of years ago by an intern.  Most of the code was unusable due to a complete lack of comments, usefully named variables, and code that wasn&#8217;t full of bugs.  Nonetheless, I was able to lift some ideas and one piece of code that undoubtedly will save me some time, but is nearly unreadable.</p>
<p>But, that&#8217;s not the point of today&#8217;s post either; it&#8217;s just some background.  The real point of this post is maintaining contact with your employer, colleagues, manager, etc. (I&#8217;m going to group these people into a term called &#8220;work folks&#8221; for future ease of reference.)  In other words, being there.  If you work remotely, getting face time with your work folks is difficult, but not impossible.  There are several options for increasing your visibility.</p>
<ul>
<li>Take a trip.  There&#8217;s really no better way to increase your visibility than actually being visible.  Take your laptop and find a desk in the middle of the place if possible (rather than a secluded conference room.  Become &#8220;one of the guys&#8221; for a week or two.  Have lunch with everyone that you can and get to know them a bit more personally.</li>
<li>Make a phone call.  If you can&#8217;t be there, at least pick up the phone occasionally rather than relying totally on email, which is far less personal.  Conversations have more range of direction that they can flow in due to their interactive nature.  The scope and types of things you can find out in a conversation are far greater than what you&#8217;ll get in an email response.  There&#8217;s also a far lower likelihood of being misunderstood or having to ask for more clarification in a followup email and the turnaround time in a conversation can&#8217;t be beat.</li>
<li>Communicate regularly.  Trips are expensive (depending on distance), phone calls aren&#8217;t always easy due to time zone issues and meeting schedules.  If nothing else, a regular email update will keep you in the minds of your work folks.</li>
</ul>
<p>Whichever mode you pick, keep up a regular pace of communication so you stay on the radar of your work folks.  It will make you feel like you&#8217;re a part of the team and make the team feel like you&#8217;re one of them as well.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/45/feed</wfw:commentRss>
		</item>
		<item>
		<title>Version 2 - Now with Chipotle</title>
		<link>http://www.wandercoding.com/archives/44</link>
		<comments>http://www.wandercoding.com/archives/44#comments</comments>
		<pubDate>Fri, 07 Nov 2008 22:19:54 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=44</guid>
		<description><![CDATA[Have you noticed that chipotle is the new baking soda.  Back in the 90&#8217;s, you couldn&#8217;t turn on the TV without seeing a commercial talking about how they added baking soda to make the product better.  Crest toothpaste - now with baking soda.  Try our laundry detergent - now with baking soda. [...]]]></description>
			<content:encoded><![CDATA[<p>Have you noticed that chipotle is the new baking soda.  Back in the 90&#8217;s, you couldn&#8217;t turn on the TV without seeing a commercial talking about how they added baking soda to make the product better.  Crest toothpaste - now with baking soda.  Try our laundry detergent - now with baking soda.  Goodyear tires - now with baking soda.  Arm &amp; Hammer Baking Soda - now with even more baking soda!</p>
<p>Well, today, chipotle is the new baking soda.  You can&#8217;t turn on the TV without seeing a commercial talking about how they added chipotle to their chicken/steak/hamburgers/barbecue/broccoli.  Although I haven&#8217;t eaten out much recently, the idea is that chipotle will give the food an extra kick of flavor that will delight you.</p>
<p>When I was writing software in the 90&#8217;s, I used to talk about advertising our next version of software as &#8220;Version 2 - now with baking soda&#8221;.  But, since we&#8217;re living in the year 2008 where chipotle is the next big thing, I&#8217;m recommending that you add it instead.  That begs the question, &#8220;How?&#8221;</p>
<p>Now that I&#8217;m doing some private contract work, my work attitude has changed considerably.  I&#8217;m no longer working for a large, bloated, cash-laden company.  It&#8217;s not like I didn&#8217;t give every company my best ideas and effort, it&#8217;s just that an environment like that tends to have long development cycles, lots of waiting for specs and testing, etc.  In other words, it often lacks a sense of urgency and a sense of true ownership and responsibility.  Now that I&#8217;m working for a friend, I have a renewed sense of all of these.  One thing that this is leading me to do is add chipotle to my software.</p>
<p>When I first sat down to talk about the application I&#8217;d be working on, I had tons of ideas, but wanted to make sure that I could continuously send software updates to keep my client aware of my progress.  I also knew that this was a first release and that my client didn&#8217;t want to spend a fortune on it.  On the other hand, a first impression is a lasting one, whether it&#8217;s your software in front of a customer, or your work for your client.  So, I regularly send updates and when I do this, I outline a list of the new functionality I&#8217;ve added and ensure that everything works well.  In addition, I try to add a little chipotle with every update.  Sure, it&#8217;s supposed to show something on the screen when this happens, but isn&#8217;t that dialog sharp looking?  Sure, it&#8217;s going to have standard printing functionality, but how about this special option that automatically does some setup that will save you tons of time?</p>
<p>When you&#8217;re working on someone else&#8217;s dime, it adds pressure to stay focused on task.  It means not wasting time (or at least not charging the customer for it).  It means adding some chipotle, especially if it doesn&#8217;t cost the customer anything extra.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/44/feed</wfw:commentRss>
		</item>
		<item>
		<title>Legacy Code</title>
		<link>http://www.wandercoding.com/archives/43</link>
		<comments>http://www.wandercoding.com/archives/43#comments</comments>
		<pubDate>Sat, 25 Oct 2008 14:30:18 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=43</guid>
		<description><![CDATA[I remember the first time I heard the term &#8220;legacy code&#8220;.  It was said with the implication that it was old, disliked, awful, God-help-you-if-you&#8217;re-sent-in-there-to-modify-it kind of stuff.  That&#8217;s not really what it applies to, however.  In many cases it&#8217;s really just code that&#8217;s not the most current stuff.  It could be [...]]]></description>
			<content:encoded><![CDATA[<p>I remember the first time I heard the term &#8220;<a href="http://en.wikipedia.org/wiki/Legacy_code" target="_blank">legacy code</a>&#8220;.  It was said with the implication that it was old, disliked, awful, God-help-you-if-you&#8217;re-sent-in-there-to-modify-it kind of stuff.  That&#8217;s not really what it applies to, however.  In many cases it&#8217;s really just code that&#8217;s not the most current stuff.  It could be stuff that the previous guy wrote that you have to modify.  And this is where I currently find myself.</p>
<p>I&#8217;m working on a project where the code was an internal application used by the folks who put together the parts that they make.  It&#8217;s about three years old, written in Java, and contains almost no useful comments.  The code is most definitely <em>not</em> self-documenting.  It was put together by a summer intern with little actual coding experience and is a real mix of working, non-working, and perplexing code.  Just upgrading to the latest java development kit has caused numerous warnings and exceptions.</p>
<p>I talked with the boss about what he wants done and then proceeded to take stock of what I&#8217;m dealing with.  The UI isn&#8217;t terribly complicated other than a large table with lots of data and a few buttons mixed into the table.  There&#8217;s some interesting functionality built into it (the table) and I&#8217;m trying to figure out if this is the best way to present this to the user or not.  I&#8217;ve got a lot of leeway on how to proceed, but the requirement that it be done fairly quickly and cheaply.</p>
<p>After looking through the code in some detail, I have determined that the overall state of it is fairly &#8220;hacked&#8221;.  It&#8217;s clear that the previous programmer didn&#8217;t understand why he was doing some things, especially related to event handling, putting icons into buttons, and computer graphics.  So, in other words, there&#8217;s a lot of unnecessary code.  The rest of the code is filled with uncommented, obscure variable names that are used, but of course, leave no indication of their job.</p>
<p>So, what&#8217;s a coder to do? I&#8217;ve tentatively decided to start by creating a new UI.  I&#8217;ve discover <a href="http://www.wandercoding.com/wp-admin/www.jaxxframework.org" target="_blank">Jaxx</a>, which, although it doesn&#8217;t seem to be undergoing any changes and needs some updating for the latest jdk, does have some nice functionality and can help me get my project going quickly.  This wasn&#8217;t an easy decision either, and I&#8217;m still second-guessing myself, but I figure that I can probably redo the basic UI with another similar toolkit in a few days, if necessary, for the next release.</p>
<p>With the new UI in place, I&#8217;ve been grabbing components of the code from the legacy application and moving it into the new framework I&#8217;ve built.  So far, it has been a few days worth of work and I&#8217;ve got a much smaller, cleaner code base to work with.  Already, the graphics are working better and there&#8217;s some separation of functionality into proper classes.</p>
<p>I plan to continue to grab code for the guts from the current app while cleaning it up, and adding some #!*!$%&amp; comments and documentation.  My decision might have been different if the circumstances were different.  A clean, logical, well commented and documented code base would have led me to modify the current code as is.  Notes on what wasn&#8217;t working yet would have helped.  Since there was no source control used, I can&#8217;t even be sure that I have the latest code.</p>
<p>Am I making the right decisions?  I believe so.  I&#8217;ve made great progress in very little time and I&#8217;m reusing the existing code, so I&#8217;m not reinventing the part of the wheel that seems to be working.</p>
<p>What legacy do I plan to leave for myself and/or the next person who takes over the code?</p>
<ul>
<li>I will comment the code and not assume that it&#8217;s so beautiful that it&#8217;s immediately intuitive.  I&#8217;ll likely be the beneficiary of this a couple of months down the road.</li>
<li>I will use some source control, so I can know where the latest code is and do release control.</li>
<li>I will track working and non-working functionality.</li>
<li>I will spend time to think about the best way to accomplish the tasks at hand by doing diligent research and design.</li>
</ul>
<p>I hope that this will lead to more interesting projects in the future with the successful delivery of this one.  Doing good work leads to more work.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/43/feed</wfw:commentRss>
		</item>
		<item>
		<title>On Your Watch</title>
		<link>http://www.wandercoding.com/archives/42</link>
		<comments>http://www.wandercoding.com/archives/42#comments</comments>
		<pubDate>Tue, 14 Oct 2008 13:43:51 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=42</guid>
		<description><![CDATA[I try to avoid politics with people I don&#8217;t know, but here goes; we&#8217;ll see how many people I insult with this post.
First, let me say how much I hate most politicians.  With some exceptions, and despite most of them starting out with good intentions, they end up as self-interested, holier-than-thou, self-righteous, dishonest, and [...]]]></description>
			<content:encoded><![CDATA[<p>I try to avoid politics with people I don&#8217;t know, but here goes; we&#8217;ll see how many people I insult with this post.</p>
<p>First, let me say how much I hate most politicians.  With some exceptions, and despite most of them starting out with good intentions, they end up as self-interested, holier-than-thou, self-righteous, dishonest, and dishonorable windbags.  Like most Americans, I have a vested interest in the current election.  After eight years suffering through the results of the Bush Presidency (financial crises, foreign wars that we started, declining dollar, skyrocketing oil, etc.), I, like most of you, am looking forward to a regime change.</p>
<p>It&#8217;s an interesting mix of people running for the top spots.  On one side, we have Barack Obama, who touts the word &#8220;change&#8221; as if that&#8217;s all it takes to make everything in Washington work as it should.  He seems to have a good understanding of economic policy (if anyone can really &#8220;understand&#8221; it) and is clearly a very smart man.  His running mate, Joe Biden, albeit a &#8220;gaffe machine&#8221;, has been around Washington long enough to know how it really works and can give Obama an earful on the foreign policy experience that Obama lacks.</p>
<p>On the other side we have John McCain, decorated war veteran, who served his country with distinction.  He&#8217;s a smart man as well, and clearly cares for his country.  He&#8217;s more &#8220;old school&#8221; on some issues, like maitaining troops in Iraq to ensure long-term stability.  However, his plan to give more tax cuts to the wealthy (like Reagan&#8217;s and Bush Jr.&#8217;s trickle-down economics) and health-crisis plans (&#8221;we&#8217;ll assemble the best minds in the country&#8221;, gee, why didn&#8217;t anyone else think of that?) are clearly out of touch.  His negative campaign has been thoroughly disgusting.  If he wants to win any votes, he should run on his positive image and his policy plans.  And, if he really cares about his country, he should end the divisive retoric in his messages.   His running mate, Sarah Palin, while likeable, is clearly out of touch with the world.  Who would have thought that she&#8217;d be tapped as a V.P. candidate?  Clearly not Palin or she might have picked up a Time magazine, read it, and remembered what it was called.</p>
<p>Our current President dug himself into so many holes due to his own hubris, ignorance, and lack of respect for the opinions of others.  While he didn&#8217;t bring down the World Trade Center, his  administration had clues of attacks that were ignored.  He didn&#8217;t make risky loans to homeowners, but he was in office making sure that his rich friends were well looked after, got all of the appropriate tax cuts, and had little oversight in the process.  He clearly wasn&#8217;t responsible for invading two countries (Irag and Afghanistan), but, oh wait, that was all him, wasn&#8217;t it?  Yes, it all happened on his watch.</p>
<p>How does all of this apply to you and me?  It applies in several ways.  First, it&#8217;s our responsibility to choose the next people to run the country.  I can&#8217;t tell you who will do the better job.  I can only implore you to select the people who are smart, won&#8217;t repeat the mistakes of the past, and will keep an open mind to changing the status quo.  It also wouldn&#8217;t suck if they could pronounce nuclear properly (it&#8217;s new-klee-ur, not new-kya-ler).</p>
<p>Second, when you see things that are screwy in your own life (at work or home), you have the responsibility to make recommendations to the powers that can do something about them.  If you&#8217;re the manager who has the power and you know something is going on in your own group, then it&#8217;s your responsibility to make it right.  Turning a blind eye and hoping it will go away or somehow just work out, will not make it so.  What happens is on your watch.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/42/feed</wfw:commentRss>
		</item>
		<item>
		<title>Will Code For Food</title>
		<link>http://www.wandercoding.com/archives/41</link>
		<comments>http://www.wandercoding.com/archives/41#comments</comments>
		<pubDate>Thu, 02 Oct 2008 19:19:09 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=41</guid>
		<description><![CDATA[A couple of years ago I was looking for work in the Ithaca, NY area.  Several people helped me find local companies and gave me moral support along the way.  I ended up working for a small company that subcontracted me to a very large local defense contractor.  It was a great [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of years ago I was looking for work in the Ithaca, NY area.  Several people helped me find local companies and gave me moral support along the way.  I ended up working for a small company that subcontracted me to a very large local defense contractor.  It was a great experience on many levels.  Since I left that job about a year ago, I&#8217;ve been working on some smaller personal projects, including my book.</p>
<p>Since I&#8217;m the most recent person amongst many former colleagues to go through the job search process, I&#8217;ve become the local go-to person for help with resumes and local companies.  It&#8217;s a &#8220;job&#8221; that I happily do to help out my friends and neighbors.  Recently a friend of a friend came here from India after a several year hiatus from coding to take care of a sick parent.  His name is Joe Pierce, like most other folks from India that you speak to over the phone.  I never met Joe or even spoke to him.  I told my friend to have Joe send his resume to me so I could think of what local places he might look at and see if I could give him any good contacts.</p>
<p>When I received his resume and cover letter, it was a disaster.  It covered three (!) pages and consisted of nine mostly short-term (e.g. 4 - 6 month) contract jobs over a twelve year period.  Two things were painfully obvious looking at it.  One, it was too long for such a short time period (a resume should be only one or two pages).  Two, Joe was over 60 years old.</p>
<p>I&#8217;m not suggesting that being over 60 is inherently bad, but this is what he was presenting to a potential employer:  I&#8217;m 63 years old, haven&#8217;t worked in 6 years, and most of my jobs have lasted around 4 months.  Age discrimination may be illegal, but that&#8217;s no reason to stick it somebody&#8217;s face either.  I suggested several changes:</p>
<ul>
<li>Remove the years that he went to school - turns out this is becoming a common practice.</li>
<li>Highlight the skills he has in a good summary.</li>
<li>Shorten the whole thing to a page or two.</li>
</ul>
<p>He was hesitant to take away the dates or change to a functional resume (people thought he was hiding something - he was, of course).  On the other hand, your chances of anyone giving this guy a second thought are fairly slim.  Your first job in job hunting is to get your foot in the door.  You do this by having an intriguing resume and getting to the hiring manager, rather than the HR department.  Once you get an interview, it will become very obvious that you&#8217;re old or young, short or tall, skinny or fat, American or not.  None of these things should matter at all, but first you have to get to the interview.  After that, you have the opportunity to present yourself in the best light possible and hopefully that comes out in person.  You show up on time for the interview, you&#8217;re knowledgeable on the subject matter, and you seem like you&#8217;ll fit into the personality of the company.</p>
<p>Looking for a job is a full time job.  Like any other job, you have to do some preparation, studying, and practicing to do it well.  Get some good books out of the library (e.g. What Color Is Your Parachute), hit some good web sites (I recommend wandercoding.com <img src='http://www.wandercoding.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> ), and use your network of friends and former colleagues to help.  Don&#8217;t dawdle - it&#8217;s your new job.</p>
<p>Epilogue: Unfortunately, unable to find work after 3 months, Joe returned to India.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/41/feed</wfw:commentRss>
		</item>
		<item>
		<title>You Write What?</title>
		<link>http://www.wandercoding.com/archives/40</link>
		<comments>http://www.wandercoding.com/archives/40#comments</comments>
		<pubDate>Tue, 23 Sep 2008 12:32:46 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=40</guid>
		<description><![CDATA[When I meet new people, they inevitably ask me what I do for a living.  I usually tell them that I write software (when I tell them that I rob banks, they often don&#8217;t believe me).  Some people understand what that is and some don&#8217;t.  It&#8217;s like the t-shirt I&#8217;ve seen that [...]]]></description>
			<content:encoded><![CDATA[<p>When I meet new people, they inevitably ask me what I do for a living.  I usually tell them that I write software (when I tell them that I rob banks, they often don&#8217;t believe me).  Some people understand what that is and some don&#8217;t.  It&#8217;s like the t-shirt I&#8217;ve seen that says, &#8220;There are 10 kinds of people in the world - those that understand binary and those who don&#8217;t.&#8221;  The ones that do understand software might ask me what kind of software.  The others just say things like, &#8220;You gotta be smart to do that.&#8221;  While that should be a prerequisite for writing software, it&#8217;s not universally enforced, and thank goodness for that because some days&#8230;</p>
<p>Now, when I get in longer conversations, I also tell people that I&#8217;m writing a book about software - more specifically about software career related items (a lot like this web site, and no, it&#8217;s not just a collection of the blog posts contained herein.)  A while ago, it occurred to me how similar writing a book and writing software are.</p>
<p>Creating an outline for a book is like planning the features for your software.  Writing the text of a book is like writing the software.  You even get syntax highlighting (spelling and grammar mistakes) pointed out by your integrated development environment (Microsoft Word, Star Office, WordPerfect, etc.)  QA and bug fixing comes in the form of proofreading.  Beta testing comes when you get other people to read what you&#8217;ve written and see if it&#8217;s logical, solves their problem(s) (even novels solve the problem of boredom or provoking thought), or provides a proof of concept.   Then, when you&#8217;re done, you have to try to sell the book/software.  Books, however, have traditionally been first sold to a publishing house, which is supposed to weed out the unpublishable.  This is not a flawless plan, however.  Some books are published that are boring as h**l and practically useless.  Classics such as Jonathan Livingston Seagull, Lolita, and The Diary of a Young Girl (Anne Frank) were rejected by numerous publishing houses.  Software used to have a similar avenue of distribution - you&#8217;d have to find stores to carry your software or advertise it in magazines and catalogs that catered to the end-user crowd.</p>
<p>Nowadays, publishing software is easy - just post it on your website for download.  Book publishing has easy alternatives, too.  Print on demand technology allows writers to bypass traditional publishing houses as does electronic publishing.  In both books and software there is risk.  Both require commitment, belief in what you&#8217;re doing, and a desire to overcome obstacles.  The results are almost always unpredictable and what keeps life interesting and exciting.  More to come&#8230;, wish me luck, buy the book (when it comes out in a couple of months).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/40/feed</wfw:commentRss>
		</item>
		<item>
		<title>The Forest and the Trees</title>
		<link>http://www.wandercoding.com/archives/39</link>
		<comments>http://www.wandercoding.com/archives/39#comments</comments>
		<pubDate>Fri, 12 Sep 2008 12:31:06 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=39</guid>
		<description><![CDATA[Here are a couple of definitions for you.  According to the Merriam Webster dictionary:
Strategy: noun,  A careful plan or method.
Tactic: noun, a device for accomplishing an end.
These definitions work perfectly for talking about software management.  When I was a manager a few years ago, some of my colleagues told me to stop [...]]]></description>
			<content:encoded><![CDATA[<p>Here are a couple of definitions for you.  According to the Merriam Webster dictionary:</p>
<p>Strategy: <em>noun</em>,  A careful plan or method.</p>
<p>Tactic: <em>noun</em>, <span class="sense_break"><span class="sense_content">a device for accomplishing an end.</span></span></p>
<p>These definitions work perfectly for talking about software management.  When I was a manager a few years ago, some of my colleagues told me to stop worrying so much about the tactical and start worrying about the strategic. First, I had to stop and think about what they were driving at.  As a software engineer turned manager (without much training in management), my approach was often to keep an eye on the code, what the people were doing with it, and how they were doing it.  I was very good at helping solve problems that arose, coaching developers, adding some code occasionally (when I had time), and understanding what we were developing and why.  For most engineers who move into management, this is perfectly normal and can be very effective.  This is tactical thinking - what steps do we take to get from where we are to were are going.</p>
<p>What I wasn&#8217;t as good at (at least not then) was taking a step back from the day to day activities and looking at things as a whole.  Do we have the right tools?  Are our goals clear and correct?  Are there more global changes to be made, such as schedule changes, personnel changes, feature scoping, etc.?  Sure, I was good at some of these things, but not all the time.  I would often get my head buried in the day to day operation of my group and not take the time to step back and look at the big picture.  Looking at your overall goals is strategic thinking.</p>
<p>One thing I believe is lacking in many organizations (certainly in the places that I worked) is quality management training.  Yes, I took classes in the legal aspects of management, how to develop a schedule (fine for waterfall methods), and how to communicate effectively.  However, so much of management is fuzzy, and some new skills are required.  How much time should you spend on various activities?  What is your priority as a manager?  What&#8217;s the best tool for scheduling and how to use it most effectively (MS Excel, MS Project, Rational, Visio, something else)?  How frequently should you meet with your team members, colleagues, and manager?  What&#8217;s the proper proportion of time to spend on various management activities?  For example, some managers spend so much time in meetings, they never learn anything about your software and never know what is really going on.  Then they&#8217;re surprised at inconvenient times to find out what the actual situation is.</p>
<p>In future posts, we&#8217;ll address some of these things.  For now, whether you&#8217;re in management or not, take a step back and take a look at what you&#8217;re doing.  Stop worrying for a minute about your current problem and ask if you&#8217;re even solving the right problem.  Are you worried about the tree when you should be thinking about the forest?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/39/feed</wfw:commentRss>
		</item>
		<item>
		<title>Same S**t, Different Year</title>
		<link>http://www.wandercoding.com/archives/38</link>
		<comments>http://www.wandercoding.com/archives/38#comments</comments>
		<pubDate>Fri, 05 Sep 2008 13:07:03 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=38</guid>
		<description><![CDATA[For the past few years, I&#8217;ve been playing fantasy football.  If you&#8217;re not familiar with the concept, you join a league with some other people, pick a name for your team, and then draft players from the NFL.  There&#8217;s an order for picking players based on your record from last year and each [...]]]></description>
			<content:encoded><![CDATA[<p>For the past few years, I&#8217;ve been playing fantasy football.  If you&#8217;re not familiar with the concept, you join a league with some other people, pick a name for your team, and then draft players from the NFL.  There&#8217;s an order for picking players based on your record from last year and each NFL player can only be chosen by one team owner.  Your score for each game against another team (usually one &#8220;game&#8221; per week) is based on the yardage and scoring that your players contribute to their real NFL teams.</p>
<p>I&#8217;ll be honest - I&#8217;m a pretty good owner.  I&#8217;ve won the title once and come in second twice.  My success is based on a sound strategy:</p>
<ol>
<li>I pick as many good running backs and wide receivers as I can early because they tend to score more points on a weekly basis.</li>
<li>I pick the best player available at the time.  The best player available is determined by what is recommended by a couple of sources (magazines and web sites) as I figure that they probably know more than I do.</li>
<li>After each week during the season, I look for trends in the past couple of weeks to see if there&#8217;s an undrafted player who is really producing that I can pick up and I drop one of my non-producing players.</li>
</ol>
<p>One of my opponents in the league follows a different strategy.  He arms himself with all of the same kinds of data that I have.  Then he follows hunches and drafts players way too early (when they will probably still be available in later rounds), thereby wasting his good picking position.  He ends up with a good picking position (much better than mine) because he&#8217;s always finishing in the bottom half of the league.  So, not only does he have a bad strategy and bad results, but he never seems to learn from his previous mistakes.  Of course, luck is involved in this game.  Injuries will take your best players out for weeks or even the whole year.  The best running back in the league will have a crummy offensive line and get nowhere.  The NFL coach will let your running back do all the yardage work and let some guy come off the bench to score all the touchdowns.  However, even with all of this, a sound strategy, a good bench, reacting to the situation, and contingency plans can keep your team in the playoff picture.</p>
<p>After draft night last weekend, I got to thinking how similar this was to my last product at a former company.  Every release we would get a feature set, spend a couple of months designing the features, do estimates based on our design, argue over the validity of our estimates, and end up with a feature set that just fit into our time allotted.  The end of the development cycle would come up right at the end of the year, just before the holidays and the week off we were supposed to get.  The end of the entire release (bug fixing time) would coincide with the company&#8217;s flagship product which we were supposed to ship with.  In other words, we were set up to work under stress with little margin for error.  Inevitably, we would start to run behind, have to work through the week off during the holidays and go through a death march, working nights and weekends, for four months until we shipped.  We had a bad strategy, poor contingency plans, and never seemed to learn from our previous mistakes.  Before the next release, we&#8217;d say, &#8220;Well, we&#8217;ll just have to do a better job designing and estimating this year.&#8221;  It&#8217;s a classic waterfall development cycle without any room for error, and no contingencies built in.</p>
<p>In previous products, we might use the waterfall method, but when time was running out, we&#8217;d be able to drop a feature to keep the release process sane.  In any software release, you have the three main variables built in: time (including people, so person-hours), quality, and functionality.  Things work best when there&#8217;s flexibility in the quality and functionality parts.  The powers that be usually don&#8217;t like to ship extremely buggy software, so there&#8217;s only so much flexibility on the quality end.  If you aren&#8217;t willing to drop any functionality, you expand the person-hours.  Given that you usually have a set team size (and don&#8217;t forget that adding people to a late project doesn&#8217;t usually help) that means simply working more hours.  As appealing as that sounds to upper management, especially those who haven&#8217;t written software in years, working tons of overtime doesn&#8217;t help as much as you might think.  The garbage that gets written after you&#8217;ve been working for ten or twelve hours in a day is truly staggering.  I frequently came in the next morning wondering what on earth I was thinking when I wrote that code or fixed that bug the night before.  Essentially, I wasted hours of my life and didn&#8217;t help the project any.</p>
<p>If your release cycles are going the same way, take action sooner than later.  Be willing to drop functionality as the release falls behind (lots of features are extraneous &#8220;nice to haves&#8221; not &#8220;need to haves&#8221;).  Use a different release cycle process - will an agile process work where you are?  Push the ship date back - many (but not all) ship dates are simply chosen out of thin air.  When you push back at management or marketing, sometimes you&#8217;ll find that these dates really are flexible.  The worst thing is to keep making the same mistakes over and over again.  Can you get better at designing and estimating?  Sure you can.  Will it ever be perfect?  Unlikely.  Do some companies succeed this way?  Sure.  Has yours?  Chances are that it hasn&#8217;t, which is why you&#8217;re still nodding your head as you read this.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/38/feed</wfw:commentRss>
		</item>
		<item>
		<title>Fuzzy Front End</title>
		<link>http://www.wandercoding.com/archives/37</link>
		<comments>http://www.wandercoding.com/archives/37#comments</comments>
		<pubDate>Sat, 30 Aug 2008 15:03:36 +0000</pubDate>
		<dc:creator>bill</dc:creator>
		
		<category><![CDATA[Career Related]]></category>

		<guid isPermaLink="false">http://www.wandercoding.com/?p=37</guid>
		<description><![CDATA[In Steve McConnell&#8217;s excellent book, Rapid Development, he talks about wasting time during the fuzzy front end.  This is the time of a project when you&#8217;re waiting for the new specifications to come from product design or marketing or whoever does the up-front design work for your product (or web site, etc.).  After [...]]]></description>
			<content:encoded><![CDATA[<p>In Steve McConnell&#8217;s excellent book, Rapid Development, he talks about wasting time during the fuzzy front end.  This is the time of a project when you&#8217;re waiting for the new specifications to come from product design or marketing or whoever does the up-front design work for your product (or web site, etc.).  After a release, especially an intense one, it&#8217;s natural to need some slow time.  Keeping up a high-intensity pace on a permanent basis leads to rapid burnout, which isn&#8217;t very productive in the long term.</p>
<p>So, what can you do and what should you do?  Here are some ideas for you next time you run into this time period.</p>
<ul>
<li>Clean up time.  Go through your code and find all of the crappy stuff you wrote because you didn&#8217;t have time to think it through clearly.  Rewrite it the way you really should have.</li>
<li>Fix up the buggy back end.  How many bugs didn&#8217;t you fix at the end of the previous release?  Now&#8217;s a good time to fix the low hanging fruit or the ones that seemed too risky to attempt just before release.</li>
<li>Design time.  What would you like to see your system structured like in the future?  Can you design it differently to accommodate the expected feature set?  Will some new designs make it easier to add new functionality?</li>
<li>Toolkit time.  Do you have a lot of semi-repetitive or duplicated code in your system?  Is it time to take these routines or classes and create a toolkit from them that can be called by the rest of the system?</li>
<li>Prototype time.  As long as you don&#8217;t get too possessive of your new code, can you develop a small prototype for some expected new functionality?  If you do, show it to the designers and see if it affects their thoughts on how something might look.  I have long thought that the developers of a product can make excellent designers if consulted early and often during the design process.  Are your developers actually the designers of your product?  Great, but having someone be the overall supervisor of design work can make your product more consistent from a look and feel standpoint and can coordinate possibly redundant development work.</li>
</ul>
<p>The fuzzy front end doesn&#8217;t have to be a waste of time.  Your developers can be more productive if they have a clue of what might be coming and what&#8217;s expected of them.  Making sure that they know that possible functionality isn&#8217;t cut in stone will help ensure that time and effort isn&#8217;t wasted on completed functionality before the details come out.  Setting some clear goals for the fuzzy time can help keep them focused on using the time to their advantage and keep them from going crazy while waiting for the action to begin.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.wandercoding.com/archives/37/feed</wfw:commentRss>
		</item>
	</channel>
</rss>
