<?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>Adrian Kosmaczewski &#187; Papers</title> <atom:link href="http://kosmaczewski.net/category/papers/feed/" rel="self" type="application/rss+xml" /><link>http://kosmaczewski.net</link> <description></description> <lastBuildDate>Wed, 08 Feb 2012 08:51:50 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.3.1</generator> <item><title>On the Importance of Yerba Mate in the Software Development Process</title><link>http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/</link> <comments>http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/#comments</comments> <pubDate>Mon, 26 Oct 2009 06:20:56 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Argentina]]></category> <category><![CDATA[Humour]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[America Latina]]></category> <category><![CDATA[creation]]></category> <category><![CDATA[process]]></category> <category><![CDATA[productivity]]></category> <category><![CDATA[programming]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1986</guid> <description><![CDATA[This paper will highlight the results of an extensive research conducted since the mid 90&#8242;s, on the effects of the consumption of beverages based in the plant known as Ilex paraguariensis, in the framework of software development process activities in &#8230; <a
href="http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><img
src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Mate_02.jpg/180px-Mate_02.jpg" alt="mate" width="180" height="232" align="right" />This paper will highlight the results of an extensive research conducted since the mid 90&#8242;s, on the effects of the consumption of beverages based in the plant known as <em>Ilex paraguariensis</em>, in the framework of software development process activities in South America and some small parts of Europe.</p><p>This paper will provide an introduction to the herb commonly referred to as &#8220;Yerba Mate&#8221;, and will later delve into the advantages and disadvantages of such practice, in the context of the creation of software products.</p><h3>Introduction</h3><p>Yerba Mate <a
href="http://en.wikipedia.org/wiki/Yerba_maté">is defined by Wikipedia</a> as follows:</p><blockquote> Yerba mate or yerba-mate (Br.) (Spanish: yerba mate, Portuguese: erva-mate), Ilex paraguariensis, is a species of holly (family Aquifoliaceae) native to subtropical South America in northeastern Argentina, eastern Paraguay and southern Brazil. It was first scientifically classified by Swiss botanist Moses Bertoni, who settled in Paraguay in 1895.</blockquote><p><span
id="more-1986"></span></p><p>The Yerba Mate (usually and wrongly spelled as &#8220;Yerba Maté&#8221; in English-speaking texts) is used in the preparation of a caffeinated beverage <a
href="http://en.wikipedia.org/wiki/Mate_(beverage)">described by Wikipedia</a> as follows:</p><blockquote> Mate (Spanish pronunciation: [ˈmate]), also known as chimarrão (Portuguese: [ʃimaˈxɐ̃ũ]) or cimarrón, is a traditional South American infused drink. It is prepared from steeping dried leaves of yerba mate (llex paraguariensis, known in Portuguese as erva mate) in hot water. It is the national drink in Argentina, Paraguay, and Uruguay, and drinking it is a common social practice in parts of Brazil, Chile, eastern Bolivia, Lebanon and Syria. In Brazil, it is considered to be a tradition typical of the “Gaúchos”, name given to those born in Rio Grande do Sul. The drink contains caffeine.
(&#8230;)
The multicultural Yerba Mate Association of the Americas states that it is always improper to accent the second syllable, since doing so confuses the word with the unrelated Spanish word meaning &#8220;I killed.&#8221;</blockquote><p>One of the phrases in the quoted paragraphs from Wikipedia brings to mind the importance of such a drink in the creation of software products (no, not the phrase about killing, the previous one). Caffeine is known for its capabilities in waking up inert areas of the brain, particularly during  brain-damaging activities.</p><p
align="center"><a
href="http://dilbert.com/strips/comic/2009-10-12/"><img
src="http://kosmaczewski.net/wp-content/uploads/2009/10/70675.strip.gif" alt="70675.strip" title="70675.strip" width="500" height="155" class="alignnone size-full wp-image-1988" /></a></p><p>We consider unfortunate to qualify software development as a brain-damaging activity (although some research arrives to this particular conclusion), however, it is certainly a brain-intensive one, and as such, Yerba Mate has proven, in our tests, to be a particularly interesting option to coffee.</p><h3>Preparation</h3><p>To prepare &#8220;Mate&#8221; (the beverage), three basic elements are required:</p><ol><li>A recipient, usually also referred to as &#8220;mate&#8221; (to add to the confusion), but also called &#8220;guampa&#8221;, &#8220;cuia&#8221;, &#8220;calabaza&#8221;, and other names without any translation to English whatsoever. Among these names appears also &#8220;porongo&#8221;, as it is known in Uruguay; this word is usually avoided in Argentina, for the exact same reason the name <a
href="http://en.wikipedia.org/wiki/Mitsubishi_Pajero">&#8220;Mitsubishi Pajero&#8221;</a> has been a commercial failure there. This element can be made of wood, metal or even be the hollow shell of a dried <a
href="http://en.wikipedia.org/wiki/Calabash">calabash</a>.</li><li><img
src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5f/Bombilla.jpg/200px-Bombilla.jpg" width="200" height="98" alt="The straw" align="right">A metallic straw, usually also referred to as &#8220;bombilla&#8221; or less commonly, &#8220;bomba&#8221;. This element can be made out of metal or wood, and is used to drink the infusion, avoiding to swallow the leaves of Yerba Mate at the same time. The best ones have their top part covered in gold, which protects the lips from the intense heat generated by the water in the metal, and also provides a sense of luxury into an otherwise rather humble activity.</li><li>Hot water, never boiled, at around 70 to 80 degrees Celsius (160 &#8211; 180 degrees Fahrenheit). It is very, very, <strong>VERY</strong> important to serve the water at the exact temperature, without boiling the water inadvertently. Usually, the best way to keep the water hot is with a <a
href="http://en.wikipedia.org/wiki/Vacuum_flask">thermos or vacuum flask</a>, of which the latest industry benchmarks highlight the Uruguayan brand <a
href="http://www.lumilagro.com/">&#8220;Lumilagro&#8221;</a> as the most reliable, competitive and durable in the market. European customers are best served by the <a
href="http://www.flickr.com/photos/gahjr2000/5796110/">standard thermos provided by Ikea</a>.</ol><p>Once all the elements are ready, the preparation process is fairly simple:</p><ol><li>Add the Yerba Mate leaves in the mate (the recipient);</li><li>Put the right hand on top of the mate (recipient) covering the entrance, and using your left hand, turn the recipient upside down and shake it a little; then return the recipient to its normal position and dust the mate powder from your hand (it is strongly recommended <strong>not</strong> sniffing it);</li><li>Insert the straw in the recipient, creating a small hole in the Yerba at the same time;</li><li>Pour in hot water, very slowly, in the hole caved in the previous step; on the first serve it is best to avoid filling the mate completely, to leave time to the yerba to get moist and release the flavor slowly;</li><li>Drink the mate, by sipping at the straw, taking care not to burn your mouth or throat;</li><li>Pass the mate around, which helps create and spread a sense of teamwork, to bring an ambience of relaxation and self-contemplation, and also to spread many known viruses.</li></ol><h3>Advantages</h3><p>In the context of software engineering, such a practice has the following advantages:</p><ul><li><strong>Health benefits:</strong> The ingestion of mate (the beverage) contributes positively to the recommended daily intake of water (at least around 2 or 3 liters a day), and thus to the maintenance of a convenient hydration level in the brain, which is recognized by several studies as a major contribution to its productivity. Some recent papers even indicate that the habit of Mate drinking can reduce the risks of cancer, but in any case, Yerba Mate is also a major source of <a
href="http://en.wikipedia.org/wiki/Mate_(beverage)#Health_Effects">many important elements</a> for a healthy daily diet:<blockquote>It contains vitamins A, C, E, B1, B2, Niacin (B3), B5, B&#8230; and complex minerals like Calcium, Manganese, Iron, Selenium, Potassium, Magnesium, Phosphorus, and Zinc. It also contains Carotene, Fatty Acids, Chlorophyll, Flavonols, Polyphenols, Inositol, Trace Minerals, Antioxidants, Tannins, Pantothenic Acid, and 15 Amino Acids.</blockquote></li><li><strong>Prolonged working hours:</strong> Instead of having to leave the desk to get yet another cup of coffee, the knowledge worker can sit in front of his computer for hours, particularly when using thermos with a capacity of at least 1 or 1.5 liters (around half a gallon). Mate (the beverage) is also known for reducing appetite, which helps reduce costs in the case of companies providing food to their employees.</li><li><strong>Teamwork benefits:</strong> Given the inherent social origins of the habit of drinking mate, in the case of teams, or in the case of agile practices such as <a
href="http://en.wikipedia.org/wiki/Pair_programming">pair programming</a>, sharing the mate (the recipient) helps team managers to create a sense of unity and common goal.</li><li><strong>Increased sensitivity:</strong> As with all caffeinated drinks, the intake of mate can lead to an improvement in the <a
href="http://www.youtube.com/watch?v=Vi5JyCYKZws">overall awareness</a> of the mate drinker.</li></ul><h3>Disadvantages</h3><p>The following disadvantages of Mate (the herb, the beverage and the recipient) are worth considering:</p><ul><li><strong>Cold water effects:</strong> Although common practice in Paraguay (where the infusion of Yerba Mate with cold water is known as <a
href="http://en.wikipedia.org/wiki/Tereré">Tereré</a>), this variant is known for causing violent reactions in the digestive system of the person drinking it, and it is strongly recommended to never drink it more than 20 meters away from the nearest toilet.</li><li><strong>Bitterness:</strong> The strong taste of Yerba Mate is also a factor of considerable debate. Most mate drinkers usually start drinking it with sugar (some even with saccharine or other sweeteners), while most experienced drinkers will dismiss this practice and downplay those doing it as amateurish or otherwise ignorant. It is strongly recommended to have everyone agree on a mate variant beforehand to avoid shallow discussions on the relative merits of different approaches to mate drinking.</li><li><strong>Mate lavado:</strong> When the same Yerba has been poured several times (usually above 10 or 12 servings, depending on the quality of the Yerba), it loses part of its taste and must be replaced with new Yerba. Depending on how many people share the same mate (the recipient), this can be a significant problem, leading to reduced productivity and major anxiety and dismay.</li><li><strong>&#8220;Matetiquette&#8221;:</strong> Mate (the beverage) is linked with a complete language, tied up to the history of the southern part of South America. As such, please be aware of the fact that serving a &#8220;mate lavado&#8221; (see previous item for an explanation of the concept) is considered rude practice, and is strongly discouraged. Serving mate with cold water, as explained above, can also be seen negatively, particularly if the person preparing the mate is not from Paraguay. Finally, talking in front of your recently-filled mate instead of drinking it, is also frowned upon, as you might be greeted with a &#8220;it&#8217;s not a microphone&#8221; protest if you do it.</li></ul><h3>Conclusion</h3><p>The importance of the Yerba Mate in the process of creation of software has been greatly dismissed by major research efforts, and we think that more research and mate drinking is needed. In our tests, Yerba Mate has been proven to foster creativity, teamwork, overall happiness, and trips to the toilets.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/on-the-importance-of-yerba-mate-in-the-software-development-process/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>Slides, slides, slides</title><link>http://akosma.com/2009/09/10/slides-slides-slides/</link> <comments>http://akosma.com/2009/09/10/slides-slides-slides/#comments</comments> <pubDate>Thu, 10 Sep 2009 10:29:03 +0000</pubDate> <dc:creator>akosma software</dc:creator> <category><![CDATA[iPhone]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Switzerland]]></category> <category><![CDATA[conference]]></category> <category><![CDATA[Presentation]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1912</guid> <description><![CDATA[I&#8217;ve been doing presentations for a while now, so I decided to open a SlideShare account to publish all the slides I&#8217;ve created over the past 5 years. SlideShare has a great Flash-based viewer that you can embed in web &#8230; <a
href="http://akosma.com/2009/09/10/slides-slides-slides/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>I&#8217;ve been doing presentations for a while now, so I decided to open a <a
href="http://www.slideshare.net/akosma">SlideShare account</a> to publish all the slides I&#8217;ve created over the past 5 years. SlideShare has a great Flash-based viewer that you can embed in web pages, so I&#8217;ll be using it a lot now. Check out my presentations, feel free to download them and also to use them if you find the contents useful for you (they are distributed with Creative Commons licenses).</p><p>Having said that, I&#8217;m also announcing that the slides (and sample application) of yesterday&#8217;s JAOO geek night presentation in Zürich <a
href="http://kosmaczewski.net/projects/tips-and-tricks-zurich/">are also available in the Projects section of this blog</a>, and here goes the SlideShare player with those slides:</p><div
style="width:425px;text-align:left" id="__ss_1977127"><a
style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/akosma/iphone-app-development-tips-tricks-zrich" title="iPhone App Development Tips &amp; Tricks (Zürich)">iPhone App Development Tips &amp; Tricks (Zürich)</a><object
style="margin:0px" width="425" height="355"><param
name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-090910044616-phpapp02&#038;stripped_title=iphone-app-development-tips-tricks-zrich" /><param
name="allowFullScreen" value="true"/><param
name="allowScriptAccess" value="always"/><embed
src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=slides-090910044616-phpapp02&#038;stripped_title=iphone-app-development-tips-tricks-zrich" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object><div
style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a
style="text-decoration:underline;" href="http://www.slideshare.net/">documents</a> from <a
style="text-decoration:underline;" href="http://www.slideshare.net/akosma">Adrian Kosmaczewski</a>.</div></div> ]]></content:encoded> <wfw:commentRss>http://akosma.com/2009/09/10/slides-slides-slides/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Copenhagen Slides Available</title><link>http://akosma.com/2009/08/31/copenhagen-slides-available/</link> <comments>http://akosma.com/2009/08/31/copenhagen-slides-available/#comments</comments> <pubDate>Mon, 31 Aug 2009 17:03:07 +0000</pubDate> <dc:creator>akosma software</dc:creator> <category><![CDATA[iPhone]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[project]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1883</guid> <description><![CDATA[Another quick post to announce that I&#8217;ve published the slides (and sample application) I&#8217;ve shown last week in Copenhagen; feel free to download them from the projects section! Remember that I&#8217;ll be hosting a similar talk on September 9th in &#8230; <a
href="http://akosma.com/2009/08/31/copenhagen-slides-available/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Another quick post to announce that I&#8217;ve published the slides (and sample application) I&#8217;ve shown last week in Copenhagen; feel free to <a
href="/projects/tips-and-tricks-copenhagen/">download them from the projects section</a>!</p><p>Remember that I&#8217;ll be hosting a similar talk on <a
href="http://url.akosma.com/g04dq7">September 9th in Zürich</a>! I look forward to see you there and to discuss about iPhone development.</p> ]]></content:encoded> <wfw:commentRss>http://akosma.com/2009/08/31/copenhagen-slides-available/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>iPhone Conference 2008: a bit of magic!</title><link>http://kosmaczewski.net/iphone-conference-2008-a-bit-of-magic/</link> <comments>http://kosmaczewski.net/iphone-conference-2008-a-bit-of-magic/#comments</comments> <pubDate>Mon, 03 Nov 2008 17:00:31 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Apple]]></category> <category><![CDATA[Cocoa]]></category> <category><![CDATA[Opinion]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[conference]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[Switzerland]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1264</guid> <description><![CDATA[This is the talk I gave last Friday during the first edition of the iPhone Conference 2008! I hope you&#8217;ll enjoy it as much as I enjoyed giving it :)]]></description> <content:encoded><![CDATA[<p>This is the talk I gave last Friday during the first edition of the iPhone Conference 2008! I hope you&#8217;ll enjoy it as much as I enjoyed giving it :)</p><p><object
width="400" height="225"><param
name="allowfullscreen" value="true" /><param
name="allowscriptaccess" value="always" /><param
name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=2126237&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ff9933&amp;fullscreen=1" /> <embed
src="http://vimeo.com/moogaloop.swf?clip_id=2126237&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=0&amp;show_portrait=0&amp;color=ff9933&amp;fullscreen=1" type="application/x-shockwave-flash" allowfullscreen="true"
allowscriptaccess="always" width="400" height="225"> </embed> </object></p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/iphone-conference-2008-a-bit-of-magic/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Master</title><link>http://kosmaczewski.net/master/</link> <comments>http://kosmaczewski.net/master/#comments</comments> <pubDate>Thu, 28 Aug 2008 08:32:49 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Humour]]></category> <category><![CDATA[Opinion]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[C++]]></category> <category><![CDATA[Juce]]></category> <category><![CDATA[SQLite]]></category> <category><![CDATA[UML]]></category> <category><![CDATA[university degree]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1252</guid> <description><![CDATA[I&#8217;ve sent the final version of my dissertation to the University of Liverpool. I&#8217;ve been doing this Master&#8217;s degree since 2005, and now it&#8217;s over. It feels good and weird at the same time. Rem 1.0, the final result and &#8230; <a
href="http://kosmaczewski.net/master/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>I&#8217;ve sent the final version of my dissertation to the University of Liverpool. I&#8217;ve been doing this Master&#8217;s degree since 2005, and now it&#8217;s over. It feels good and weird at the same time.</p><p><a
href="http://www.phdcomics.com/comics/archive.php?comicid=1056"><img
src="/wp-content/uploads/2008/08/20080816.gif" alt="" title="20080816" width="500" height="247" class="alignnone size-full wp-image-1251" /></a></p><p><a
href="http://remproject.org/">Rem 1.0</a>, the final result and main objective of my Master&#8217;s thesis work, has been released today. A small, simple, yet extensible and portable UML tool written in C++, using <a
href="http://www.rawmaterialsoftware.com/juce/">Juce</a>, <a
href="http://pocoproject.org/">POCO</a> and <a
href="http://www.sqlite.org/">SQLite</a>. Not perfect but extensible and small. And that&#8217;s what&#8217;s great about it.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/master/feed/</wfw:commentRss> <slash:comments>8</slash:comments> </item> <item><title>Dangers of Prototyping</title><link>http://kosmaczewski.net/dangers-of-prototypin/</link> <comments>http://kosmaczewski.net/dangers-of-prototypin/#comments</comments> <pubDate>Fri, 15 Aug 2008 06:16:17 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[engineering]]></category> <category><![CDATA[project]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Technology]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1250</guid> <description><![CDATA[Frederick P. Brooks Jr. has written about prototypes, saying that they are not only useful but strictly fundamental pieces of the overall software process, as in many other engineering activities. He gives the example of a pilot chemical plant, prepared &#8230; <a
href="http://kosmaczewski.net/dangers-of-prototypin/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Frederick P. Brooks Jr. has written about prototypes, saying that they are not only useful but strictly fundamental pieces of the overall software process, as in many other engineering activities. He gives the example of a pilot chemical plant, prepared to process 10&#8217;000 units per day instead of the 2 million units a day that the final plant would have to handle, in order to demonstrate the feasibility and uncover some unforeseen problems.</p><p>He summarizes his opinion in the famous phrase &#8220;plan to throw one away&#8221; (Brooks, 1995, page 116), underlining the problem of <strong>change management</strong>: managing change, right from the beginning of the project, instead of ignoring or avoiding it, is particularly important in software projects, since it presents a solid mindset for all stakeholders in order to avoid scope creep, schedule and staffing problems. <span
id="more-1250"></span> One of the proposed solutions to manage change (the &#8220;only constant thing&#8221;) in a software project is the use of prototypes, which consist of UI mockups, showing basic interactions between the components and screens, allowing users to see in real time how the final software will look like, and serving as part of the feasibility study before creating the final product.</p><p>Several authors have highlighted different problems related to prototypes:</p><blockquote> We consider three dangers to be most serious.<ul><li>Assumptions may be hidden (&#8230;)</li><li>Feedback may be too expensive (&#8230;)</li><li>Inappropriate human-computer interaction issues are highlighted</li></ul></blockquote><p>(Atwood et al, 1995, page 180)</p><blockquote>One of the risk of creating a User Interface Prototype is accidentally raising unrealistic expectations about future progress on the project.</blockquote><p>(McConnell, 1998, page 117)</p><blockquote>Firstly, there are still plenty of users and managers around who think that the software is not much deeper than the user interface, and so if they see a nearly finished interface, they think the project is nearly done. (&#8230;)
Secondly, engineers often get carried away about making a lovely user interface, and spend far too much time on it. (&#8230;)
Lastly, and perhaps most importantly, is the fact that almost no code that is written as a &#8216;temporary throw-away&#8217; actually gets thrown away. It usually gets used in the product in one way or another.</blockquote><p>(Whitehead, 2001, page 254)</p><blockquote><ul><li>Needs cooperation of management, developers, and users</li><li>Managers may view prototyping as wasteful</li><li>Managers and/or customers and/or marketing may view prototype as final product</li><li>Programmers may lose discipline</li><li>Prototype can be overworked (reason for prototype is forgotten)</li><li>Prototyping tool may influence design</li><li>Possibility of overpromising with prototype</li></ul></blockquote><p>(Hartson, 2001, page 5)</p><p>In my personal experience, I must say that I have not worked in many teams using prototyping extensively. Many times, when I have came up with the idea of doing a prototype, my managers (and even my coworkers) would dismiss it with the following criteria:</p><p><em>&#8220;We don&#8217;t have time &#8211; money &#8211; staff &#8211; (add your own preferred variable here)&#8221;
&#8220;OK, but do the prototype in such a way that we could reuse it later&#8221;
&#8220;We do not lose time in prototypes in this company; we do real work here&#8221;
&#8220;We do not have a budget for prototypes in the project&#8221;
&#8220;We know exactly what the customer wants&#8221;
&#8220;Oh, we&#8217;ve tried that once, but the customers never like what they see anyway, so why bother&#8221;
&#8220;Our client does not want prototypes, period&#8221;
&#8220;Our CEO does not want prototypes, period&#8221;
&#8220;I do not want prototypes, period&#8221;
&#8220;Our policy does not allow prototypes&#8221;</em></p><p>However, I must add that in just one case (a successful project I worked in three years ago), the analysts team managed to fit in the project budget the capability to create a set of user interface prototypes using <strong>Microsoft Visio</strong>. This tool (or any other diagramming tool) has many advantages over the traditional &#8220;Visual Basic&#8221;-based prototyping:</p><ul><li>Any user with Visio (be it analysts, developers, end users with basic Microsoft Office knowledge) can contribute to the prototypes, suggest changes and play with the mockups;</li><li>No code is needed, which avoids developers to reuse it later;</li><li>The output can be inserted (typically as images) in other documents, e-mails, etc.</li></ul><p>This technique had a tremendously positive impact in the project:</p><ul><li>A great deal of feedback from the client was related to the mock-ups;</li><li>The design documentation had an excellent complement of information, in the form of screenshots, coupled with the textual indication of every possible action on the user interface;</li><li>The developers could use these indications to reduce the uncertainty and deliver a product that matched the final decisions exactly;</li><li>Since the prototypes were not &#8220;reusable&#8221; (they were after all only drawings on Visio) the developers could not be tempted to reuse the code in the final product.</li></ul><p>In my opinion, this approach was one of the key factors of success of the project, but not the only one: the team members and the customer agreed that the project was critical and complex, and that a prototype could help everyone to understand it better. There was a <strong>specific mindset</strong> in the whole project, at both sides of the equation, which made prototyping a good option, and a success factor. Without this mindset, I do not think that prototyping will fit in any project.</p><p><strong>References</strong></p><p>Atwood, M. E.; Burns, B.; Girgensohn, A.; Lee, A.; Turner, T.; Zimmermann, B.; &#8220;Prototyping Considered Dangerous&#8221;, Interact ’95 Conference Proceedings, Pp. 179-184, NYNEX Science and Technology [Internet] <a
href="http://www.fxpal.com/people/andreasg/interact95-2.pdf">http://www.fxpal.com/people/andreasg/interact95-2.pdf</a> (Accessed June 24th, 2007)</p><p>Hartson, &#8220;Rapid Prototyping and Its Role in Development and Evaluation of User Interaction&#8221;, CS 5714 Fall 2001 &#8211; Usability Engineering, Virginia Tech [Internet] <a
href="http://courses.cs.vt.edu/~cs5714/fall2001/notes/pdf/05_RP.pdf">http://courses.cs.vt.edu/~cs5714/fall2001/notes/pdf/05_RP.pdf</a> (Accessed June 24th, 2007)</p><p>Brooks Jr., F. P.; &#8220;The Mythical Man-Month &#8211; Essays on Software Engineering, Anniversary Edition&#8221;, 1995, Addison Wesley, ISBN 0-201-83595-9</p><p>McConnell, Steve, &#8220;Software Project Survival Guide&#8221;, Microsoft Press, 1998, ISBN 1-57231-621-7</p><p>Whitehead, R.; &#8220;Leading a Software Development Team &#8211; A Developer&#8217;s Guide to Successfully Leading People &amp; Projects&#8221;, Addison-Wesley, 2001, ISBN 0-201-67526-9</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/dangers-of-prototypin/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Saving a Failing Project</title><link>http://kosmaczewski.net/saving-a-failing-project/</link> <comments>http://kosmaczewski.net/saving-a-failing-project/#comments</comments> <pubDate>Mon, 11 Aug 2008 06:40:02 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Papers]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Quality]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Architecture]]></category> <category><![CDATA[Lausanne]]></category> <category><![CDATA[project]]></category> <category><![CDATA[source control]]></category> <category><![CDATA[tools]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1248</guid> <description><![CDATA[In 2006 I had the opportunity to work as a &#8220;project leader&#8221; into a small failing project. Three developers were working in an ad hoc basis, creating a software application for an important client (a government office in Lausanne), without &#8230; <a
href="http://kosmaczewski.net/saving-a-failing-project/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>In 2006 I had the opportunity to work as a &#8220;project leader&#8221; into a small failing project. Three developers were working in an ad hoc basis, creating a software application for an important client (a government office in Lausanne), without any kind of detailed formal specification, without any kind of design documentation, and with strong pressure from the management to release the application, even if not in an usable state. Needless to say, the project was also beyond budget.</p><p>I had just joined this company a couple of days ago, and the management asked me to take the project in charge. Not an easy task, particularly because it was my first experience of this kind. <span
id="more-1248"></span> The client was pushing to get the software it had paid for (it was a desktop reporting application for the Police department), and had not got any kind of preview yet. So the first thing I did is to pick up my copy of &#8220;Leading a Software Development Team&#8221; book and read chapter 2, &#8220;I&#8217;m taking over the leadership of an existing project // where do I start?&#8221; and get a thorough read:</p><blockquote>The first thing that you should start to do is to review the situation. This involves more than just absorbing impressions; you need to organize these impressions into a framework. Try to organize your thoughts into the following areas, and in each area try to separate technical issues from personnel ones:
- Where is the team now? (&#8230;)
- Where is it supposed to be getting to? (&#8230;)
- How does the team currently intend to continue?</blockquote><p>(Whitehead, page 17)</p><p>Another highly pragmatic resource was Joel Spolsky, and his &#8220;Joel Test&#8221;:</p><blockquote>The neat thing about The Joel Test is that it&#8217;s easy to get a quick yes or no to each question. You don&#8217;t have to figure out lines-of-code-per-day or average-bugs-per-inflection-point. Give your team 1 point for each &#8220;yes&#8221; answer.(&#8230;)
A score of 12 is perfect, 11 is tolerable, but 10 or lower and you&#8217;ve got serious problems. The truth is that most software organizations are running with a score of 2 or 3, and they need serious help, because companies like Microsoft run at 12 full-time.</blockquote><p>(Spolsky, 2000)</p><p>The &#8220;Joel Test&#8221; result for this team was 2 when I joined the team (they just had source control and good tools). When I left the company, they were running at 9 (we just did not have candidates writing code during interviews, nor testers, nor hallway usability testing).</p><p>For this project I took the following decisions:</p><ul><li>Since the priority for the client was to see results, I asked the developers to concentrate on stabilizing &#8220;visible&#8221; features, particularly on a visual report editor, that used a complex set of controls, similar to those of a drawing application, to create reports. Doing this, we could have a stabilized preview version that we showed to the client as early as one week after my arrival to the project.</li><li>In agreement with the developers, we set up a daily build procedure, and I also asked them to provide a &#8220;client build&#8221; every Wednesday, that would be placed in a public directory available to the client. It turns out that the client never downloaded the binaries, but they liked to see the version numbers grow, and the binaries being delivered. Every week, Wednesday was the &#8220;public build&#8221; day, Thursday was the &#8220;bug correction&#8221; day, and Friday, Monday and Tuesday were &#8220;new features day&#8221;. Small stand-up meetings every day allowed us to know what was going on.</li><li>Another important concern from the developers&#8217; side was to have a quiet environment to work. They were constantly interrupted by the (quite nervous) managers to see their progress, and as such, I decided to stand in between both; I asked them to not to interrupt the developers for any reason, and to ask me for updates. I became a &#8220;proxy&#8221; between both, which reduced the tensions, and brought some peace to the developers.</li><li>I created a fast project plan in our Intranet (there wasn&#8217;t any, so tracking the project was next to impossible) by asking the developers about the tasks they needed to do to finish the project, with the estimated time to do them, and setting some milestones. Since the project was in a wiki page, the developers could change the time estimations in case that they felt they had made a mistake; the only condition being to notify me of these changes.</li><li>Using that information, I could create a couple of reports for everyone to see, and bring more visibility to the project:<ol><li>I wrote a weekly report stating the week&#8217;s achievements, the status of the project (number of open bugs, new functionality available, etc).</li><li>In the intranet, I set up a couple of graphs and report tables, which were automatically updated every day.</li></ol></li><li>I did not take any technical decisions about the project; I gave full authority on this matter to the lead developer, who in turn appreciated this trust and took spontaneously the decision of documenting and unit testing the system thoroughly doing extra hours every day. This boosted the morale of the team, and the quality of the application as well. The other two developers contributed to these tasks as well, and the rhythm of releases and their quality increased in a couple of months. It turns out that the architecture of the system was particularly well done, and as such, adding new features was a relatively simple task, once the underlying framework was done; of course, during that time no visible results were available, which made everyone nervous.</li></ul><p>Looking backwards, the only technical decision I&#8217;ve needed to take during this project was to use the company wiki; there I could add information pages that everyone contributed to, reducing the number of communication channels and reducing the misunderstandings between project team members. I cannot stress how much this helped; it provided a complete dashboard for everyone to refer to.</p><p>The most important problems in this project were human and customer related ones. By providing more visibility to the project, and by reducing the signal-to-noise ratio in the communication channels between developers and management, the team was able to provide the customer with a more reliable and full-featured product.</p><p><strong>References</strong></p><p>Joel Spolsky, &#8220;The Joel Test: 12 Steps for Better Code&#8221;, Wednesday, August 9th, 2000 [Internet] <a
href="http://www.joelonsoftware.com/articles/fog0000000043.html">http://www.joelonsoftware.com/articles/fog0000000043.html</a> (Accessed June 8th, 2007)</p><p>Whitehead, R.; &#8220;Leading a Software Development Team &#8211; A Developer&#8217;s Guide to Successfully Leading People &amp; Projects&#8221;, Addison-Wesley, 2001, ISBN 0-201-67526-9</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/saving-a-failing-project/feed/</wfw:commentRss> <slash:comments>11</slash:comments> </item> <item><title>Adding Manpower</title><link>http://kosmaczewski.net/adding-manpower/</link> <comments>http://kosmaczewski.net/adding-manpower/#comments</comments> <pubDate>Fri, 08 Aug 2008 07:30:42 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Architecture]]></category> <category><![CDATA[Books]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[process]]></category> <category><![CDATA[productivity]]></category> <category><![CDATA[project]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1247</guid> <description><![CDATA[Published in 1975, &#8220;The Mythical Man-Month&#8221; is considered an all-time classic in the software engineering field. The book author, Frederick P. Brooks Jr., used his experience as the project manager of the IBM System/360 and its software, the Operating System/360, &#8230; <a
href="http://kosmaczewski.net/adding-manpower/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Published in 1975, &#8220;The Mythical Man-Month&#8221; is considered an all-time classic in the software engineering field. The book author, Frederick P. Brooks Jr., used his experience as the project manager of the IBM System/360 and its software, the Operating System/360, to explain a common set of problem patterns, applicable to other software projects as well.</p><p>One of the most famous citations in the book is the one regarding the consequences of adding human resources to a late project; this article will provide a couple of thoughts about this assertion, and highlight some contrariwise opinions. <span
id="more-1247"></span> <strong>The Mythical Man-Month</strong></p><p>The second chapter of Brooks&#8217; masterpiece is named exactly as the book, &#8220;The Mythical Man-Month&#8221;; the core argument of this chapter is that the most frequent factor of project failure is schedule and time estimation. Brooks states that this is due to the fact that</p><blockquote>Men and months are interchangeable commodities only when a task can be partitioned among many workers <strong>with no communication among them.</strong> This is true of reaping wheat or picking cotton; it is not even approximately true of systems programming.
When a task cannot be partitioned because of sequential constraints, the application of more effort has no effect on the schedule. The bearing of a child takes nine months, no matter how many women are assigned.</blockquote><p>(Brooks, pages 16 &amp; 17)</p><p>The final phrase of the above paragraph is often used as a graphical depiction of the nature and meaning of Brooks&#8217; law. It implies the strong need for communication and integration existing in software projects; being social processes, software requires a strong network of communication between team members, allowing them to coordinate the inherent set of interdependencies that every project has.</p><p>After an interesting analysis of common time overrun situations, Brooks ends this chapter with the following conclusion, which contains the enunciation of the law itself:</p><blockquote>Oversimplifying otrageously, we state Brooks&#8217;s Law: <strong>Adding manpower to a late software project makes it later.</strong> This is then the demythologizing of the man-month. The number of months of a project depend upon its sequential constraints. The maximum number of men depends upon the number of independent subtasks. From these two quantities one can derive schedules using fewer men and more months. (The only risk is product obsolescence.) One cannot, however, get workable schedules using more men and fewer months. More software projects have gone awry for lack of calendar time than for all other causes combined.</blockquote><p>(Brooks, pages 25 &amp; 26)</p><p>This &#8220;law&#8221; is known and cited throughout the industry as an example of a common pattern, observed once and again in different projects all over the world:</p><blockquote><strong>Fact 3: Adding people to a later project makes it later</strong>(&#8230;)
Intuition tells us that, if a project is behind schedule, staffing should be increased to play schedule catch-up. Intuition, this fact tells us, is wrong. The problem is, as people are added to a project, time must be spent on bringing them up to speed.(&#8230;)
Furthermore, the more people there are on a project, the more the complexity of its communication rises.</blockquote><p>(Glass, page 16)</p><p>As a personal experience, I must say that the lecture of this book opened my eyes more than many, many other books. It is a funny read, but also an enlightening one: many anecdotes told by Brooks strangely correspond to my own experience, and this one is no exception. I have seen projects gone unfortunately late because of the simple fact of adding more people; and in one particular case, the project was cancelled altogether. These projects had several factors in common, though:</p><ul><li><strong>Bad documentation, or lack thereof;</strong> the only way for newcomers to the project to know what was going on was interrupting the other developers, disrupting the current operations on the project; I think that a good set of documents, describing both the high-level architecture and the low-level APIs are needed for new developers to jump in and catch up. It&#8217;s maybe not enough, but a good leap forward anyway.</li><li><strong>Lack of architectural vision;</strong> projects that do not have an architect, providing vision and technical leadership to the team, are in my opinion exposed to problems when more developers join the project. The architect can act as a proxy person, guiding new developers while they familiarize themselves with the project, isolating other developers from this task.</li><li><strong>Bad project decomposition in components;</strong> if the system to be developed is sufficiently large, and the decomposition in components is not properly done, the overlap and extended communication paths among team members might affect the whole project negatively. A good decomposition breaks down the whole project in a set of smaller ones, with the corresponding set of interfaces, which brings the whole team to work separately on different subsystems. In these, the risk of getting later for adding manpower is reduced proportionally.</li><li><strong>Bad working conditions;</strong> I positively think that open spaces are a common disease in our industry. Teams working in open spaces suffer more of noise and visual distractions, and this is more evident when new team members join the project.</li></ul><p><strong>Criticism</strong></p><p>However famous, Brooks&#8217; law has had a good deal of criticism as well, regarding the specific characteristics of projects that might be affected in case that new people is assigned to them. The OS/360 project, which served as the basis for Brooks&#8217; work, might not be similar to other projects, and as such, the law would not necessarily apply to them:</p><blockquote>For Brooks’ Law to be true, the amount of training effort required from existing staff must be significant. The amount of effort lost to training must exceed the productivity contributed by new staff when they eventually become productive. (&#8230;)
&#8220;Late&#8221; chaotic projects are likely to be much later than the project manager thinks&#8211;project completion isn’t three weeks away, it’s six months away. Go ahead and add staff. You’ll have time for them to become productive. Your project will still be later than your plan, but that’s not a result of Brooks’ Law. It’s a result of underestimating the project in the first place.(&#8230;)
Controlled projects are less susceptible to Brooks’ Law than chaotic projects. Their better tracking allows them to know when they can safely add staff and when they can’t. Their better documentation and better designs make tasks more partitionable and training less labor intensive. They can add staff later in the project with less risk to the project.</blockquote><p>(McConnell, 1999)</p><p>Scott Berkun gives a more concrete analysis on why the law could be wrong:</p><blockquote><ul><li><strong>It depends who the manpower is.</strong> The law assumes that all added manpower is equal, which is not true.</li><li><strong>Some teams can absorb more change than others.</strong> Some teams are more resiliant to change.</li><li><strong>There are worse things than being later.</strong> (&#8230;) That can be ok if you also get higher quality</li><li><strong>There are different ways to add manpower.</strong> (&#8230;) The more experience everyone has with mid-stream personnel changes, the better.</li><li><strong>It depends on why the project was late to begin with.</strong> (&#8230;) no amount of programming staff modifications will resolve the psychiatric needs of team leaders or the dysfunctions of executives.</li><li><strong>Adding people can be combined with other management action.</strong> (&#8230;) if you’re removing your worst, and most disruptive, programmer and adding one of your best, it can be a reasonable choice.</li></ul></blockquote><p>(Berkun, 2006)</p><p>And what about open source projects? Many of these (Linux, Apache, MySQL) are potentially among the biggest software projects ever undertaken, and they don&#8217;t appear to suffer o fthe problems pictured by Brooks&#8217; law:</p><blockquote>But proponents of open source and free software development, including Linux developers, are not completely satisfied with the Law. Most famously (among geeks at any rate), Eric Raymond in his &#8220;The Cathedral and the Bazaar,&#8221; declared Brooks&#8217; Law obsolete, if not simply limited, saying &#8220;if Brooks&#8217; Law were the whole picture, Linux would be impossible.&#8221;
Although Raymond now says that he has somewhat modified his views or was misunderstood, some still would say he is given to oversimplifying and outrageousness himself. &#8220;I don&#8217;t consider Brooks&#8217; Law &#8216;obsolete&#8217; any more than Newtonian physics is obsolete; it&#8217;s just incomplete. Just as you get non-Newtonian effects at high energies and velocities, you get non-Brooksian effects when transaction costs go low enough. Under sufficiently extreme conditions, these secondary effects dominate the system &#8212; you get nuclear explosions, or Linux.&#8221;</blockquote><p>(Jones, 2000)</p><p><strong>Conclusion</strong></p><p>So far, the discussion seems to be open. There might be a scale factor for projects, which in turn might expose them to be affected by Brooks&#8217; law. I think that research is needed to arrive to a conclusion, even if it will be a statistical one.</p><p>Other important facts highlighted in the book are the &#8220;second system phenomenon&#8221;, the productivity advantage of using high-level languages, and the importance of building a prototype &#8211; &#8220;one to throw away&#8221;. I can only recommend this book to everyone interested in the field of software engineering (which I did in my own review of classic books in this blog:<a
href=" http://kosmaczewski.net/2005/11/20/my-bookshelf-part-iii/"> http://kosmaczewski.net/2005/11/20/my-bookshelf-part-iii/</a> )</p><p><strong>References</strong></p><p>Berkun, S.; &#8220;Exceptions to Brooks’ Law&#8221;, January 11th, 2006, [Internet] <a
href="http://www.scottberkun.com/blog/2006/exceptions-to-brooks-law/">http://www.scottberkun.com/blog/2006/exceptions-to-brooks-law/</a> (Accessed June 8th, 2007)</p><p>Brooks Jr., F. P.; &#8220;The Mythical Man-Month &#8211; Essays on Software Engineering, Anniversary Edition&#8221;, 1995, Addison Wesley, ISBN 0-201-83595-9</p><p>Glass, R. L.; &#8220;Facts and Fallacies of Software Engineering&#8221;, Addison-Wesley, 2003, ISBN 0321117425</p><p>Jones, P.; &#8220;Brooks&#8217; Law and open source: The more the merrier?&#8221;, IBM, May 1st, 2000, [Internet] <a
href="http://www.ibm.com/developerworks/linux/library/os-merrier.html">http://www.ibm.com/developerworks/linux/library/os-merrier.html</a> (Accessed June 8th, 2007)</p><p>McConnell, S.; &#8220;Brooks&#8217; Law Repealed?&#8221;, IEEE Software, November/December 1999 [Internet] <a
href="http://stevemcconnell.com/ieeesoftware/eic08.htm">http://stevemcconnell.com/ieeesoftware/eic08.htm</a> (Accessed June 8th, 2007)</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/adding-manpower/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Certification</title><link>http://kosmaczewski.net/certification/</link> <comments>http://kosmaczewski.net/certification/#comments</comments> <pubDate>Tue, 05 Aug 2008 08:09:31 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Papers]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Quality]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Architecture]]></category> <category><![CDATA[business]]></category> <category><![CDATA[learning]]></category> <category><![CDATA[university degree]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1246</guid> <description><![CDATA[While several other professions have a long, established and standard procedure of certification, the title &#8220;software engineer&#8221; is applied to both self-made developers, turned into experts of some technique, or to people with PhD degrees, and a long history of &#8230; <a
href="http://kosmaczewski.net/certification/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>While several other professions have a long, established and standard procedure of certification, the title &#8220;software engineer&#8221; is applied to both self-made developers, turned into experts of some technique, or to people with PhD degrees, and a long history of both academic and professional achievements.</p><p>When in some situations it is not legally possible to use the title &#8220;software engineer&#8221; without an engineering degree of some kind (for example, in some states of the USA or some institutions like the IEEE &#8211; <a
href="http://www.ieeeusa.org/policy/positions/titleengineer.html">http://www.ieeeusa.org/policy/positions/titleengineer.html</a>), the term &#8220;software developer&#8221; is usually applied to people in charge of designing, writing and / or maintaining software-based systems. I will use the terms developer and engineer interchangeably in this discussion, which some people might think is not correct. <span
id="more-1246"></span> The discussion about the need of a formal certification process is a relatively new one:</p><blockquote>Professional certification in the IT industry is a relatively recent phenomenon. It was begun in the late 1980s by Novell, Inc., an upstart networking vendor from Provo, Utah, in an effort to build market share and manage support costs for its products by building the skill levels of the people who worked with those products. Novell was one of the first companies to recognize the links between education/skills and product success. They knew that they could not build an education infrastructure that would support their worldwide marketing plans with their own resources. However, they also recognized that if they did not provide for skills acquisition for their highly technical products, they could never meet their product revenue goals.</blockquote><p>(Shore)</p><p>However, no consensus about whether or not certification is needed has been reached yet. This article will highlight some of the problems raised by software engineering certification, which might explain the lack of consensus cited before:</p><ul><li>The first one has to do with the inherent extension of the software engineering field: are all software developers equal?</li><li>The second one has to do with the large number of available certifications: which one to choose? Which ones are &#8220;reliable&#8221; indicators of expertise, and in which fields?</li></ul><p><strong>What is a &#8220;Software Engineer&#8221;?</strong></p><p>In my career, I&#8217;ve found self-made people (I&#8217;m one of them, actually), real-estate architects, lawyers, mathematicians, economists and even geophysicists writing code for a life. What I&#8217;ve seen so far is that the most successful software developers are those who like doing it, no matter which profession they&#8217;ve followed. And the opposite is also true: many guys with a computer science degree discover, some time after they start their careers, that they definitely do not like that code thing.</p><p>One of the biggest problems with certifications is that there is not such thing as a &#8220;single kind&#8221; of software developer:</p><ul><li>There are those who write games, and spend most of their time writing in low-level languages for game consoles, optimizing for speed and space, and creating three-dimensional worlds using as little memory as possible&#8230;</li><li>There are those who write web-based applications, and spend their time creating 3-tier architectures, talking to a database, using some kind of object-oriented platform, and luckily exposing some data using XML web services, dealing with cross-browser issues, and wondering what is all that fuss about Web 2.0&#8230;</li><li>There are those who write operating systems, and work for some embedded software company, or hack Linux kernel device drivers every night, or work for Microsoft or Sun or Apple, and spend most of their time discussing whether microkernels are better than monolithic architectures&#8230;</li><li>There are those who have the ill fate of working as a consultant, and spend more time switching from project to project every day, or dealing more with corporate politics, rather than with code&#8230;</li><li>There are those who manage projects and spend more time in their mailing list or in Microsoft Project rather than being able to code (and then complain about this in their blogs)&#8230;</li><li>There are those who have a software engineering degree, but work for ZDNet writing about industry trends&#8230;</li><li>There are those who turn into human resource consultants, and try to keep up to date on the new trends, but feel completely lost given what they learnt in university&#8230;</li><li>There are those who do a little bit of all what I&#8217;ve mentioned above, and are or not really good at all of them&#8230;</li><li>And finally there are those who might fit any of the characteristics above, but would have preferred not to listen their parents and rather open that scuba-diving shop in Honolulu.</li></ul><p><strong>Available Certifications</strong></p><p>This diversity explains the existence of more common product-specific certifications: you can be certified to use Microsoft technologies (<a
href="http://www.microsoft.com/learning/mcp/default.mspx">http://www.microsoft.com/learning/mcp/default.mspx</a>), MySQL databases (<a
href="http://www.mysql.com/certification/">http://www.mysql.com/certification/</a>), Apple servers (<a
href="http://www.apple.com/xserve/raid/certifications.html">http://www.apple.com/xserve/raid/certifications.html</a>), various IBM products (<a
href="http://www-03.ibm.com/certify/certs/index.shtml">http://www-03.ibm.com/certify/certs/index.shtml</a>), Java development stacks (<a
href="http://www.sun.com/training/certification/java/index.xml">http://www.sun.com/training/certification/java/index.xml</a>), Cisco routers (<a
href="http://forums.cisco.com/eforum/servlet/CCNP?page=main">http://forums.cisco.com/eforum/servlet/CCNP?page=main</a>), RedHat Linux installations (<a
href="https://www.redhat.com/training/certification/">https://www.redhat.com/training/certification/</a>) or UML diagrams (<a
href="http://www.omg.org/uml-certification/index.htm">http://www.omg.org/uml-certification/index.htm</a>)</p><p>However, given that technology companies have interest in having many people taking their certifications, their affordability and low-entry barriers to get them, many of these become much easy to get than they should be, and as a result, they lose credibility, and do not help IT recruiters to filter properly software developers during the selection processes. I&#8217;ve heard many complaints of project managers regarding these certifications, and I think it&#8217;s a generalized feeling:</p><blockquote>&#8220;Certified skills pay has not just flat lined, it&#8217;s in the negative. This is big news if you&#8217;re certified and you&#8217;re thinking about getting recertified,&#8221; said Foote.
&#8220;This trend is in the fourth quarter, that pay for certifications is on the wane, while non-certified skills are growing in pay.&#8221;(&#8230;)
Certifications are losing value because employers are looking for more in their workers than the ability to pass an exam; they want business-articulate IT pros.&#8221;</blockquote><p>(Rothberg, 2006)</p><p>Bruce Schneier, a well-known security researcher, has written about security certifications as well, with a mixed feeling:</p><blockquote>In the end, certifications are like profiling. They work , but they&#8217;re sloppy. Just because someone has a particular certification doesn&#8217;t mean that he has the security expertise you&#8217;re looking for (in other words, there are false positives). And just because someone doesn&#8217;t have a security certification doesn&#8217;t mean that he doesn&#8217;t have the required security expertise (false negatives). But we use them for the same reason we profile: We don&#8217;t have the time, patience, or ability to test for what we&#8217;re looking for explicitly.</blockquote><p>(Schneier, 2006)</p><p>The conclusion of all of this is that the debate is pretty much still open, and that there is not a simple answer to it.</p><p><strong>Market Fragmentation</strong></p><p>There is an interesting anonymous comment in Schneier&#8217;s website as well:</p><blockquote>Another thought on certification is they are not all equal.
There are Vendor Certs.
Microsoft&#8217;s MCP/MCSE, CISCO CCNA/CCNP/CCIE
Pro: The canidate is likley to know how to work on your specific platform.
Con: The canidate is likely to think in only the vendor&#8217;s interest.
There are Certs to assure knowledge of standard security terminlogy.
ISC CISSP
Pro: Can talk strategy and evaluate the nine domains to evaluate how the company is doing overall
Cons: Most likely could not tell you what the nineth byte of an ip packet means or if OpenSSL is out of date on Red Hat Linux.
Topic specific, vendor neutral.
SANS GIAC
Pro: Vendor neutral. A lot of focus on specific skills in NIDS or Hardening Windows, Incident Handeling, etc.
Con: Concentration on open source tools since they are easily available, but it does not seem to impress all employers.</blockquote><p>(@nonymou5, in Schneier, 2006, spelling mistakes not corrected)</p><p>I think that this comment summarizes pretty well another problem with certifications: there is a great level of fragmentation in today&#8217;s market. Every single important technology in the IT world requires a huge investment in time and practice in order to master it, and this translates in a huge complexity for the developers to choose the right certification. All of these without taking into account the large number of IT-related university degrees available, online or not.</p><p><strong>Conclusion</strong></p><p>The term &#8220;software engineer&#8221; is sufficiently vague, and the number of &#8220;certifications&#8221; sufficiently large, as to allow a single &#8220;yes or no&#8221; answer to whether professionals in the software sector should be certified or not. I personally think that I would rather avoid vendor-specific certifications as far as possible, and choose university-related or problem domain related certifications instead, to keep my career options open, and my mind free of marketing.</p><p><strong>References</strong></p><p>Rothberg, Deborah; &#8220;Another Nail in the IT Certification Coffin&#8221;, Novembrer 3rd, 2006, [Internet] <a
href="http://www.eweek.com/article2/0,1895,2051272,00.asp">http://www.eweek.com/article2/0,1895,2051272,00.asp</a> (Accessed June 3rd, 2007)</p><p>Schneier, Bruce; &#8220;Security Certifications&#8221;, July 20th, 2006, [Internet] <a
href="http://www.schneier.com/blog/archives/2006/07/security_certif.html">http://www.schneier.com/blog/archives/2006/07/security_certif.html</a> (Accessed June 3rd, 2007)</p><p>Shore, Julie; &#8220;Why Certification? The Applicability of IT Certifications to College and University Curricula&#8221;, [Internet] <a
href="http://www.developer.ibm.com/university/scholars/certification/ebusiness/pdfs/why-certification.pdf">http://www.developer.ibm.com/university/scholars/certification/ebusiness/pdfs/why-certification.pdf</a> (Accessed June 3rd, 2007)</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/certification/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> <item><title>Challenges for Software Engineers</title><link>http://kosmaczewski.net/challenges-for-software-engineers/</link> <comments>http://kosmaczewski.net/challenges-for-software-engineers/#comments</comments> <pubDate>Sun, 03 Aug 2008 20:54:28 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Architecture]]></category> <category><![CDATA[Opinion]]></category> <category><![CDATA[Papers]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[business]]></category> <category><![CDATA[conference]]></category> <category><![CDATA[Google]]></category> <category><![CDATA[hiring]]></category> <category><![CDATA[internet]]></category> <category><![CDATA[Microsoft]]></category> <category><![CDATA[NeXT]]></category> <category><![CDATA[Open Source]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1245</guid> <description><![CDATA[Software Engineering is the youngest of all the professions, being born around 50 years ago, but since then it has been continually improved. Practicers have fiercely debated upon it through the years, given the extremely fast pace of the innovations &#8230; <a
href="http://kosmaczewski.net/challenges-for-software-engineers/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Software Engineering is the youngest of all the professions, being born around 50 years ago, but since then it has been continually improved. Practicers have fiercely debated upon it through the years, given the extremely fast pace of the innovations in the field, and the extremely difficult and inherently dynamic nature of software. Many trends have appeared and vanished, and many others will come.</p><p>In this article I will provide a short overview of two kinds of challenges that I consider that software engineers will have to confront in the next 20 years: the human and the technical. <span
id="more-1245"></span> <strong>The Human Factor</strong></p><p>A quick look at the agenda of the 29th Int. Conference on Software Engineering (held in Minneapolis last year, from the 20th to the 26th May 2007) shows the key themes considered by the software engineering research community as the major challenges today:</p><ul><li>&#8220;Improving Software Practice through Education: Challenges and Future Trends&#8221;</li><li>&#8220;Research Collaborations between Industry and Academia&#8221;</li><li>&#8220;Model-driven Development of Complex Systems: A Research Roadmap&#8221;</li><li>&#8220;Source Code Analysis: A Road Map&#8221;</li><li>&#8220;Software Reliability Engineering: A Roadmap&#8221;</li><li>&#8220;Global Software Engineering: The Future of Socio-technical Coordination&#8221;</li><li>&#8220;Collaboration in Software Engineering: A Roadmap&#8221;</li><li>&#8220;Self-Managed Systems: An Architectural Challenge&#8221;</li><li>&#8220;Software Project Economics: A Road Map&#8221;</li></ul><p>(Source: ICSE 2007)</p><p>Mixed up with technical concerns, some presentations highlighted core problems that appears in the current state of software engineering: <strong>communication, collaboration and human issues.</strong></p><blockquote>The core substance of software deserves more eyes and more minds, thinking ways to describe not only the big picture (something that you can do with fancy diagrams) but also to give solutions to the problems that developers find daily while building systems up. Software is a process, but not any kind of process: a human one, maybe the most intangible of all processes; and as such, it is filled with all human brightnesses and failures.</blockquote><p>(Myself, in 2006)</p><p>I have the deep, strong conviction that software development cannot and must not be separated from the human-side problems of forming, keeping and training teams, enhancing the internal and external communications, improving and enhancing the individual creativity as well as the ways of reaching team consensus. As a powerful example, the seminal Peopleware book by DeMarco and Lister showed that many of the most successful software companies have been those that excelled in creating human-centric environments:</p><blockquote>In 1982, (Mitchell Kapor) founded Lotus Development Corporation, for which he is most noted. While there, he revolutionized corporate workplace culture by making diversity and inclusivity top priorities in his goal for creating an environment that attracted and retained employees. There were many &#8220;firsts&#8221; for Lotus, including being the first company to sponsor an AIDS Walk event in the mid-80&#8242;s and refusing to do business with South Africa due to Apartheid.</blockquote><p>(Sterling-Hoffman)</p><p>Thanks to a sharp hiring process, a series of innovations in their flagship spreadsheet product, and a progressive corporate culture, Lotus dominated the software landscape of the 80s. Today, Google follows very closely Lotus&#8217; steps (Google, 2007a), and their brilliant results in the last few years seem to confirm this trend. Google for example allows their employees to use 20% of their time in their own projects (Google, 2007b). This is resulting in an incredible amount of code, used internally and also released as open-source projects:</p><blockquote>Google is a fantastic company to work for. I could cite numerous reasons why. Take the concept of &#8220;20 percent time.&#8221; Google engineers are encouraged to spend 20 percent of their time pursuing projects they&#8217;re passionate about. I started one such exciting project some time back, and I&#8217;m pleased to announce that Google is releasing the fruits of this project as an open source contribution to the Macintosh community. That project is MacFUSE, a Mac OS X version of the popular FUSE (File System in User Space) mechanism, which was created for Linux and subsequently ported to FreeBSD.</blockquote><p>(Google Mac Blog, 2007)</p><p>The empowerment of both the individual <strong>and</strong> the team (the emphasis is important here) is key for a successful software project.</p><p><strong>Parallelization</strong></p><p>Herb Sutter has put it very clearly: technically speaking, since the beginning of the decade, there is no way for getting more processing power without jumping to multicore architectures:</p><blockquote>The key question is: When will it end? After all, Moore’s Law predicts exponential growth, and clearly exponential growth can’t continue forever before we reach hard physical limits; light isn’t getting any faster.(&#8230;)
If you’re a software developer, chances are that you have already been riding the “free lunch” wave of desktop computer performance.(&#8230;)
Right enough, in the past. But dead wrong for the foreseeable future.</blockquote><p>(Sutter, 2005)</p><p>The problem is that <strong>more cores do not necessarily mean more computing power</strong>, because the jump done by chip manufacturers has not (yet) been completely followed by the software community. Of course there is the concept of &#8220;threads&#8221;, and multi-threaded applications can benefit of performance boosts when running on multicore hardware platforms; however, a number of myths have to be debunked, as the common &#8220;2 x 3GHz = 6GHz&#8221; (as explained by Sutter here: <a
href="http://www.ddj.com/showArticle.jhtml?documentID=ddj0503a&#038;pgno=3">http://www.ddj.com/showArticle.jhtml?documentID=ddj0503a&amp;pgno=3</a>), and even more importantly, creating multithreaded applications is not easy. At all.</p><p>A couple of months ago, in the &#8220;Questions and Answers&#8221; of LinkedIn.com I answered an interesting question about parallelization; the following excerpt of my answer pretty much summarizes my opinions about the current state of multithreading, as well as some challenges that are raised for the future:</p><blockquote>The problem is simply that the &#8220;streamline&#8221; programming languages languages do not provide good ways to code multithreaded applications. (&#8230;) Not at all. The problem is real, since multithreading applications are extremely complicated to think of, let alone develop properly. A line of code in a high-level language could mean several hundred instructions in a processor; and depending on the sharing algorithm used at the CPU level, each one of these instructions might be executed separately, sharing resources with other processes. So what happens when? (&#8230;)
What I mean is that the fact that the JVM and the CLR support threads does not make good .NET or Java developers good multithreading developers by default. It&#8217;s a different mindset; who is accessing your resources? (&#8230;)
I think that as long as programming languages do not take multitasking and multithreading as base features (and not as mere library or API add-ons) we will continue struggling with single-threaded applications that collide with each other.</blockquote><p>(Myself, this time on LinkedIn Answers, 2007)</p><p>I think that the challenge of parallelization is not only an extremely tough one, requiring what Thomas Kuhn calls a &#8220;paradigm shift&#8221;, but also an extremely huge business opportunity; after all, while the top of the Chinese ideogram for &#8220;Crisis&#8221; means &#8220;Danger&#8221;, the bottom part means &#8220;Opportunity&#8221; (Mary R. Bast, 1999).</p><p><strong>Very Large Systems</strong></p><p>I also think that software systems will invariably get bigger and bigger. And given the historically high risk of failure of software projects, the dependency on software of the modern society, the pervasiveness of the Internet, the low prices of connectivity and the overall globalization, it is more important than ever to get ready for those challenges.</p><p>In July 2006, the well known Software Engineering Institute of the Carnegie Mellon University published an impressive report (freely downloadable) called &#8220;Ultra-Large-Scale (ULS) Systems: The Software Challenge of the Future&#8221;:</p><blockquote>The study brought together experts in software and other fields to answer a question posed by the U.S. Army Office of the Assistant Secretary of the U.S. Army (Acquisition, Logistics &#038; Technology): “Given the issues with today’s software engineering, how can we build the systems of the future that are likely to have billions of lines of code?” Increased code size brings with it increased scale in many dimensions, posing challenges that strain current software foundations. The report details a broad, multi-disciplinary research agenda for developing the ultra-large-scale systems of the future.</blockquote><p>(SEI, CMU, 2006)</p><p>The 150-page long report gives an extremely detailed vision of the challenges raised by complex systems, in the following areas:</p><ul><li>Design</li><li>Monitoring</li><li>Human interaction</li><li>Computational Engineering</li><li>Deployment</li><li>Legal issues</li></ul><p>The report provides interesting conclusions, highlighting the methodologies and techniques that will required to tackle these systems efficiently, among them the role of the W3C, the forthcoming trends of grid computing and parallelization, the Model-Driven Architecture (MDA) initiative of the OMG, and finally the development of larger Service-Oriented Architectures (SOA) platforms, such as .NET or J2EE (page 41 of the report).</p><p>The report also places a strong emphasis in the concept of socio-technical ecosystems and I think it&#8217;s worth a read by everyone interested in software engineering.</p><p><strong>Conclusion</strong></p><p>Given its youth, we have yet to see the most important developments in software engineering. However, it is extremely difficult to predict the future in this industry: Bill Gates himself published a book in 1995, &#8220;The Road Ahead&#8221;, where he only slightly talks about the World Wide Web:</p><blockquote>&#8220;The Road Ahead&#8221; appeared in December 1995, just as Gates was unveiling Microsoft&#8217;s master plan to &#8220;embrace and extend&#8221; the Internet. Yet the book&#8217;s first edition, with its clunky accompanying CD-ROM, mentioned the Web a mere seven times in nearly 300 pages. Though later editions tried to correct this gaffe, &#8220;The Road Ahead&#8221; remains a landmark of bad techno-punditry &#8212; and a time-capsule illustration of just how easily captains of industry can miss a tidal wave that&#8217;s about to engulf them.</blockquote><p>(Salon.com, 2000)</p><p>In any case, I think that there are important challenges in our industry: the need for better human management, the jump to multicore architectures and multiprocessing, and the ever-growing size of software projects. These three elements will without any doubt change the shape of the industry in the years to come, and raise new challenges in turn.</p><p><strong>References</strong></p><p>Adrian Kosmaczewski on LinkedIn Answers, &#8220;For the software architects out there, do you feel there is an impending paradigm shift in the software development model, towards &#8220;parallel computing&#8221; models?&#8221;, January 2007, [Internet] <a
href="http://www.linkedin.com/answers?viewQuestion=&#038;questionID=7804&#038;askerID=4194838">http://www.linkedin.com/answers?viewQuestion=&amp;questionID=7804&amp;askerID=4194838</a> (Accessed June 3rd, 2007)</p><p>Adrian Kosmaczewski on Kosmaczewski.net, &#8220;What will the Software Architecture discipline look like in 10 years’ time?&#8221;, March 16th, 2006 [Internet] <a
href="http://kosmaczewski.net/2006/03/16/software-architecture-future/">http://kosmaczewski.net/2006/03/16/software-architecture-future/</a> (Accessed June 3rd, 2007)</p><p>Bast, Mary R; &#8220;Crisis: Danger &amp; Opportunity&#8221;, 1999 [Internet], <a
href="http://www.breakoutofthebox.com/crisis.htm">http://www.breakoutofthebox.com/crisis.htm</a> (Accessed June 3rd, 2007)</p><p>DeMarco, Tom &amp; Lister, Timothy, &#8220;Peopleware &#8211; Productive Projects and Teams, 2nd Edition&#8221;, 1999, Dorset House Publishing, ISBN 0-932633-43-9</p><p>Google, &#8220;Top 10 Reasons to Work at Google&#8221;, 2007a [Internet] <a
href="http://www.google.com/jobs/reasons.html">http://www.google.com/jobs/reasons.html</a> (Accessed June 3rd, 2007)</p><p>Google, &#8220;What&#8217;s it like to work in Engineering, Operations, &amp; IT?&#8221;, 2007b, [Internet] <a
href="http://www.google.com/support/jobs/bin/static.py?page=about.html">http://www.google.com/support/jobs/bin/static.py?page=about.html</a> (Accessed June 3rd, 2007)</p><p>Google Mac Blog, &#8220;Taming Mac OS X File Systems&#8221;, January 11th, 2007, [Internet] <a
href="http://googlemac.blogspot.com/2007/01/taming-mac-os-x-file-systems.html">http://googlemac.blogspot.com/2007/01/taming-mac-os-x-file-systems.html</a> (Accessed June 3rd, 2007)</p><p>ICSE, &#8220;Future of Software Engineering&#8221;, 2007, [Internet] <a
href="http://web4.cs.ucl.ac.uk/icse07/index.php?id=104">http://web4.cs.ucl.ac.uk/icse07/index.php?id=104</a> (Accessed June 3rd, 2007)</p><p>Software Engineering Institute, Carnegie-Mellon University, &#8220;Ultra-Large-Scale (ULS) Systems &#8211; The Report&#8221;, July 2006, [Internet] <a
href="http://www.sei.cmu.edu/uls/">http://www.sei.cmu.edu/uls/</a> (Accessed June 3rd, 2007)</p><p>Salon.com, 2000 [Internet], &#8220;Why Bill Gates still doesn&#8217;t get the Net&#8221;, [Internet] <a
href="http://archive.salon.com/21st/books/1999/03/cov_30books.html">http://archive.salon.com/21st/books/1999/03/cov_30books.html</a> (Accessed June 3rd, 2007)</p><p>Sutter, Herb; &#8220;A Fundamental Turn Toward Concurrency in Software&#8221;, 2005, [Internet] <a
href="http://www.ddj.com/dept/architect/184405990">http://www.ddj.com/dept/architect/184405990</a> (Accessed June 3rd, 2007)</p><p>Sterling-Hoffman, &#8220;Opening Doors To Higher Education&#8221;, [Internet] <a
href="http://www.sterlinghoffman.com/newsletter/articles/article140.html">http://www.sterlinghoffman.com/newsletter/articles/article140.html</a> (Accessed June 3rd, 2007)</p><p>Wikipedia, &#8220;Thomas Kuhn&#8221; [Internet], <a
href="http://en.wikipedia.org/wiki/Thomas_Kuhn">http://en.wikipedia.org/wiki/Thomas_Kuhn</a> (Accessed June 3rd, 2007)</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/challenges-for-software-engineers/feed/</wfw:commentRss> <slash:comments>4</slash:comments> </item> </channel> </rss>
