<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Thinking and Talking</title>
	<atom:link href="http://mayworm.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://mayworm.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Mon, 23 Jan 2012 13:20:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='mayworm.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://1.gravatar.com/blavatar/736c7d5cb8301740c256493401fe7a0b?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Thinking and Talking</title>
		<link>http://mayworm.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://mayworm.wordpress.com/osd.xml" title="Thinking and Talking" />
	<atom:link rel='hub' href='http://mayworm.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Data validation on REST API: Don&#8217;t trust clients input</title>
		<link>http://mayworm.wordpress.com/2009/11/29/data-validation-on-rest-api-dont-trust-clients-input/</link>
		<comments>http://mayworm.wordpress.com/2009/11/29/data-validation-on-rest-api-dont-trust-clients-input/#comments</comments>
		<pubDate>Sun, 29 Nov 2009 18:35:26 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[software design]]></category>
		<category><![CDATA[api design]]></category>
		<category><![CDATA[rest validator]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/?p=53</guid>
		<description><![CDATA[REST API&#8217;s have been becoming more and more common on Web applications/tools around the Internet, specially for those on open social context. It is also undebatable how the REST style architectures  have been growing in enterprise applications, probably as a possible and more light-weight alternative for architecture to expose services, and/or produce a consumer-based application. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=53&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>REST API&#8217;s have been becoming more and more common on Web applications/tools around the Internet, specially for those on open social context. It is also undebatable how the REST style architectures  have been growing in enterprise applications, probably as a possible and more light-weight alternative for architecture to expose services, and/or produce a consumer-based application. REST solution are easy to visualize, specially because thinking in resource are on the most of the cases a natural way to think, very close to domains. Associating those things with the &#8220;simple&#8221;, fast and pragmatic way to implement a REST service, probably it is one of the principal reasons why so many applications in different scenarios have been adopting REST style in some way.</p>
<p>Although REST style architecture shouldn&#8217;t be so hard to define and implement(otherwise software developers would avoid it), there are several things that must be considered when adopting a REST solution, such as: modeling your resources, types, REST enterprise development, resource reuse, think about consumer-based services, data representation, apply standardization, URI strategy and the flexible programming model to complement it, and others. In additional to these things that should be considered, when go more deeply and start to design/implement the REST based-services/API, others concerns come up, for example error/notification messages and data input validation. It is important to keep in mind that probably the REST services will be consumed by severals different clients(or maybe not), and the quality/integrity data the services are receiving cannot be guarantee, different from a Web application(in most of the cases) where the presentation layer probably has a validator mechanism to be sure about what will be sent through(of course it doesn&#8217;t put away the validation moment into others layers). Taking it into account, a validation mechanism analyzing different possibilities becomes important on the REST API, guaranteeing that clients will be always notifying correctly instead of just get an &#8220;exception&#8221; back and have a way to keep track of the errors once they happen. When something unexpected happens(invalid data or system troubles for example) let the clients know that there is a problem or special situation that the system identified, notifying the clients through a correct message which must be wrapper in a previous known format and send back on the HTTP Response body following a specific HTTP code. Other important point is avoid risks on the service side having a safe code,  understand the potential risks to the software and to make sure to have the appropriate mitigations in place, applying potential data validation mechanism to help with code quality too and don&#8217;t be affected for bad structured data comes from.</p>
<p>Going through the data validation input on REST, the REST API needs to ensure that this &#8220;layer&#8221; on the application is robust against all client&#8217;s input data, whether obtained from the external entities or known applications. Basically two approaches are useful(of course several others can be considered):</p>
<ul>
<li>Integrity checks &#8211; ensure that data has not been tampered.</li>
<li>Validation &#8211; ensure that the data is strongly typed, correct syntax, within length boundaries, contains only permitted characters, or if numeric is correctly signed and within range boundaries, etc.</li>
</ul>
<p>It is important to define the message error format, because the HTTP code associate with message error &#8220;envelop&#8221; is the way for REST API notify the clients in details about what happened, keep in mind that in a simple data input validation different types of validation rules can be broken, then a strategy to notify in a unique response all errors got during the process can be interesting. In additional to that to have a request ID in a error message help to keep track of the happenings in the logs.</p>
<p>The validation cab be performed on every tier as desired, however, on each layer should contains specifics validations trying to be complementary during the event process. Basically thinking in the REST &#8220;layer&#8221;, the validation approach could be:</p>
<ul>
<li>Accept known good &#8211; Just the known data will be accepted and send through the layers. The data received through some data representation(for example: JSON/XML) must be parsed to the specific type and just the substantial fields must be checked for the event triggered. There are so many kind of interesting validator frameworks that can be &#8220;injected&#8221; into the code to validate the received data, following the domain definitions and keeping the data integrity between the layers.</li>
<li>Make clean &#8211; In an effort to have a &#8220;safe&#8221; input try to clean eliminating or removing not desired data.</li>
<li>No validation &#8211; Although this approach must be considered unsafe and strongly discouraged, specially because it brings a non defensive code and fragile services on the REST API, maybe the team wants to considered this way taking into account a totally secure and known environment and client applications, just pushing the input validation in a non explicit way for others &#8220;layers&#8221;, it means for example just the validation on database through constraints will be used.</li>
</ul>
<p>And in this talk, the last but not least, is the checking URI, where depending of the method on the API and the URI form, specific validation can be necessary. It is important remember that most of the REST frameworks on different platforms provide mechanism to convert a &#8220;parameter&#8221; that forms a URI into a specific type, for example: /users/mary/project/55, the parameter project ID in this case &#8220;55&#8243; will be convert to a long on the specific method responsible for that. But if the client application tried: /users/mary/project/55XYZ probably the client application will receive a error from the framework during the convert moment, instead of receive a message informing that the provided ID is not valid for a project. It means that adopt a strategy to receive all parameters as String and then check/valid it of them internally in the code, can provide the alternative to send correct/custom messages for the client application. It always depend how much details the software wants to take over. Still in this direction, for example the relation between &#8220;mary&#8221; and &#8220;project 55&#8243; must be check, to guarantee that &#8220;mary&#8221; has rights on &#8220;project 55&#8243; and can retrieve/edit data there. This simple case has been approaching here because in several cases the REST API is &#8220;resource integrity&#8221;, then the data just there is in a specific resource, where for example: /users/john/projects/55 is not allow, because project 55 is a &#8220;mary&#8221; project and  &#8221;john&#8221; cannot do nothing there, then a specific rule restrictions on the persistence layer must be in place.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/53/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/53/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/53/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=53&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/11/29/data-validation-on-rest-api-dont-trust-clients-input/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>
	</item>
		<item>
		<title>Static Analysis: As part of reviewing what you are getting.</title>
		<link>http://mayworm.wordpress.com/2009/10/01/static-analysis-as-part-of-reviewing-what-you-are-getting/</link>
		<comments>http://mayworm.wordpress.com/2009/10/01/static-analysis-as-part-of-reviewing-what-you-are-getting/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 22:15:19 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[static analysis]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/?p=45</guid>
		<description><![CDATA[Last week I came across with a friend that I was long time without see him, during some talks and beers he pointed something that caught my eyes. He told me about the new strategy adopted by the company where he works. Due to a market situation, they need to outsource some projects, or even [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=45&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week I came across with a friend that I was long time without see him, during some talks and beers he pointed something that caught my eyes. He told me about the new strategy adopted by the company where he works. Due to a market situation, they need to outsource some projects, or even some &#8220;parts&#8221; of projects. For that, they created contracts, rules, strategies for delivery, put a &#8220;upstream&#8221; process in place and so on. Ok, until this point nothing special or new. Once the vendors implement the requirements and these are accept, they will integrate those implementations on their code bases. And after that everybody will be happy, I mean, the vendor that provided a bundle of code and the company that has the system ready to support some market strategy, of course that I have been simplistic, because we know that this kind of process usually is not so smoothly specially during the beginning(probably middle and end).</p>
<p>But what caught my eyes during this talk was when I asked him about the rules on static testing, and he answered me &#8220;anh..humm.. we don&#8217;t have it in an agreement with the vendors&#8221;, then what I could see from him, they have good acceptance tests and specification-based tests, but a shy code-based testing. So if you think through a perspective of who will receive in some moment a bundle of code and integrate it in a code base and with time goes by become the responsible for that code received, of course that we should try to push some &#8220;quality tests&#8221; on it, otherwise we can just be adopting a &#8220;bomb&#8221; which will go off on the future. I&#8217;m not here saying that you need to be radical and push a strong control about cyclomatic complexity, even if it helps you to identify tests possibilities or improvements on code. But you can have a &#8220;modest&#8221; checklist and tuning rules on some static code analysis tools to point possibles spots on the code that you must use some static techniques before accept what the vendors delivered for you, as for example: software inspection, code review and tracing. You don&#8217;t need to bring bureaucracy, you can be &#8220;agile&#8221;, but careful with what you are getting from. It is worthwhile you identify what tools you need for static code analysis (there are good open source tools, or even good commercial tools), identify what you need from those tools, what exactly kind of rules you need, tuning the tools, keep a close relationship with the vendors because they are your partner on this static testing, and keep in mind that it is really useful, bringing quality and &#8220;explicitness&#8221; for the code and even for a better design.</p>
<p>So, with simple things in mind you can guarantee a code gift that you are getting, and probably a good relationship with vendors.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/45/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/45/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/45/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=45&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/10/01/static-analysis-as-part-of-reviewing-what-you-are-getting/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>
	</item>
		<item>
		<title>Overengineering: Now, who pays the price?</title>
		<link>http://mayworm.wordpress.com/2009/09/15/overengineering-now-who-pays-the-price/</link>
		<comments>http://mayworm.wordpress.com/2009/09/15/overengineering-now-who-pays-the-price/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 18:25:06 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[software maintenance]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[overengineering]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/?p=32</guid>
		<description><![CDATA[Last week Felipe and I were talking about some situations that we came across, really similar situations, although we never worked before on the same company, we can see situations on software development around us that has the origin overengineering, specially the overengineering on detailed design stuff(I know that &#8220;design&#8221; is a huge topic, so [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=32&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Last week <a href="http://www.felipemayworm.com" target="_blank">Felipe</a> and I were talking about some situations that we came across, really similar situations, although we never worked before on the same company, we can see situations on software development around us that has the origin overengineering, specially the overengineering on detailed design stuff(I know that &#8220;design&#8221; is a huge topic, so only few aspects we considered in this talk). We started to discuss about what motived in that time the team to design a so complex solution for products, and why they forgot accommodating changes that is one of the most challenging points of good software design. Most of those softwares that we were discussing about are medium and small projects and non mission-critical application, but have complexity on the maintenance cycle. Of course that quality of a design depends on which constraints are satisfied early and which are left for later, and most of the time some constraints doesn&#8217;t have a right/fast answer. And as managing complexity is something that catches my eye(don&#8217;t forget that when projects do fail for reasons that are technical, in most of the cases it is often uncontrolled complexity), we decided to make a brainstorm analyzing different points on design, as economic factors, layers, patterns, concurrence, test, quality attributes, how the abstract ideas were addressed and if they tried to make a component-based design and how they used the object-oriented design. After our discussion(considering the projects that we talked), we got the following points, that if maybe considered for those designers, could reduce the problems that we came across:</p>
<ul>
<li>On economic factors, we could see how designers have failed or been unable to anticipate future needs for change on an economic important issue that needs to be considered, that is the cost of making changes to a system. Specially the &#8220;Perfective maintenance&#8221;, that consist in extending and improving a system once it is operational, typically by providing new functionality/feature requested by users. For example, we could see designers &#8220;drawing&#8221; really complex UI solutions on top of MVC frameworks. But once the maintenance team receives new requirements that contains UI parts completely different about what was designed/thought, those new implementations become so hard and consume a lot time, where the price payed for a new &#8220;button&#8221; added on UI is unbelievable high.</li>
<li>We thought about layers several times during the talk and it remembered how many times we&#8217;ve seen a layers mix to cause overengineering in the projects and how it introduced a significant complexity during the moment on which the development team needed to say about the kind of change will be coming. We were surprised about the bundle of extra layers that we identify in some softwares that has to be maintained, but always continue addition anything in terms of value for the software design itself.</li>
<li>On patterns no question how they are important and lively for design process. I will assume that you are aware about architectural styles and design patterns. The enthusiasm of patterns adoption has sometime scarred me, taking a look in the design details is easy perceive that most of the time people are trying to find spots to push design patterns than using design pattern to solve a &#8220;common&#8221; problem that they came across. Other interesting point is the lack of care in creating documentation to express the reasons why those design patterns were adopted. Indeed, it can be argued that the enthusiasm for designing a better solution, these patterns has acted to expose the weaknesses in the &#8220;pattern concept adoption&#8221;. Then keep in mind the question of how useful it is to have an ever-increasing stock of patterns. The exaggerated mixed of patterns, arguing that it brings flexibility, probably it is not the right choice, because the complexity is coming together.</li>
<li>About documentation the team responsible for maintain may ﬁnd themselves with inadequate or inaccurate documentation, making their job hard to ensure that their changes are consistent with the original plans, and usually they are not, even becoming easy to introduce new bugs. And it is fact that the productivity is affected because when the team inherits an overengineering design, it is necessary to spend so much time learning the nuances of that design before the team can extend or maintain it, and probably the time constraint will be against you.</li>
<li>During the design moment, abstraction performs an important role, where comes metaphors and representations. We can perceive that representations provide abstraction of a system and they are linked to the idea of views. Some designers have been disregarding the detailed design, in this way, not providing the different views for the design, not allowing to see the software throughout different points of view. A good example of views is &#8220;4+1 View&#8221;, or even using the alternative forms to observe the design, as constructional, behavioral, functional and data-modeling. Then basically it means that the concept of a view, as a means of capturing a particular set of design properties, and as projected through the use of a representation.</li>
<li>Other interesting approach is keep the eyes on the construction planning, establishing the schedule to design(an of course debug and unit test), most of the time it tries to keep us &#8220;simpler&#8221;, specially when the project deviates from the schedule because we are spending more time on design that we &#8220;should&#8221;, and there are a lot chances of the reason is because the design is becoming hard/complex. The construction plan helps to organize the design(specially when project allocate more design activity to construction, usually on medium/small projects, allowing to flesh out details of the software design during the construction, and maybe it can naturally guides to a simpler design), define the order in which components are created and integrated and the software quality manage process, that directly weights on design quality. I know that is hard to know when the design is good enough, or how much details is enough or how much should be left to be done at the &#8220;typing moment&#8221;, and maybe these points helps on avoid  overengineering.</li>
<li>On design for test, the suggestion is: keep in mind to design it to facilitate testing. It is really clear that when you design thinking on tests, result produced tends to be more formalized modules and classes, probably being more beneficial.</li>
</ul>
<p>In additional, there is an interesting list of internal design characteristics that [McC04] mentions, and I like to have in mind:</p>
<ul>
<li>Minimal complexity</li>
<li>Ease of maintenance</li>
<li>Loose coupling</li>
<li>Extensibility</li>
<li>Reusability</li>
<li>High fan-in</li>
<li>Low-to-medium fan-out</li>
<li>Portability</li>
<li>Leannes</li>
<li>Stratification</li>
<li>Standard techniques</li>
</ul>
<p>I remember an important passage from [PW85], where Parnas and Weiss, in their active design review approach, point interesting properties of a design as: it should be well <strong>structured</strong>, <strong>simple</strong>, <strong>efficient</strong>, <strong>adequate</strong> (satisfying the requirements), <strong>flexible</strong> (easy to change), <strong>practical</strong> (module interfaces sufficient for the job), <strong>implementable</strong>, and <strong>standardized</strong> (documentation organized in a standard way).</p>
<p>We know that design is a heuristic process, which means that no solution is guarantee to work for all projects and probably doesn&#8217;t fit on all teams, then the idea was just write down a small subset of things to consider during approaches to design and try to focus on reduced-complexity benefit, the easier and safer the software will be to change and test. We know that simplicity is just a vision, and &#8220;maybe&#8221; we can try to find it keeping these things in mind.</p>
<p>- [PW85] D. L. Parnas and D. M. Weiss. Active design reviews: Principles and practices. In Proceedings of the Eight International Conference on Software Engineering, pp. 215-222, 1985.<br />
- [McC04] S. McConnell, Code Complete: A practical Handbook of Software Construction, Microsoft Press, second ed., 2004.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/32/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/32/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/32/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=32&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/09/15/overengineering-now-who-pays-the-price/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>
	</item>
		<item>
		<title>Technical Debt: How much have you been paying for that?</title>
		<link>http://mayworm.wordpress.com/2009/08/11/technical-debit-how-much-have-you-been-paying-for-that/</link>
		<comments>http://mayworm.wordpress.com/2009/08/11/technical-debit-how-much-have-you-been-paying-for-that/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 21:12:00 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[process]]></category>
		<category><![CDATA[software maintenance]]></category>
		<category><![CDATA[technical-debt]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/2009/08/11/technical-debit-how-much-have-you-been-paying-for-that</guid>
		<description><![CDATA[Long time ago Ward Cunningham brought the idea around the term &#8220;technical debt&#8221;[1]. After it others like Steve MaConnell[2] introduced more thoughts on this metaphor. It is quite interesting see this ongoing in a real scenario. And in additional to that to see the team getting used with the situation, defraying interest each release cycle, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=7&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Long time ago Ward Cunningham brought the idea around the term &#8220;technical debt&#8221;[1]. After it others like Steve MaConnell[2] introduced more thoughts on this metaphor. It is quite interesting see this ongoing in a real scenario. And in additional to that to see the team getting used with the situation, defraying interest each release cycle, and more, without hope to amortize the debt during the software life time.</p>
<p>In a previous post I wrote about the &#8220;Quick-and-Dirty&#8221;[3] approach, where I put the phrase: &#8220;we need to keep in mind a way to clean it as time goes by.&#8221;. I guess it can explain what you must do after decide to acquire a debt, because you need to address some issues that in a specific moment are more important than the design/code quality. Situations like that can happen, for example time-to-market or even when stackholders push pressure.</p>
<p>I think that the technical debt can be in evidence on different spots(design, code, dependence management, and others), and this is really &#8220;fun&#8221; when the &#8220;software&#8221; decides to charge you. Just pay attention the moment before and after each delivery. Where are the stress points, and if they are continuous, I mean, the team are always complain about the same things. The test process is always messy and not easy to reproduce, build process is always broken and just one guy on the team knows about that, we don&#8217;t have a static code analyze tool in place, because otherwise it will show those several &#8220;poor&#8221; design/code that we built and we forgot to clean and we are saying most of the time: &#8220;throw away this software and go to implement from scratch&#8221;. When you are in this stage, your debt is really bad.</p>
<p>Now imagine this situation: you got a money from a bank, and just postpone to pay, when you think that you have the enough money you discover that the current debt amount is so high that you need at least to work one more year saving money to pay the debt. It is exactly what happens when you decide improve/refactor the design/code or poor solutions that you did a long long time ago. Then, if you take a technical debt, keep always looking back shortly to your stuff, otherwise it will be impossible to improve.</p>
<p>[1] &#8211; http://c2.com/doc/oopsla92.html<br />
[2] &#8211; http://blogs.construx.com/blogs/stevemcc/archive/2007/11/01/technical-debt-2.aspx<br />
[3] &#8211; http://mmayworm.blogspot.com/2009/04/where-is-boundary-between-rapid-and.html</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/7/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/7/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/7/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=7&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/08/11/technical-debit-how-much-have-you-been-paying-for-that/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>
	</item>
		<item>
		<title>&quot;Friends with Benefits&quot;: By REST</title>
		<link>http://mayworm.wordpress.com/2009/07/04/friends-with-benefits-by-rest/</link>
		<comments>http://mayworm.wordpress.com/2009/07/04/friends-with-benefits-by-rest/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 08:13:00 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[restful]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/2009/07/04/friends-with-benefits-by-rest</guid>
		<description><![CDATA[All the time people are creating new Web applications and trying to push it on the market. Different ideas popup each few seconds. Some years ago most of the Web applications could live &#8220;alone&#8221;, I mean, without integration/interaction with others, but today? Can you imagine trying to create a &#8220;revolutionary&#8221;/cool Web application without a &#8220;friend [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=6&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://mayworm.files.wordpress.com/2009/07/fw.jpg"><img src="http://mayworm.files.wordpress.com/2009/07/fw.jpg?w=300" border="0" alt="" /></a>
<div>
<div style="text-align:justify;">All the time people are creating new Web applications and trying to push it on the market. Different ideas popup each few seconds. Some years ago most of the Web applications could live &#8220;alone&#8221;, I mean, without integration/interaction with others, but today? Can you imagine trying to create a &#8220;revolutionary&#8221;/cool Web application without a &#8220;friend approach&#8221;? Or even trying to transform your same old application in something on Web 2.0/3.0 without a &#8220;friend approach&#8221;? I guess no.</div>
<div style="text-align:justify;"></div>
<div style="text-align:justify;">I mean around &#8220;friend approach&#8221; the idea about publishing what your Web application does or knows for others. It is exactly what the marshup idea brings, but it is quite interesting to see how this approach is so natural nowadays in most of people responsible to think in a solution for Web applications.</div>
<div style="text-align:justify;"></div>
<div style="text-align:justify;">Looking through the point of view of who want to develop an application that will provide information(resource)/service, I have been taking a look how interesting is a REST Style architecture, of course that it is not my focus to judge about others approach for architectures, like SOAP, specially because each of them has advantages that depends of the context, scenario and several variables.</div>
<div style="text-align:justify;"></div>
<div style="text-align:justify;">REST Style can go beyond of the architecture and naturally introduce the idea about client API for interact with your application, then REST provides a convenient bridge between the platform worlds and easier content streaming than SOAP, less work. Moreover, an application that is internet-based and the requirements for security is low, it is best implemented in REST.</div>
<div style="text-align:justify;"></div>
<div style="text-align:justify;">Somethings that comes around REST Style:</div>
<div>
<ul>
<li style="text-align:justify;">Data representation with JSON/XML/ATOM.JSON has been adopting widely, where there are a bundle of API on different languages to deal with it, and how simple is to integrate it on JS objects on browser, for example on XMLHTTPRequest.</li>
<li style="text-align:justify;">Resources are manipulated by HTTP verbs (GET, PUT, POST, DELETE).</li>
<li style="text-align:justify;">Security, based on HTTP. But a common security/identity approaches like OpenID and OAuth has been adopting day in day out, in a simple way to work with tokens for example. Basically it allows your REST Style solution to adopt different kind of authentication providers(Like GMail for example).</li>
<li style="text-align:justify;">Caching is an interesting part of a REST Style, and can be used by both server side and client side. On the server-side infrastructure can be plugged a cache mechanism to &#8220;intercept&#8221; and include the ability to deal with caching headers avoid consume resource on the server infrastructure and increasing response time to the client.</li>
</ul>
</div>
<div style="text-align:justify;">REST has proven itself to be simple, flexible and scalable. Depending the way that you address to implement the REST Style and the design you do, you can really add more advantages for your solution, taking in the possibility to spread easily the components that deals with the services/resources in a <a href="http://en.wikipedia.org/wiki/Content_delivery_network">CDN</a> way, getting performance, better response time trip and distributing.</div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/6/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/6/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/6/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=6&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/07/04/friends-with-benefits-by-rest/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>

		<media:content url="http://mayworm.files.wordpress.com/2009/07/fw.jpg?w=300" medium="image" />
	</item>
		<item>
		<title>More things than just find an &quot;solution&quot;</title>
		<link>http://mayworm.wordpress.com/2009/05/13/more-things-than-just-find-an-solution/</link>
		<comments>http://mayworm.wordpress.com/2009/05/13/more-things-than-just-find-an-solution/#comments</comments>
		<pubDate>Wed, 13 May 2009 07:58:00 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[software maintenance]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/2009/05/13/more-things-than-just-find-an-solution</guid>
		<description><![CDATA[During a daily talk through email, a friend of mine came to me with a question about an specific approach that he would like to adopt on a new application(information system type thing) that the company where he works will start soon. Basically the scenario is: They would like to build an UI in Delphi [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=5&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://mayworm.files.wordpress.com/2009/05/a_b.jpg"><img src="http://mayworm.files.wordpress.com/2009/05/a_b.jpg?w=300" border="0" alt="" /></a>
<div style="text-align:justify;"><span class="Apple-style-span" style="font-size:small;"><br /></span></div>
<div style="text-align:justify;"><span class="Apple-style-span" style="font-size:small;"><br /></span></div>
<div style="text-align:justify;"><span class="Apple-style-span" style="font-size:small;"><br /></span></div>
<div style="text-align:justify;"><span class="Apple-style-span" style="font-size:small;">During a daily talk through email, a friend of mine came to me with a question about an specific approach that he would like to adopt on a new application(information system type thing) that the company where he works will start soon. Basically the scenario is: They would like to build an UI in Delphi to &#8220;interact&#8221; with a Java backend running in a remote server, this interaction will happen practically for all UC&#8217;s that needs to deal with data and/or business rules, what means that it is not a single or isolated interaction. Due to they have a strong Delphi knowledge and they want to find an &#8220;opportunity&#8221; to make things in Java, they decided for this solution(The point here is not to question if they should or not start to make things in Java in this project).  It is a medium size application in accordance with him. </span></div>
<div style="text-align:justify;"><span class="Apple-style-span" style="font-size:small;"><br /></span></div>
<div style="text-align:justify;"><span class="Apple-style-span" style="font-size:small;">In a superficial level, he showed two possibles solutions and asked my opinion about those. The two solutions were:</span></div>
<div style="text-align:justify;">
<ol>
<li><span class="Apple-style-span" style="font-size:small;">Implement a WS approach to integrate the Delphi&#8217;s UI and Java backend.</span></li>
<li><span class="Apple-style-span" style="font-size:small;">Implement a Java &#8220;client&#8221; that would run together with Delphi and would be the responsible to communicate with the Java remote services, where Delphi talks with this Java client through JNI.</span></li>
</ol>
<div><span class="Apple-style-span" style="font-size:small;">Well, I confess that in a first moment, I wasn&#8217;t so &#8220;comfortable&#8221; with this kind of architecture solution, but I&#8217;m not in position to criticize them, because probably there were several motivations that drove them for this way (Delphi + Java), and the question that he brought was about the &#8220;bridge&#8221; between Delphi </span><b><i><span class="Apple-style-span" style="font-size:small;">AND</span></i></b><span class="Apple-style-span" style="font-size:small;"> Java and not about if he should use Delphi </span><b><i><span class="Apple-style-span" style="font-size:small;">OR</span></i></b><span class="Apple-style-span" style="font-size:small;"> Java. And of course both of them have their respective advantages for different solutions.</span></div>
<div><span class="Apple-style-span" style="font-size:small;"><br /></span></div>
<div><span class="Apple-style-span" style="font-size:small;">After sometime thinking about some possibilities for this &#8220;bridge&#8221;, I decided to write down some primordial questions related to his options, just to check if he was aware about &#8220;attached&#8221; things that can come with an architecture choice, things that can be expensive if the requirements changing comes. The questions were:</span></div>
</div>
<div style="text-align:justify;">
<ul>
<li><span class="Apple-style-span" style="font-size:small;">Assuming that you already wrote and implemented an use case to validate those possibilities, did you write and implement an use case to validate how hard can be apply a change in a code developed follow both choices?</span></li>
<li><span class="Apple-style-span" style="font-size:small;">If after some time effort you identify that you need to replace the current &#8220;bridge&#8221; solution for another one, were you planning to design a solution to protect the others parts of your software?</span></li>
<li><span class="Apple-style-span" style="font-size:small;">Did you analyze the possible costs of defects found in requirements time, architecture time, construction time, system test time or post-release time?</span></li>
<li><span class="Apple-style-span" style="font-size:small;">Did you implement a end to end equirement to prof that the solution is feasible?</span></li>
<li><span class="Apple-style-span" style="font-size:small;">Probably this design is complex, challenging or both for you. The development team is unfamiliar with the application area. Then, are you assuming to use an iterative approach for this development?</span></li>
</ul>
<div><span class="Apple-style-span" style="font-size:small;">I was waiting some &#8220;no&#8221; as answers, but I was surprised when I got &#8220;no&#8221; for all question above. It just showed that sometimes the team is so focussed on a fast technical solution that they put in place the first one founded, and then probably they will forget to think about others things that is coming on the future.</span></div>
</div>
<div style="text-align:justify;"></div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/5/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/5/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/5/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=5&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/05/13/more-things-than-just-find-an-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>

		<media:content url="http://mayworm.files.wordpress.com/2009/05/a_b.jpg?w=300" medium="image" />
	</item>
		<item>
		<title>Plugin Architecture: Reversed Effort</title>
		<link>http://mayworm.wordpress.com/2009/04/28/plugin-architecture-reversed-effort/</link>
		<comments>http://mayworm.wordpress.com/2009/04/28/plugin-architecture-reversed-effort/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 19:06:00 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[architecture]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/2009/04/28/plugin-architecture-reversed-effort</guid>
		<description><![CDATA[Are you considering plug-ins in your next application/tool? Plug-in architecture is not a new concept, probably as you know it comes from a long time, and there are a bundle of stable &#8220;solutions&#8221; to support that, such as &#8220;Eclipse/OSGi&#8221; and others. Indeed there are several good technical arguments that can catch the development team&#8217;s eyes [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=4&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="font-size:100%;"><a style="font-family:georgia;" href="http://mayworm.files.wordpress.com/2009/04/plugin.png"><img src="http://mayworm.files.wordpress.com/2009/04/plugin.png?w=300" alt="" border="0" /></a></span><span style="font-family:georgia;font-size:100%;" class="Apple-style-span"><br /></span>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;"><br /></span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;">Are you considering plug-ins in your next application/tool?</span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span"><br /></span></span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;">Plug-in architecture is not a new concept, probably as you know it comes from a long time, and there are a bundle of stable &#8220;solutions&#8221; to support that, such as &#8220;Eclipse/OSGi&#8221; and others. Indeed there are several good technical arguments that can catch the development team&#8217;s eyes when they decide to adopt this kind of solution, taking into account what they are planning for their application. For example:</span></div>
<div style="text-align:justify;font-family:georgia;">
<ul>
<li><span class="Apple-style-span" style="font-size:100%;">How can a functionality be added in a future moment?</span></li>
<li><span class="Apple-style-span" style="font-size:100%;">How can the functionality be increased after delivering?</span></li>
<li><span class="Apple-style-span" style="font-size:100%;">How can activated a component at runtime, following a specific component/plug-in lifecycle?</span></li>
</ul>
</div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;">There are some strategies/patterns/definitions behind the scenes when the talk is plug-in architecture. I really encourage you delve into this subject.</span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;"><br /></span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;">On the other hand, nowadays we can see interesting points from a business perspective , when a team decide to develop an application/tool on top of a plug-in architecture. It is fact that the market has been accepting these new applications/tool in a good way, not &#8220;just&#8221; because there are relevant good technical arguments (but again, it depends of what you are planing to develop in terms of application/tool), but because there are different benefits that can be seen through the business perspective.</span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;"><br /></span></div>
<div style="text-align:justify;font-family:georgia;"><span class="Apple-style-span" style="font-size:100%;">Usually the business team can take advantage of the ecosystem created around of a plug-in architecture, and define a business model to support the application on the market, involving your costumers and patterns throughout a profit relationship. It is possible to do it in an easy way, because one possibility is introduced naturally:</span></div>
<div style="text-align:justify;font-family:georgia;">
<ul>
<li><span class="Apple-style-span" style="font-size:100%;">The application can just create a &#8220;contract&#8221;, defining a functionality/opening that it does not provide itself, although must be added by plug-ins.</span></li>
</ul>
<div><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span">This interesting possibility opens the doors for actions that aggregate values for the business around the application/tool, even if it is a close or open license. These actions can be represented as:</span></span></div>
<div>
<ul>
<li><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span">The extensibility power, what brings for the costumers and patterns the sensation of &#8220;freedom&#8221;, where they want to improve/add function as they want, without your interaction.</span></span></li>
<li><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span">The startup of a plug-in market, where third parties will put their mind to think, trying to create some interesting plug-in adding naturally value for your application, what really well worth. Even if they make money without involving yourself, they will be adding value for your business.</span></span></li>
<li><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span">The feedback power, where your application/tool will be all the time being &#8220;touched&#8221; for others code, and comments/suggestions will popup.</span></span></li>
</ul>
<div><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span">Maybe we can call it as the <b>reversed effort</b>, where your application/tool will be really supported by the third parties, just because you provided a way for them to take part in your business. Of course that there are several others things additional on that, as for example the motivation of your application/tool and etc. But at least the plug-in architecture approach can bring/open more flexibilities and/or opportunities in terms of business, if it fits on your technical stuff.</span></span></div>
</div>
<div><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span"><br /></span></span></div>
<div><span class="Apple-style-span" style="font-size:100%;"><span class="Apple-style-span"><br /></span></span></div>
</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/4/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/4/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/4/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=4&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/04/28/plugin-architecture-reversed-effort/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>

		<media:content url="http://mayworm.files.wordpress.com/2009/04/plugin.png?w=300" medium="image" />
	</item>
		<item>
		<title>Where is the boundary between &quot;Rapid&quot; and Quick-and-Dirty on software development?</title>
		<link>http://mayworm.wordpress.com/2009/04/16/where-is-the-boundary-between-rapid-and-quick-and-dirty-on-software-development/</link>
		<comments>http://mayworm.wordpress.com/2009/04/16/where-is-the-boundary-between-rapid-and-quick-and-dirty-on-software-development/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 18:59:00 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/2009/04/16/where-is-the-boundary-between-rapid-and-quick-and-dirty-on-software-development</guid>
		<description><![CDATA[As you can see, it is a classical Dilbert comic strips, but that probably represent the truth in some spots, specially for those teams that just want to delivery the things, usually as a way to show up productivity. A potential problem here is when the &#8220;Quick-and-Dirty&#8221; approach becomes the rules and a lack of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=3&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><a href="http://mayworm.files.wordpress.com/2009/04/dilbert-agile_programming.gif"><img src="http://mayworm.files.wordpress.com/2009/04/dilbert-agile_programming.gif?w=300" alt="" border="0" /></a>
<div style="text-align:justify;">As you can see, it is a classical Dilbert comic strips, but that probably represent the truth in some spots, specially for those teams that just want to delivery the things, usually as a way to show up productivity. A potential problem here is when the &#8220;Quick-and-Dirty&#8221; approach becomes the rules and a lack of techniques, process, or even concern, put the &#8220;Dirty&#8221; as focus, postponing the &#8220;Rapid-and-Quality&#8221;.</p>
<p>I&#8217;m not here to say that &#8220;Quick-and-Dirty&#8221; is the evil, but I think that there are specifics moments to follow this approach and good ways to &#8220;clean&#8221; the code and artifacts during the way.</p>
<p>You need to take care, because &#8220;Quick-and-Dirty&#8221; is a kind of approach that seems to be comfortable(specially for maintenance context with the fast changes around the team), and it can spread through the team easily and sometimes creating a &#8220;<a href="http://en.wikipedia.org/wiki/Groupthink">group think</a>&#8220;. It is easy to see as the detrimental to the quality of the software pop-ups just to satisfy the agility on the tasks resolution, and the firsts effects are deficient tests, documentation, control of software life cycle, and the low quality of the code.</p>
<p>If you change the perspective for the software maintenance, it becomes potentiality worst, where in a short time you can see &#8220;curatives&#8221; scattered throughout the software, without acceptable documentation or even unit tests to guarantee some kind of quality. A very common argument that people adopt to use this approach is: We are agile, We are rapid!. But please, don&#8217;t make a mistake, &#8220;Agile&#8221; in terms of software development approach  has not the same meaning as &#8220;Quick-and-Dirty&#8221;, and even during the software development process if we decide to use some &#8220;Quick-and-Dirty&#8221; for some specific reason, we need to keep in mind a way to clean it as time goes by.</p>
<p>So, before you decide to dig into this approach or push it on your team, try to understand the potential side effects such as &#8220;bug and fix&#8221; process, that you will bring into the software environment, try to see if it is just a matter of organization, process or even good sense.</div>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/3/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/3/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/3/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=3&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2009/04/16/where-is-the-boundary-between-rapid-and-quick-and-dirty-on-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>

		<media:content url="http://mayworm.files.wordpress.com/2009/04/dilbert-agile_programming.gif?w=300" medium="image" />
	</item>
		<item>
		<title>Linux Support for ECF Skype Provider</title>
		<link>http://mayworm.wordpress.com/2007/12/28/18/</link>
		<comments>http://mayworm.wordpress.com/2007/12/28/18/#comments</comments>
		<pubDate>Fri, 28 Dec 2007 16:40:00 +0000</pubDate>
		<dc:creator>mayworm</dc:creator>
				<category><![CDATA[ecf]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Skype]]></category>

		<guid isPermaLink="false">http://mayworm.wordpress.com/2007/12/28/18</guid>
		<description><![CDATA[Linux Support for ECF Skype Provider ECF (2.0.0 Milestone 4a &#8211; N&#38;N ) has the addition of linux support for the Skype provider, now it is possible connect to Skype 2.0 beta under Eclipse on Linux. The Skype Provider implements the ECF Call API, the Presence API, and the Datashare API.<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=18&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><span style="color:#ff9900;font-weight:bold;font-size:130%;">Linux Support for ECF Skype Provider</span></p>
<p><span style="font-size:100%;">ECF (2.0.0 Milestone 4a &#8211; <a href="http://www.eclipse.org/ecf/NewAndNoteworthy.html">N&amp;N</a> ) has the addition of linux support for the Skype provider, now it is possible connect to Skype 2.0 beta under Eclipse on Linux. The Skype Provider implements the ECF <a title="ECF Providers" href="http://wiki.eclipse.org/ECF_Providers#Call_.28org.eclipse.ecf.call.29">Call API</a>, the <a title="ECF API Docs" href="http://wiki.eclipse.org/ECF_API_Docs#Presence_API">Presence API</a>, and the <a title="ECF API Docs" href="http://wiki.eclipse.org/ECF_API_Docs#Datashare_API">Datashare API</a>.</span></p>
<p><a href="http://mayworm.files.wordpress.com/2007/12/2007-12-28_1547.png"><img src="http://mayworm.files.wordpress.com/2007/12/2007-12-28_1547.png?w=300" border="0" alt="" /></a></p>
<br /><img alt="" border="0" src="http://feeds.wordpress.com/1.0/categories/mayworm.wordpress.com/18/" /> <img alt="" border="0" src="http://feeds.wordpress.com/1.0/tags/mayworm.wordpress.com/18/" /> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/mayworm.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/mayworm.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/mayworm.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/mayworm.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/mayworm.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/mayworm.wordpress.com/18/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/mayworm.wordpress.com/18/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/mayworm.wordpress.com/18/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=mayworm.wordpress.com&amp;blog=8991463&amp;post=18&amp;subd=mayworm&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://mayworm.wordpress.com/2007/12/28/18/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/123b5537b1c6b492fe932eabe309ba8e?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">mayworm</media:title>
		</media:content>

		<media:content url="http://mayworm.files.wordpress.com/2007/12/2007-12-28_1547.png?w=300" medium="image" />
	</item>
	</channel>
</rss>
