<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	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/"
		>
<channel>
	<title>Comments on: Is Monkey Patching in Flex Evil?</title>
	<atom:link href="http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/feed/" rel="self" type="application/rss+xml" />
	<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/</link>
	<description>Enterprise Software Consultant</description>
	<lastBuildDate>Mon, 15 Mar 2010 20:02:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: SpookyLuke</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-21332</link>
		<dc:creator>SpookyLuke</dc:creator>
		<pubDate>Tue, 09 Feb 2010 15:22:15 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-21332</guid>
		<description>Evil: A rare (in my world) but very necessary evil.  At technique that isn&#039;t limited to the flex SDK classes either. I&#039;m not against it at all, but its use should be judicious and the risk should be carefully managed on any  projects that are not throw-away applications. Usually it is a good sign that you need to ask the vendor to sort it out, or possibly that your solution uses the wrong approach, because of course no one makes design errors do they?</description>
		<content:encoded><![CDATA[<p>Evil: A rare (in my world) but very necessary evil.  At technique that isn&#8217;t limited to the flex SDK classes either. I&#8217;m not against it at all, but its use should be judicious and the risk should be carefully managed on any  projects that are not throw-away applications. Usually it is a good sign that you need to ask the vendor to sort it out, or possibly that your solution uses the wrong approach, because of course no one makes design errors do they?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: JesterXL</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20823</link>
		<dc:creator>JesterXL</dc:creator>
		<pubDate>Sat, 14 Mar 2009 06:48:02 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20823</guid>
		<description>This is a very complex subject, you can&#039;t just make it black and white.  For example, it depends on what you define as Monkey Patching.  If modify a private or protected method, or utilize mx_internal, I&#039;m theoretically not affecting the public API.  Thus, unit tests will still work, and upgrading from 3.1 to 3.2, etc. will still work.  If you&#039;re really concerned, if you are the one who wrote it, you&#039;ll probably be doing diff&#039;s to see what changes are in the new code.  Most mp&#039;s I&#039;ve seen are small to get around small issues.

There are a lot of issues, but the big ones are visual design issues.  For example, if the client wants a modified cursor... what do I say, &quot;No&quot;?  Ask the designer to design within the Flex SDK constraints?  Both are perfectly valid responses... and a lot of times don&#039;t work.  So you have no choice.  Besides, not all Flex projects use the Flex SDK in the same ways.  Many of the Enterprise Flex projects I&#039;ve seen have next to no custom components.  They are just amalgamations of controls put in custom forms... that&#039;s about it.  Others are like Flash projects, where custom components are everywhere, and the Flex underpinnings (UIComponent and CSS styles) are used as a basis... and that&#039;s where the SDK part ends.  A lot of your code will be built atop the SDK, while other parts are completely unique.

It also depends on target company.  Many of the Enterprises I&#039;ve seen in consulting have strict rules that apply to their Java development, so they just assume they are appropriate for Flex too (which they aren&#039;t always).  Examples include, &quot;Must use Cairngorm 2.2&quot;, or &quot;Do not utilize the mx_internal namespace&quot;.  The first is easy; you explain the benefits of using the UM extensions.  For the latter... I usually ask them how they expect to draw custom Panels with custom buttons when extending the Flex panel.  You HAVE to use mx_internal; all the stuff you need to access is in there.  No mx_internal, no use of existing Panel and instead we write our own, thus negating all that wonderful work that went into Panel by the Flex SDK team.

The startups... they don&#039;t care.  Just get it working so we can get to market.  Monkey patching and custom components abound there.  The pattern though, is that a lot of the consumer apps tend to have more custom designs, and thus have more of a need to patch Flex whereas a lot of the behind the firewall, B2B apps are very simple.  This&#039;ll change over time as designers get up to speed on Flex&#039; capabilities, but for now, if you don&#039;t do consumer apps, custom designs, or custom components, you probably are confused as to why in the hell you&#039;d ever modify the Flex framework since it works so well.

Like James said, I&#039;ve yet to see many Enterprise Flex apps drastically upgraded once in production.  If you update the SDK for bug fixes, the whole point of using only public and protected, in my experience, pays off and most updates in SDK&#039;s go smoothly.  As for Agile... um, yeah, if you have an issue, fix it, that&#039;s the point of getting crap done.  If purism gets in the way, then to hell with purism.  It&#039;s not that black and white... nothing is when comparing YAGNI, architecture, and everything in between.  Again though, I&#039;ve seen these arguments before and chalk them up to Enterprise apps with standard designs vs. consumer/costumed designed Flex apps.</description>
		<content:encoded><![CDATA[<p>This is a very complex subject, you can&#8217;t just make it black and white.  For example, it depends on what you define as Monkey Patching.  If modify a private or protected method, or utilize mx_internal, I&#8217;m theoretically not affecting the public API.  Thus, unit tests will still work, and upgrading from 3.1 to 3.2, etc. will still work.  If you&#8217;re really concerned, if you are the one who wrote it, you&#8217;ll probably be doing diff&#8217;s to see what changes are in the new code.  Most mp&#8217;s I&#8217;ve seen are small to get around small issues.</p>
<p>There are a lot of issues, but the big ones are visual design issues.  For example, if the client wants a modified cursor&#8230; what do I say, &#8221;No&#8221;?  Ask the designer to design within the Flex SDK constraints?  Both are perfectly valid responses&#8230; and a lot of times don&#8217;t work.  So you have no choice.  Besides, not all Flex projects use the Flex SDK in the same ways.  Many of the Enterprise Flex projects I&#8217;ve seen have next to no custom components.  They are just amalgamations of controls put in custom forms&#8230; that&#8217;s about it.  Others are like Flash projects, where custom components are everywhere, and the Flex underpinnings (UIComponent and CSS styles) are used as a basis&#8230; and that&#8217;s where the SDK part ends.  A lot of your code will be built atop the SDK, while other parts are completely unique.</p>
<p>It also depends on target company.  Many of the Enterprises I&#8217;ve seen in consulting have strict rules that apply to their Java development, so they just assume they are appropriate for Flex too (which they aren&#8217;t always).  Examples include, &#8220;Must use Cairngorm 2.2&#8243;, or &#8220;Do not utilize the mx_internal namespace&#8221;.  The first is easy; you explain the benefits of using the UM extensions.  For the latter&#8230; I usually ask them how they expect to draw custom Panels with custom buttons when extending the Flex panel.  You HAVE to use mx_internal; all the stuff you need to access is in there.  No mx_internal, no use of existing Panel and instead we write our own, thus negating all that wonderful work that went into Panel by the Flex SDK team.</p>
<p>The startups&#8230; they don&#8217;t care.  Just get it working so we can get to market.  Monkey patching and custom components abound there.  The pattern though, is that a lot of the consumer apps tend to have more custom designs, and thus have more of a need to patch Flex whereas a lot of the behind the firewall, B2B apps are very simple.  This&#8217;ll change over time as designers get up to speed on Flex&#8217; capabilities, but for now, if you don&#8217;t do consumer apps, custom designs, or custom components, you probably are confused as to why in the hell you&#8217;d ever modify the Flex framework since it works so well.</p>
<p>Like James said, I&#8217;ve yet to see many Enterprise Flex apps drastically upgraded once in production.  If you update the SDK for bug fixes, the whole point of using only public and protected, in my experience, pays off and most updates in SDK&#8217;s go smoothly.  As for Agile&#8230; um, yeah, if you have an issue, fix it, that&#8217;s the point of getting crap done.  If purism gets in the way, then to hell with purism.  It&#8217;s not that black and white&#8230; nothing is when comparing YAGNI, architecture, and everything in between.  Again though, I&#8217;ve seen these arguments before and chalk them up to Enterprise apps with standard designs vs. consumer/costumed designed Flex apps.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mike Britton</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20822</link>
		<dc:creator>Mike Britton</dc:creator>
		<pubDate>Sat, 14 Mar 2009 01:09:07 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20822</guid>
		<description>Applying a Monkey Patch means other developers who wish to set up a project using your code must understand the patch.  In my experience, it just doesn&#039;t work in the long term.</description>
		<content:encoded><![CDATA[<p>Applying a Monkey Patch means other developers who wish to set up a project using your code must understand the patch.  In my experience, it just doesn&#8217;t work in the long term.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jonr</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20821</link>
		<dc:creator>jonr</dc:creator>
		<pubDate>Fri, 13 Mar 2009 19:09:51 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20821</guid>
		<description>My personal experience is that applications often do have to upgrade, and with agile projects development tends to go on long after the first production release (often years).  That said, I would love to see more sophisticated methods for overriding and extending the framework added to Flex.  Depending on how it was done it could open up some really interesting possibilities.</description>
		<content:encoded><![CDATA[<p>My personal experience is that applications often do have to upgrade, and with agile projects development tends to go on long after the first production release (often years).  That said, I would love to see more sophisticated methods for overriding and extending the framework added to Flex.  Depending on how it was done it could open up some really interesting possibilities.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Ward</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20820</link>
		<dc:creator>James Ward</dc:creator>
		<pubDate>Fri, 13 Mar 2009 19:01:17 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20820</guid>
		<description>I think that we will continue to have to Monkey Patch in Flex until it (or something else) provides a more modular architecture.  When you hit the wall there is just no other way.  That is why it&#039;s an escape hatch.  All successful frameworks have them.  But I would much prefer that the escape hatch were part of the framework instead of being the brute force method.

The only time that monkey patching has an impact on technical debt is when you upgrade versions of the Flex SDK.  In large, production, long-lived applications this is rarely done.  So I don&#039;t think there is as much debt as you suggest.  Also the new Marshall plan (SubApplications) can help to significantly reduce some of the technical debt incurred by this.

-James</description>
		<content:encoded><![CDATA[<p>I think that we will continue to have to Monkey Patch in Flex until it (or something else) provides a more modular architecture.  When you hit the wall there is just no other way.  That is why it&#8217;s an escape hatch.  All successful frameworks have them.  But I would much prefer that the escape hatch were part of the framework instead of being the brute force method.</p>
<p>The only time that monkey patching has an impact on technical debt is when you upgrade versions of the Flex SDK.  In large, production, long-lived applications this is rarely done.  So I don&#8217;t think there is as much debt as you suggest.  Also the new Marshall plan (SubApplications) can help to significantly reduce some of the technical debt incurred by this.</p>
<p>-James</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: jonr</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20819</link>
		<dc:creator>jonr</dc:creator>
		<pubDate>Fri, 13 Mar 2009 18:55:32 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20819</guid>
		<description>James, The historical perspective is interesting, and I do believe it is worthwhile to have the &quot;escape hatch.&quot;  I would thank (not criticize) Adobe for giving us the freedom to do this.  However, just because we have the freedom as developers doesn’t mean that is good for us to exercise it.  Also, I would ask if you think this option is still key to Flex being successful in the years to come?

For me, I am primarily thinking about enterprise development, where systems are expected to be in production for many years to come.  In those cases, avoiding this sort of technical debt is key to the long-term success of the system (and cost).  So, I would tend to invest the time and cost up-front to find a solution that didn’t include monkey patching.  In most cases, I think it can be done without having to start from scratch.</description>
		<content:encoded><![CDATA[<p>James, The historical perspective is interesting, and I do believe it is worthwhile to have the &#8220;escape hatch.&#8221;  I would thank (not criticize) Adobe for giving us the freedom to do this.  However, just because we have the freedom as developers doesn’t mean that is good for us to exercise it.  Also, I would ask if you think this option is still key to Flex being successful in the years to come?</p>
<p>For me, I am primarily thinking about enterprise development, where systems are expected to be in production for many years to come.  In those cases, avoiding this sort of technical debt is key to the long-term success of the system (and cost).  So, I would tend to invest the time and cost up-front to find a solution that didn’t include monkey patching.  In most cases, I think it can be done without having to start from scratch.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: James Ward</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20818</link>
		<dc:creator>James Ward</dc:creator>
		<pubDate>Fri, 13 Mar 2009 18:35:52 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20818</guid>
		<description>Like everything useful it&#039;s a double-edged sword.  I personally feel that Flex would never have succeeded if Monkey Patching were not possible.  It&#039;s an &quot;Escape Hatch&quot; (as Bruce Eckel would say).  And without that you are just stuck and have to build things from scratch.  Which is certainly less fun than having to dealing with diff&#039;ing things when you rev the version of the SDK you use.  I personally believe that the whole Monkey Patching thing could be improved if the Flex framework were more modular.  Some of the programming constructs like Mixins, Traits, and IOC could certainly be used to build a more modular architecture.  But it would be a enormous effort to rebuild the Flex framework using a more modular approach.  That is why I&#039;m hoping that Flight adopts a more modular approach and becomes a foundation for something new and modular.

-James</description>
		<content:encoded><![CDATA[<p>Like everything useful it&#8217;s a double-edged sword.  I personally feel that Flex would never have succeeded if Monkey Patching were not possible.  It&#8217;s an &#8220;Escape Hatch&#8221; (as Bruce Eckel would say).  And without that you are just stuck and have to build things from scratch.  Which is certainly less fun than having to dealing with diff&#8217;ing things when you rev the version of the SDK you use.  I personally believe that the whole Monkey Patching thing could be improved if the Flex framework were more modular.  Some of the programming constructs like Mixins, Traits, and IOC could certainly be used to build a more modular architecture.  But it would be a enormous effort to rebuild the Flex framework using a more modular approach.  That is why I&#8217;m hoping that Flight adopts a more modular approach and becomes a foundation for something new and modular.</p>
<p>-James</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: tollman</title>
		<link>http://gorillajawn.com/wordpress/2009/03/13/is-monkey-patching-in-flex-evil/comment-page-1/#comment-20817</link>
		<dc:creator>tollman</dc:creator>
		<pubDate>Fri, 13 Mar 2009 18:22:01 +0000</pubDate>
		<guid isPermaLink="false">http://ectropic.com/wordpress/?p=349#comment-20817</guid>
		<description>Seems like a bad idea to me. I guess it depends on what circles you run in. I think If I proposed this, most if not all of my dev peeps they would shun the idea immediately. Unless there was some extreme circumstance.</description>
		<content:encoded><![CDATA[<p>Seems like a bad idea to me. I guess it depends on what circles you run in. I think If I proposed this, most if not all of my dev peeps they would shun the idea immediately. Unless there was some extreme circumstance.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
