


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

<channel>
	<title>CantRemembrances &#187; mentor</title>
	<atom:link href="http://blog.cantremember.com/tag/mentor/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cantremember.com</link>
	<description>Memes of a technical vein discovered during CantRemember.com implementation</description>
	<lastBuildDate>Sun, 07 Nov 2010 00:20:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>being too rapid on the things that matter</title>
		<link>http://blog.cantremember.com/being-too-rapid-on-the-things-that-matter/</link>
		<comments>http://blog.cantremember.com/being-too-rapid-on-the-things-that-matter/#comments</comments>
		<pubDate>Fri, 08 May 2009 05:04:51 +0000</pubDate>
		<dc:creator>dfoley</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[mentor]]></category>
		<category><![CDATA[startup]]></category>
		<category><![CDATA[tdd]]></category>

		<guid isPermaLink="false">http://blog.cantremember.com/?p=144</guid>
		<description><![CDATA[it took me a while to come up with the title for this post. and it&#8217;s and Opinion Piece, not Techincal &#8230; so you&#8217;ll see why &#8230; i&#8217;m working for a new company now, and they&#8217;re rocking it for RoR apps on the iPhone. sounds like a good place to be. one of the many [...]]]></description>
			<content:encoded><![CDATA[<p>it took me a while to come up with the title for this post.  and it&#8217;s and Opinion Piece, not Techincal &#8230; so you&#8217;ll see why &#8230;</p>
<p>i&#8217;m working for a new company now, and they&#8217;re rocking it for RoR apps on the iPhone. sounds like a good place to be. one of the many reasons why this position works for me is because these guys are all about GTD and getting it out there. lean &#8216;n&#8217; mean</p>
<p>whereas i&#8217;ve become very used to a holistic detail-orented, wisened test-backed process. great for Enterprise, but not so much for the reckless streets of Startup 3.0 .  so i&#8217;m in a learning process. i&#8217;ve turned around some good stuff quickly, and it&#8217;s very satisfying</p>
<p>but i&#8217;ve screwed the pooch twice since i&#8217;ve been there.  it&#8217;s totally a judgement call thing &#8212; i&#8217;m shooting <i>too</i> fast from the hip, and don&#8217;t feel like i really grasp the balance here &#8230;</p>
<p>first project i worked on was related to account management. they wanted a quick turn-around, i gave it a shot, had the whole thing backed with solid testing, and ready for on-time deployment with a smile. and in trying to keep track of all the new system permutations &#8212; i&#8217;d been there 2 weeks or so &#8212; i forgot one basic thing, and forgot to test for another. a nice little Perfect Storm. one emergency 1am database rollback later, we had a load of pissed customers and a helluva lot of explaining to do</p>
<p>so, then this past week, i went in to fix a minor rounding issue bug.  those can be touchy.  the <b>right</b> way to do it is with <a href="http://www.ruby-doc.org/stdlib/libdoc/bigdecimal/rdoc/classes/BigDecimal.html"><code>BigDecimal</code></a>. yep, i&#8217;ve done that in Java too with <a href="http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html"><code>BigDecimal</code></a>.  overall, it&#8217;s somewhat ponderous, detail-oriented, and can easily be polluted with <code>Float</code>s and the like.  so i&#8217;d taken a shortcut, realizing that the low-level C impl was doing String conversion without the rounding issue.  so i took the low-hanging fruit:</p>
<pre><code>total.to_s.to_i</code></pre>
<p><i>awesome !!1!</i>. well, that is until you get into the 100-of-trillions area, otherwise shown as <code>1.0e+14</code>. guess what happens when you parse that into a Fixnum? no database rollback this time, but Da Boss had to spend <i>days</i> sorting out the visceral impact of ridiculous sums of bogus exploit money pouring into our RPG</p>
<p>security, privacy and account management.  payment calculations.  not the sort of things to take shortcuts on.  yet, if you&#8217;re embracing a culture that wants it done quickly and with minimum impact, it&#8217;s a risk you might be willing to take.  it&#8217;s not like i didn&#8217;t have test scripts &#8230; i just forgot to head into scientific notation territory.  just like i forgot to check for the implication of null password acceptance <em>( long story there, special account cases, etc. )</em></p>
<p>i&#8217;m putting these things up here for my fellow developers to laugh at. &nbsp; &#8220;I mean, c&#8217;mon. All that&#8217;s totally obvious stuff.&#8221; &nbsp; &#8220;I&#8217;d never miss that, that&#8217;s sophmore shit.&#8221; &nbsp; good, get it out of your system, laughing boy</p>
<p>but believe me, when you&#8217;re on the other end of it, and had been in the middle of it and all full of all the other things that you needed to keep track of at that time, heh, well, that&#8217;s when you&#8217;ll really need to keep yerself laughing :)</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cantremember.com/being-too-rapid-on-the-things-that-matter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When Broken Toys Impact your Friends</title>
		<link>http://blog.cantremember.com/when-broken-toys-impact-your-friends/</link>
		<comments>http://blog.cantremember.com/when-broken-toys-impact-your-friends/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 22:21:07 +0000</pubDate>
		<dc:creator>dfoley</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Learning]]></category>
		<category><![CDATA[bot]]></category>
		<category><![CDATA[mentor]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://blog.cantremember.com/?p=114</guid>
		<description><![CDATA[This sure was an interesting morning! I woke up to find that I&#8217;d unintentionally sent direct messages to all of the followers on my personal Twitter account. And I&#8217;d sent them out at 1a PST, which means that anyone who (a) uses SMS capabilities, and (b) has some text message notification sound set up would [...]]]></description>
			<content:encoded><![CDATA[<p>This sure was an interesting morning!  I woke up to find that I&#8217;d unintentionally sent direct messages to <strong>all</strong> of the followers on my <a href="http://twitter.com/sleepbotzz">personal Twitter account</a>.  And I&#8217;d sent them out at 1a PST, which means that anyone who <em>(a)</em> uses SMS capabilities, and<em> (b)</em> has some text message notification sound set up would have been rudely interrupted in the middle of the night.</p>
<p>Fortunately, I haven&#8217;t lost any followers (yet).  But this was a perfect case of how mixing business with pleasure can have unintended consequences.</p>
<h3>What Have I Learned</h3>
<p>Or rather, what have I <em>re-learned</em> &#8230;</p>
<dl>
<dt><strong>Soft-disable features in Production at Launch Time</strong></dt>
<dd>&nbsp;<br />
My Twitter engines are built with both an <code>:enable_tweet</code> and <code>:enable_greeting</code> config setting.  In the git repo, they&#8217;re both <code>true</code>.  When I did my local testing, I&#8217;d disabled them correctly.  When I launched in Production, I neglected to make the quick-and-dirty changes; after all, everything worked great.  And once started, my scripts correctly responded to the no-initial-state condition, and greeted <em>everybody</em>.</p>
<p>Launch preparation is critical, even for little projects.  The start-up mentality is to move fast and lean, but there&#8217;s such as thing as too fast, and probably as too lean too.  Gradual uptake migration is a wise strategy even for the &#8216;little things&#8217;.
</dd>
<dt><strong>Mock and Integration Testing Only Gets You So Far</strong></dt>
<dd>&nbsp;<br />
I used <a href="http://rspec.info">rspec</a> to mock out the full capabilities of the engine.  Found some real-world issues, resolved them.  I also wrote some core <a href="http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html">integration tests</a>, ran them locally.  Immediate failures. I had mocked documented features that <em>didn&#8217;t actually exist</em>.  Fixed, re-mocked, re-tested, fixed again, <em>etc</em> .</p>
<p>Another great reminder that you can only mock something you trust, and how can you trust something you haven&#8217;t actually run under integration conditions to start with!  Re-tested integration, and everything passed with flying colors.  Sure, the features worked great now!  And when I launched them, they did exactly what I asked.</p>
<p>So, as if we haven&#8217;t heard it enough times, be careful what you ask for!
</dd>
</dl>
<p>All of this is familiar to anyone who has made a mistake in the software industry.  It&#8217;s not like I haven&#8217;t successfully executed dozens of critical launches in the past, and most with virtually no issues at all.  But what&#8217;s interesting is what happens when these mistakes happen in a public forum, and whom you expose them to &#8212; say, <em>your friends</em> :)</p>
<p>And who can say when two ounces of caution is more deserving than one &#8230; without the benefit of hindsight.</p>
<p>Just ask anyone who has a stringent backup policy how much time &#038; effort they invest to avoid an event that may never actually happen.  That stringency usually comes from that one unforgettable experience, and from there is born an extra layer of caution, and an additional time-sink (eg. mock &#038; integration testing)</p>
<p>Heh.  <a href="http://en.wikipedia.org/wiki/Keep_it_simple_stupid">KISS</a>.  So, what exactly is simple?  <a href="http://en.wikipedia.org/wiki/Don%27t_repeat_yourself">DRY</a>.  Isn&#8217;t that supposed to be a time-saver?  Well, it depends on what you&#8217;re not trying to repeat.  Strange how these cuddly and liberating acronyms can have more than one interpretation.</p>
<p>Experience taints everything.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cantremember.com/when-broken-toys-impact-your-friends/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

