<?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; Project Management</title> <atom:link href="http://kosmaczewski.net/category/project-management/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>Mike Monteiro &#124; F*ck You. Pay Me.</title><link>http://kosmaczewski.net/mike-monteiro-fck-you-pay-me/</link> <comments>http://kosmaczewski.net/mike-monteiro-fck-you-pay-me/#comments</comments> <pubDate>Sat, 23 Apr 2011 10:52:14 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[clients]]></category> <category><![CDATA[contracts]]></category> <category><![CDATA[CreativeMorning]]></category> <category><![CDATA[invoices]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=2295</guid> <description><![CDATA[2011/03 Mike Monteiro &#124; F*ck You. Pay Me. from SanFrancisco/CreativeMornings on Vimeo. Definitely one of the most useful videos I&#8217;ve seen in a while. Having to deal with clients in a regular basis, I can&#8217;t deny there is a great &#8230; <a
href="http://kosmaczewski.net/mike-monteiro-fck-you-pay-me/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<iframe
src="http://player.vimeo.com/video/22053820?color=ffffff" width="521" height="293" frameborder="0"></iframe><p><a
href="http://vimeo.com/22053820">2011/03 Mike Monteiro | F*ck You. Pay Me.</a> from <a
href="http://vimeo.com/sanfranciscocm">SanFrancisco/CreativeMornings</a> on <a
href="http://vimeo.com">Vimeo</a>.</p><p>Definitely one of the most useful videos I&#8217;ve seen in a while. Having to deal with clients in a regular basis, I can&#8217;t deny there is a great deal of common sense in it.</p><p>In my personal case, I do not do any client work without a contract in place, ever. I found it helps streamline the communication and the collaboration with the client, removing uncertainty and concerns upstream, instead of downstream. So far I haven&#8217;t encountered any client who didn&#8217;t want to have a contract in place; most usually we go through several revisions, depending on their legal team&#8217;s requirements or some other detail that has to be reviewed. But I&#8217;ve had people not respecting them. That&#8217;s another problem altogether.</p><p>I admit, however, that my contract model is far from perfect. And that&#8217;s where this video comes in handy. In particular, the &#8220;intellectual property transfer on last payment&#8221; part is the most interesting one for me; I&#8217;ve had payment problems in the past, even after an application was published on the app store, and I positively know that I do not want such problems in the future.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/mike-monteiro-fck-you-pay-me/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Random Thoughts on Partnerships</title><link>http://kosmaczewski.net/random-thoughts-on-partnerships/</link> <comments>http://kosmaczewski.net/random-thoughts-on-partnerships/#comments</comments> <pubDate>Sun, 26 Sep 2010 10:39:28 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Opinion]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[business]]></category> <category><![CDATA[partnerships]]></category> <category><![CDATA[quotes]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=2253</guid> <description><![CDATA[A couple of months ago I had a very interesting conversation with a friend of mine, who happens to be a close business partner in many different ventures. During this conversation, one of his phrases, probably the simplest of all, &#8230; <a
href="http://kosmaczewski.net/random-thoughts-on-partnerships/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>A couple of months ago I had a very interesting conversation with a friend of mine, who happens to be a close business partner in many different ventures. During this conversation, one of his phrases, probably the simplest of all, struck me and stayed in my mind:</p><p>&#8220;Business is about giving and receiving&#8221;.</p><p>Now, don&#8217;t get me started on that chapter of &#8220;Friends&#8221;, where <a
target="_blank" href="http://www.imdb.com/title/tt0108778/quotes?qt0410137">Joey writes a speech</a> to celebrate Chandler and Monica&#8217;s wedding, and all he can come up with is a series of &#8220;giving and having and sharing and receiving&#8221; phrases. Stay with me; I will try to elaborate on this point. <span
id="more-2253"></span> Being a constant learner in the business area, I take these phrases as precious information to shape the destiny of my own business. <a
target="_blank" href="http://akosma.com/">akosma software</a> is my first company, and to my own amazement, my wife and I are able to live out of it; said like this, it might sound ridiculous. But it is a huge statement for me, an incredible source of pride. It is part of my very personal way of watching the world and ourselves.</p><p>Most people leave their employee status behind to start a company with the inner feeling of being the next Bill Gates or, these days, the next Steve Jobs. The idea, particularly in the tech business, is to become insanely rich. Much more than you really need to live a decent life. And to screw all those who block your path, and yes, why not, build an empire down the road.</p><p>Bullshit.</p><p>Let&#8217;s go back to basics: the basic idea of business, the one that lays at the bottom end of any human activity which involves the exchange of goods and services, is to be able to get what you need for a living, in exchange of your work or its product. Remember? That&#8217;s how it all started around 10 thousand years ago. And the basic ideas behind akosma software lie in very simple terms:</p><ul><li>To be able to live out of the product of my work, offering my own work, services and ideas;</li><li>To be able to build something sustainable, that eventually might feed other people too;</li><li>To learn new things, and to meet interesting people during the trip.</li></ul><p>Most businesses have completely lost their touch with reality, not only because of the kind of products offered, but simply because of their way to perform their work. They <a
target="_blank" href="http://kosmaczewski.net/2010/07/22/welcome-to-the-company/">treat people in such a way</a> (inside and outside of their organizations) in such a way that it makes Jason Fried&#8217;s speech sound like revolutionary, instead of what it really is: <a
target="_blank" href="http://www.inc.com/magazine/20091101/the-way-i-work-jason-fried-of-37signals.html">good old, down-to-earth, common sense</a>.</p><p>When Jason says that most companies do their best to get out of business, he&#8217;s absolutely right; simply because most people have forgotten why they go to work every day. That&#8217;s why books like <a
target="_blank" href="http://gettingreal.37signals.com/">Getting Real</a> or <a
target="_blank" href="http://37signals.com/rework/">REWORK</a> are successful. That&#8217;s why <a
target="_blank" href="http://bobsutton.typepad.com/">Bob Sutton</a>&#8216;s books are successful. That&#8217;s why <a
target="_blank" href="http://www.fourhourworkweek.com/blog/">Tim Ferriss&#8217; &#8220;4 Hour Workweek&#8221;</a> became a bestseller.</p><p>Businesses, companies, managers, employees, we have all lost touch with reality.</p><p>Running a business is not just about how much money you can make; taking care of that is important, but not enough. It&#8217;s not about trying to screw people just for the sake of making a few more bucks, all while having nice words about social responsibility in your website. It&#8217;s not about filling your mouth with the ecology word while not even recycling paper in your printer room.</p><p>Don&#8217;t get me wrong; I consider myself a liberal. I believe in the free market and I resent governments sneaking into our lives. I believe in being able to associate and create new things respectful of what surrounds us as a society <a
target="_blank" href="http://akosma.com/2009/12/15/reducing-the-carbon-footprint/">and an environment</a>. I also believe that cooperatives are the best type of organization for small businesses, but I do not believe in democratic project management processes. <a
target="_blank" href="http://kosmaczewski.net/2008/08/11/saving-a-failing-project/">I believe in vision and direction for products and projects</a>, and I believe in a redistribution of the earnings (and the losses) among all those who helped create something new. I believe in small teams, committed to (not just involved in) their projects.</p><p>Most importantly, I want to believe in the people I work with. Let me repeat that: I work <strong>with</strong> people; they do not work <strong>for</strong> me, I do not work <strong>for</strong> them. I believe in us, whoever is &#8220;us&#8221; in that group.</p><p>Business is about not being hypocrite. Business is about being upfront about what you do, about the value that you add, about being passionate about your craft, about being proud of your work and your colleagues. Business is about saying no at the right time, and about never saying yes without care and attention.</p><p>Business <strong>is</strong> about giving, sharing and receiving. <a
target="_blank" href="http://sandorastarita.blogspot.com/">A good friend of mine</a> told me once that I should never say &#8220;thanks&#8221; to him; a simple &#8220;wow, cool&#8221; was better. Being able to marvel oneself with whatever comes is a key element in happiness, the second key element being giving back to others whatever happiness we have.</p><p>When you focus business on people, long term partnerships invariably become strong friendships.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/random-thoughts-on-partnerships/feed/</wfw:commentRss> <slash:comments>5</slash:comments> </item> <item><title>Welcome to the company!</title><link>http://kosmaczewski.net/welcome-to-the-company/</link> <comments>http://kosmaczewski.net/welcome-to-the-company/#comments</comments> <pubDate>Thu, 22 Jul 2010 07:48:03 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Humour]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Switzerland]]></category> <category><![CDATA[Technology]]></category> <category><![CDATA[anecdote]]></category> <category><![CDATA[asshole]]></category> <category><![CDATA[Geneva]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[PHP]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=2234</guid> <description><![CDATA[Many people have asked me why, when I was an employee, I used to change jobs so often. The answer stands in between my own curiosity to take on new challenges, and the various assholes I had to deal with &#8230; <a
href="http://kosmaczewski.net/welcome-to-the-company/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Many people have asked me why, when I was an employee, I used to change jobs so often. The answer stands in between my own curiosity to take on new challenges, and the various assholes I had to deal with through the ages. Just as an example of this last case, here goes a true story, one that stands between being a candidate story for <a
target="_blank" href="http://thedailywtf.com/">The Daily WTF</a>, or as sample material for <a
target="_blank" href="http://www.amazon.com/Asshole-Rule-Civilized-Workplace-ebook/dp/B000OT8GV2%3FSubscriptionId%3D0F0YTN83N46JSX6KDT02%26tag%3Dakosmasoftwar-20%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3DB000OT8GV2">The No Asshole Rule</a> book by Bob Sutton. You decide.</p><h2>Prologue</h2><p>A couple of years ago I found a job as a PHP + JavaScript developer in a small company in Geneva, Switzerland. I remember going to their offices two or three times, and having several interviews with various people there; one of them was the lead PHP developer of the company, the other being the CEO, a relatively well-known person in the tech area in Geneva; both shall remain nameless. The last interview I had was with the CTO, who would be my direct boss, as I was told.</p><p>They finally chose me, and very happily I signed the contract. I handed my resignation for my current job at the time, but had a couple of months of work to do before leaving (this is usual practice in Switzerland, one that I despise deeply, but that you are legally forced to follow). All in all, three months passed between me signing the contract and the first day of my new job.</p><h2>The First Day</h2><p>So one day, I headed to Geneva to start my new job. I arrive at around 9am to the address where the interviews had taken place, and, oh surprise&#8230; there was nothing. Stay with me: <strong>there was nothing</strong>. Not a sign in the wall indicating that the company used to be there, not a single desk, not a phone plugged on the wall. Nothing. <span
id="more-2234"></span>Puzzled (to say the least), I asked the first person I met in the hallway about the company, and she told me that they had left a couple of months ago. I asked if she knew where they went, but she told me that she did not.</p><p>I was really, really worried by now. Had I signed a contract with some kind of fake company that had just left the country to the Bahamas or Luxemburg? I called their phone number. The automated voice at the other end told me that the number was not in service.</p><p>Oh dear.</p><p>After what must have been like 60 minutes of going back and forth in the hallways asking for some kind of information about the company, one guy told me that they had moved not far from there. Finally a clue! He even gave me an address, so I left as quickly as I could. I was one hour late to my new job; you do not do that in Switzerland.</p><p>On my way, I could not help thinking things like, &#8220;why wouldn&#8217;t they call me to tell me that they moved to a new place? What&#8217;s going on?&#8221;</p><p>So around 1030am I arrived to this new address, got into the building, and checked in at a reception desk that was standing there. I asked the names of the people that had interviewed me. The guy told me that nobody with that name worked there. Then I asked, &#8220;I&#8217;m looking for the company such and such&#8221;, and he told me that no, this was a private bank (there are lots of them in Geneva), so I must have been given the wrong address.</p><p>Bummer. Back to step one.</p><p>The guy, nevertheless, told me one interesting thing; in the warehouses behind the bank there was this new &#8220;startup center&#8221; with brand new offices, and the company might as well be there. I thanked the guy, and started investigating the area.</p><p>The word &#8220;investigating&#8221; is the correct one. It felt like being Columbo looking for a murderer.</p><p>Indeed, behind the bank there was a huge, new complex with many new offices and small companies popping up. The building was an old factory that the city of Geneva had bought a couple of years before, and where you could rent cheap office space. Perfect for startups. But in the main entrance, there was no sign of the one I was looking for.</p><p>It was almost 11am, and I was about to give up. My cell phone had not rang, nobody called from their office; my wife told me that nobody had called home either. If they were around, they really did not care about me.</p><p>Just when I was about to leave the building, I asked one guy cleaning the hallway about the company name. He told me that he had never heard about it, but that there was a huge sign near the entrance of the parking with company names, and that given that the building was fairly new, not all company names had been set up in every entrance of the building, so I might as well check that one out.</p><p>I left the building, went to the entrance of the parking, and finally! I saw the name of my new employer. Together with the indication of how to get there by foot: a 10 minute walk from where I was. I said to myself, well, what the heck. Let&#8217;s go.</p><p>When I crossed the door, I saw yet another reception desk, this time with a huge sign behind the receptionist with the name of the company. This was finally the good one. That was at around 1115am; I had been touring Geneva for over 2 hours looking for this company by now.</p><p>I tell the girl that I am starting today my new job, and she tells me that it was her first day too, so she did not know anyone, so she guided me to an office marked &#8220;Human Resources&#8221;, which looked quite appropriate for the occasion.</p><h2>&#8220;Welcome to the company!&#8221;</h2><p>The HR guy gets up from his desk, greets me and tells me that he started 2 weeks ago and that he did not know that I was starting that day, but that was OK, welcome to the company anyway! He guides me to the sector of the open space where the technical team works, and I finally see some familiar faces, together with some 30 people I had not seen three months ago.</p><p>The company had had an explosive growth in just 3 months.</p><p>Anyway, they point me to a crappy chair and table in the open space and they called that a &#8220;desk&#8221;, and I said, OK, let&#8217;s score some more points. Even better, the IT manager comes up to me and says &#8220;oh sorry, I don&#8217;t have a computer for you, I didn&#8217;t know you were coming today&#8221;.</p><p>I sit down, awkwardly, as everyone resumed their tasks in an awkward silence, a mix of &#8220;I don&#8217;t know anyone here&#8221; and &#8220;I hope it&#8217;s 5pm soon&#8221;. Probably one of the worst feelings I have had in a work environment in a while.</p><h2>Meet the boss</h2><p>30 minutes later (it was almost noon, and I was really starving by now), while I was sitting on my chair without having anything to do or anyone to talk to, a guy looking like a hawaiian surfer comes up to me and tells me that he was my boss. Which was strange, because he was not the CTO I mentioned earlier, but given that everything had changed so much, I was not surprised.</p><p>The surfer takes me to a meeting office, we sit down for what I think it is going to be my first work meeting, and he tells me that he has been appointed to this boss role last month, that they are dropping PHP altogether, and that they will be doing the new system using Java. The guy tells me that he knows that <a
target="_blank" href="http://kosmaczewski.net/2007/05/02/not-exactly-what-i-meant/">I despise Java</a> (he read it on this very blog, actually) and that he does not like <a
target="_blank" href="http://kosmaczewski.net/2007/12/20/to-java-or-not-to-java/">me not liking Java</a>. But he cannot fire me, because he has not hired me, so my role is undefined and, as a matter of fact, I have nothing to do there.</p><p>It was 12am, and by now I know I will not be doing long in this company.</p><p>To make a long story short, a few days after that I went to the office of the CEO, I gave them my resignation letter, and they just told me, literally, &#8220;OK, bye&#8221;.</p><p>That was it.</p><h2>Epilogue</h2><p>After two years, I was told that the Java system was never finished. The company still exists but has completely changed its business model, and the CEO has left the country and moved his company with him.</p><p>I also learnt that the original PHP developer, one of the guys who interviewed me, the one who worked his ass off for 4 years building the only system that was actually bringing cash, was also being dismissed from the new team because he was not a Java guy. He was let go a couple of months after I left. Nobody cared that he actually knew how the original system worked, how the business worked, or that he gave 4 years of his work for a company that greeted him with another &#8220;OK, bye&#8221;.</p><p>My path to independence started that very day. Dealing with that kind of crap (of which I have many more nice anecdotes that I will write about very soon) is what tells me that I do not want to be an employee again. I prefer to starve rather than being treated like shit.</p><p>PS: you will not find the company name in my <a
target="_blank" href="http://www.linkedin.com/in/akosma">LinkedIn profile</a>, for reasons that should be obvious by now.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/welcome-to-the-company/feed/</wfw:commentRss> <slash:comments>7</slash:comments> </item> <item><title>Best books of 2008</title><link>http://kosmaczewski.net/best-books-of-2008/</link> <comments>http://kosmaczewski.net/best-books-of-2008/#comments</comments> <pubDate>Tue, 06 Jan 2009 13:08:30 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Books]]></category> <category><![CDATA[Code]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[.NET]]></category> <category><![CDATA[Architecture]]></category> <category><![CDATA[C++]]></category> <category><![CDATA[Cocoa]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[JavaScript]]></category> <category><![CDATA[Open Source]]></category> <category><![CDATA[Opinion]]></category> <category><![CDATA[politics]]></category> <category><![CDATA[project]]></category> <category><![CDATA[Quality]]></category> <category><![CDATA[Ruby]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1285</guid> <description><![CDATA[You might remember my beloved mantras: learning a new programming language and reading at least 6 relevant books every year. Following the 2007 edition, here&#8217;s the list of the 8 books I have enjoyed most in 2008, ordered by a &#8230; <a
href="http://kosmaczewski.net/best-books-of-2008/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p><img
src="/wp-content/uploads/2009/01/geekonomics.jpg" align="left"/>You might remember my beloved mantras: <strong><a
href="/2006/03/29/a-new-programming-language-every-year/">learning a new programming language</a> and <a
href="/2005/11/05/my-bookshelf-part-i/">reading at least 6 relevant books</a> every year</strong>. Following <a
href="/2008/01/23/best-books-of-2007/">the 2007 edition</a>, here&#8217;s the list of the 8 books I have enjoyed most in 2008, ordered by a purely subjective and absolutely irrational decreasing preference. I strongly recommend all of them!</p><p><strong>Winner: <a
href="http://www.geekonomicsbook.com/">Geekonomics: The Real Cost of Insecure Software</a> by <a
href="http://blog.geekonomicsbook.com/">David Rice</a></strong></p><p><strong>Runner-up: <a
href="http://www.amazon.com/Asshole-Rule-Civilized-Workplace-Surviving/dp/0446526568">The No Asshole Rule: Building a Civilized Workplace and Surviving One That Isn&#8217;t</a> by <a
href="http://bobsutton.typepad.com/">Robert I. Sutton, PhD</a></strong></p><p>And 6 more:</p><ul><li><a
href="http://www.stevemcconnell.com/est.htm">Software Estimation: Demystifying the Black Art</a> by <a
href="http://www.stevemcconnell.com/">Steve McConnell</a></li><li><a
href="http://www.amazon.com/Modern-Design-Programming-Patterns-Depth/dp/0201704315">Modern C++ Design: Generic Programming and Design Patterns Applied</a> by <a
href="http://erdani.org/">Andrei Alexandrescu</a></li><li><a
href="http://www.phaidon.com/Default.aspx/Web/its-not-how-good-you-are-its-how-good-you-want-to-be-9780714843377">It&#8217;s Not How Good You Are, It&#8217;s How Good You Want to Be</a> by <a
href="http://www.paularden.com/">Paul Arden</a></li><li><a
href="http://oreilly.com/catalog/9780596529260/">RESTful Web Services</a> by <a
href="http://www.crummy.com/">Leonard Richardson</a> and <a
href="http://intertwingly.net/blog/">Sam Ruby</a></li><li><a
href="http://oreilly.com/catalog/9780596517748/">JavaScript: The Good Parts</a> by <a
href="http://javascript.crockford.com/">Douglas Crockford</a></li><li><a
href="http://oreilly.com/catalog/9780596529321/">Programming Collective Intelligence: Building Smart Web 2.0 Applications</a> by <a
href="http://blog.kiwitobes.com/">Toby Segaran</a></li></ul><p><span
id="more-1285"></span></p><h3>Geekonomics: The Real Cost of Insecure Software</h3><p>My big winner for 2008. If you don&#8217;t care about software quality (yet), or if you think that machines aren&#8217;t already in charge or our world, this book is for you. This has been one of the most hyped releases of 2008, and indeed, it can send a chill down your spine. Geekonomics is a lively catalog of software glitches and disasters, showing users as &#8220;crash test dummies&#8221;, describing a whole industry built upon &#8220;end user license agreements&#8221;, removing liabilities as no other industry has ever been capable of. Even the world of free and open source software is described with strong criticism.</p><p>Geekonomics sometimes feels like a desperate plea to apply <a
href="http://deming.org/">Deming</a>&#8216;s <a
href="http://www.mftrou.com/edwards-deming.html">Total Quality Management</a> principles in the world of software.</p><p>The book is interesting in several fronts. David Rice pledges for the creation of standards of quality, as well as tightening the requirement for certification of practitioners. His views are based on the United States, describing the legal framework of &#8220;tort law&#8221;, the economic foundations of &#8220;incentives&#8221; for industries, and using comparisons with other economic sectors, particularly with the automotive industry. The book is academic yet entertaining, frightening but instructive, but sometimes falling on the side of sensationalism, in my opinion. I could even say that some of Rice&#8217;s proposals are downright impossible to achieve, given the particular characteristics of the software industry, and the situation of the legal system in other parts of the world.</p><p>In any case, even if I do not particularly agree with all of his views, David Rice is right to emphasize his point strongly, giving concrete proposals, and opening the debate: the book would not have had the same impact if it had been written mildly.</p><p>Geekonomics was enlightening: it made me think about the quality of my own work in a completely different way (and prompted me to talk about it at <a
href="/projects/software-quality-barcamp/">Lausanne&#8217;s 2008 Barcamp</a>). I think that taking a time of introspection, and reading your own code with different eyes is required to realize that we are, as software developers, responsible for much of what is going on in the world. And this is the major contribution of this book.</p><h3>The No Asshole Rule: Building a Civilized Workplace and Surviving One That Isn&#8217;t</h3><p><img
src="/wp-content/uploads/2009/01/no_asshole_rule.jpg" align="right" />Some of my former colleagues will chuckle when they see this entry, because I&#8217;ve flown from a previous job a couple of years ago because of a total, complete, utter, outright and unmitigated asshole. A complete control freak, self-proclaimed genius, irresponsible jackass, who was the reason why 5 people (including me) left the place in less than 3 months.</p><p>(Guys, feel free to leave comments below ;)</p><p>More seriously, in the software industry it&#8217;s common to see that great developers are, more often than not, shy or introverted. This fact, coupled with the Swiss&#8217; legendary attitude of eternal conciliation and conflict avoidance, has the side effect of creating troubled workplaces all over the country. No wonder <a
href="http://www.letemps.ch/emploi/affichearticle.asp?artid=246483">this book made the headlines</a> last month in Switzerland. This is a huge problem which is only being revealed right now.</p><p>In any case, this book is, together with <a
href="/2005/11/20/my-bookshelf-part-iii/">Peopleware</a>, a gem of teambuilding and a real bag of tricks to avoid turnover and burnouts in your company. An absolute read to everyone involved in the creation of workplaces, in every possible industry.</p><h3>Software Estimation: Demystifying the Black Art</h3><p><img
src="/wp-content/uploads/2009/01/estimation.jpg" align="left"/>This book should be a mandatory read for every software developer, in every company, all over the world. It is a true gem, and a book that will become a <a
href="/2005/11/20/my-bookshelf-part-iii/">timeless classic</a>.</p><p>How many times have you been asked to estimate a project? To provide a deadline? To approve an estimation done by someone else? This book starts by enumerating the problems related to estimation, including those related to the definition of the word &#8220;estimation&#8221;, the politics and the economics surrounding and defining what is accepted and required, and the common traps where all of us have stumbled upon at least once. Then it provides a catalog of common estimation methods, from the most obvious to the most complex ones, including a description of their relative drawbacks and benefits.</p><p>McConnell is the author of <a
href="http://www.stevemcconnell.com/cc.htm">Code Complete</a> (which I&#8217;m re-reading these days) and <a
href="http://www.stevemcconnell.com/rd.htm">Rapid Development</a> (which I plan to read soon). This guy knows what he&#8217;s talking about, and he provides all the data required to support his claims. I cannot stress this more: if you are a project manager, a developer, a tester, an architect, or deal with software projects in some uncanny way, you <strong>have</strong> to read this book.</p><h3>Modern C++ Design: Generic Programming and Design Patterns Applied</h3><p><img
src="/wp-content/uploads/2009/01/modern_cpp.jpg" align="right" />I bought this book during the writing of my <a
href="/2008/08/28/master/">Master&#8217;s degree</a> <a
href="http://remproject.org/">dissertation project</a>. I had heard about it before, but since my project involved a lot of C++ template metaprogramming, I thought that the best idea was to check with the real experts. And boy, I&#8217;m happy I did.</p><p>This book goes beyond your common programming grounds, whichever your favorite language is. I personally enjoy writing C++ a lot, but that&#8217;s me, and your mileage may vary. Doing <a
href="http://remproject.org/2008/05/26/activerecord-and-unit-tests/">multiple inheritance mixed with template metaprogramming</a>, however, <a
href="/2008/03/13/templates/">stretches your mind</a> into the realm of what you previously considered esoteric and impossible, and that&#8217;s precisely the kind of readings that take you a long way forward.</p><p>If you are looking for a new way to write your old C++ code, or if you are asking yourself how different are C++ templates from Java or C# generics, read this book. You&#8217;ll find a lot of interesting stuff in it, with explanations related to an existing library (written by the author) called <a
href="http://loki-lib.sourceforge.net/">Loki</a>, which provides the implementation of several patterns explained in the book.</p><h3>It&#8217;s Not How Good You Are, It&#8217;s How Good You Want to Be</h3><p><img
src="/wp-content/uploads/2009/01/good.jpg" align="left"/>This little book (less than 130 pages long) was written by Paul Arden, former creative director of <a
href="http://en.wikipedia.org/wiki/Saatchi_and_Saatchi">Saatchi &amp; Saatchi</a>, a recognized advertising agency (whose &#8220;early growth was also helped by a policy of settling the invoices from small suppliers as late as possible, while promptly paying large, high-profile companies&#8221;, dixit their Wikipedia article. No comments.)</p><p>Paul Arden provides extremely interesting and pragmatic views on creativity, people management, client relationship management and other stuff; if you happen to work in a web or advertising agency, you should read this book. However, as a software developer, I think that many of his views are still applicable to our own activity, particularly when, like me, you&#8217;re beginning your own independent path. It is not always obvious how to deal with situations when you&#8217;re &#8220;in charge&#8221;, and Arden&#8217;s recommendations do help.</p><h3>RESTful Web Services</h3><p><img
src="/wp-content/uploads/2009/01/restful.jpg" align="right" />For years I thought that SOAP was the way to go. And then some <a
href="http://rubyonrails.org/activists">Rails activists</a> started talking about RESTful this, RESTful that, and well, it tickled my curiosity. It all started with <a
href="http://www.ics.uci.edu/~fielding/">Roy Fielding</a>&#8216;s <a
href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm">doctoral dissertation about network architectures</a>, followed by all the buzz of Web 2.0 APIs, which in the case of most startups took the form of RESTful APIs, found to be much easier to document, use and maintain than their XML-RPC or SOAP counterparts.</p><p>I read this book because of a requirement of a project where I worked at the beginning of the year, and this led to <a
href="/2008/03/05/django-rest-test-support/">several</a> <a
href="/2008/04/04/django-architecture-approaches/">blog</a> <a
href="/2008/03/26/playing-with-http-libraries/">posts</a> and even <a
href="/projects/objective-c-rest-client/">a project</a>, that are still today quite <a
href="/popular/">popular</a>. I&#8217;ve been using the RESTful approach for other projects, involving .NET, the iPhone and Cocoa on the Mac, and I would have never thought that doing network-based programming could be this fun. Looking backwards, attempts like SOAP and XML-RPC look clunky, adding layers of unneeded complexity for most projects, and creating a higher barrier of entry for new users of an API.</p><h3>JavaScript: The Good Parts</h3><p><img
src="/wp-content/uploads/2009/01/javascript.jpg" align="left"/>Douglas Crockford is head of web development at Yahoo!, and probably the person in the world that knows most about JavaScript. I&#8217;ve been reading <a
href="http://www.crockford.com/">his articles</a> since I started working in my <a
href="/projects/propano/">Propano project</a>, and then <a
href="http://video.yahoo.com/watch/630959/2974197">watching his videos</a> as soon as they became available.</p><p>His views of JavaScript as the <a
href="http://javascript.crockford.com/javascript.html">World&#8217;s Most Misunderstood Programming Language</a> helped me see this (now I think) beautiful language under a new light. And of course, I could not miss reading his short (170 pages) but extremely detailed book. I thoroughly enjoyed it and strongly recommend its reading to anyone dealing with JavaScript in any way.</p><h3>Programming Collective Intelligence</h3><p><img
src="/wp-content/uploads/2009/01/collective_int.jpg" align="right" />I love programming books focusing on solutions rather than on specific features of some language; they provide insight on how to solve problems, showing the mathematical background required to do it. This is one of them.</p><p>This book can be considered a practical handbook on statistics programming, using Python for the code examples, but providing all the required insight and theory required to understand the logic beneath every code bit. The focus on Web 2.0 applications is clear, and this book has helped more developers than the author might ever know. Social sites are the realm of networks, large numbers, big datasets and complex relationships, and the techniques described in this book can help developers get out more information about their databases. Ever wondered how LinkedIn finds out someone you might know? This book has the answer for you.</p><h3>What about you?</h3><p>I would be very pleased if you could leave, in your comments below, the reference to your own preferred books. I am sure I have missed some gems last year, but 2009 is just starting!</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/best-books-of-2008/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>The Dirty Little Secret of iPhone Development</title><link>http://akosma.com/2008/12/23/dirty-little-secret/</link> <comments>http://akosma.com/2008/12/23/dirty-little-secret/#comments</comments> <pubDate>Tue, 23 Dec 2008 12:34:54 +0000</pubDate> <dc:creator>akosma software</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[iPhone]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Quality]]></category> <category><![CDATA[.NET]]></category> <category><![CDATA[AJAX]]></category> <category><![CDATA[Apple]]></category> <category><![CDATA[Objective-C]]></category> <category><![CDATA[programming]]></category> <category><![CDATA[project]]></category> <category><![CDATA[Software]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/?p=1275</guid> <description><![CDATA[This is happening right now, at a web agency near you. The dot-com boom of the 90&#8242;s spawned a brand new generation of coders and software developers, including me, by the way. While before that time the term of &#8220;software &#8230; <a
href="http://akosma.com/2008/12/23/dirty-little-secret/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>This is happening right now, at a web agency near you.</p><p>The dot-com boom of the 90&#8242;s spawned a brand new generation of coders and software developers, including me, by the way. While before that time the term of &#8220;software developer&#8221; might have been reserved to system programmers fluent in C, COBOL, C++ or other languages, right now the vast majority of developers I know spend their time writing web applications, either public or in a private intranet, in J2EE, ASP.NET, Rails, PHP, you name it.</p><p><a
href="/2007/08/02/web-development-equal-software-development/">I have said before</a> that writing web applications should be taken as seriously as writing desktop systems. Call me names if you want, but I&#8217;m a big fan of <a
href="http://www.joelonsoftware.com/articles/fog0000000043.html">Joel&#8217;s Test</a>.</p><p>However, after all this years, after the <a
href="http://www.cs.nmt.edu/~cs328/reading/Standish.pdf">Chaos reports</a>, after <a
href="/2005/11/20/my-bookshelf-part-iii/">Peopleware</a>, after the <a
href="/2008/08/08/adding-manpower/">Mythical Man Month</a>, people still treat <a
href="/2007/12/16/software-project-quality/">quality</a> as an afterthought. And also complain about how much software sucks, how expensive it is, and how late it arrives, by the way. Now that the iPhone SDK is widely available, that the App Store is selling more apps that we could have had imagined 6 months ago, many web agencies want to jump to native iPhone development contracts, which are hype and nice and pricey and whatnot. Which is only going to make things worse.</p><p>The dirty little secret in this story is this: <strong>iPhone development looks more like developing applications for a desktop operating system, and less, much less than web development.</strong> And I&#8217;m frightened to see some small shops (and even bigger ones), who never attained a real level of professionalism or quality in their software tasks, starting projects and realizing, later, when they are over budget and <a
href="/2007/06/05/schedule-issues/">behind schedule</a>, that this kind of applications requires a different mindset.</p><p><span
id="more-1275"></span></p><p>Let&#8217;s repeat something that you should know by now: web apps are easy to maintain. To begin with, you just have one instance running of it, and as <a
href="http://www.paulgraham.com/avg.html">Paul Graham said</a>, you can write them in any language you want, you can release bug fixes with your application running, monitor performance issues live, change its appearance quite easily and for everyone at once, etc. This is probably the single biggest advantage of web apps. With AJAX we even got the possibility of going beyond in terms of user interface, responsiveness, perceived speed, you name it, and today the number of famous web apps is outstanding.</p><p>However, web apps run into this terrific (and terrifying) sandbox called the browser. They (normally) cannot access your file system, they cannot open other applications and interact with them &#8211; well, with some custom URL schemes like lastfm: mailto: or skype: you might have the ability to do some things, but certainly not much more than activating the application in some limited way as a help for the user. You cannot access the user&#8217;s hardware directly &#8211; well, again, you can access the webcam through Flash, or you can trigger the window.print() method to have the native print dialog pop up, but that&#8217;s more or less the maximum you can do.</p><p>In the iPhone, there is a similar situation. You choose to create a native iPhone application over a web one when you require one or many of these things in your application:</p><ul><li>GPS geographical data;</li><li>Accelerometer information;</li><li>Photo camera or library;</li><li>3D graphics;</li><li>Complex animations;</li><li>Address Book entries;</li><li>Sound recording and playback;</li><li>etc&#8230;!</li></ul><p>I&#8217;ve talked about the dichotomy between iPhone native vs. web apps in my <a
href="/2008/11/03/iphone-conference-2008-a-bit-of-magic/">speech during the iPhone conference</a> where I used this graphic, which might help those having to decide whether they should do a native or a web application:</p><p><img
src="/wp-content/uploads/2008/12/graph.png" alt="" title="graph" width="450" height="372" class="alignnone size-full wp-image-1276" /></p><p>The tradeoff, basically, consists in knowing that having the ability to access these features, means that you are giving up your capacity to roll out quick upgrades to your code. You have to depend on Apple&#8217;s own review process timings for that, which, as far as I&#8217;ve seen so far, cannot be predicted. And finally, you depend on the user&#8217;s final will to update your application!</p><p>Similarly, you also lose the ability to create these applications using your common, well-known, garbage-collected programming language, but you&#8217;ll have to deal with Objective-C exclusively, together with its weird syntax, possible memory leaks, eventual out-of-memory notifications, lazy loading techniques, compiler warnings and errors, and seeing the MVC design pattern even in your wildest dreams at night. Regarding the syntax, I admit that I love it, but it took me a while to get used to it, when I started playing with it back in 2003.</p><p>Given these conditions, when you start an iPhone project you will have (let me be very clear about this, so I&#8217;ll repeat) you will have to dust out your good old desktop application programming techniques (or learn if you don&#8217;t have them), read Code Complete again (which I&#8217;m doing right now) and take all the advice that you can from C and C++ programmers who have been working in this kind of stuff for the past 20 years.</p><p>I&#8217;ve even done my Master&#8217;s <a
href="http://remproject.org/">degree project in C++</a> because of this: the mindset required for iPhone apps is not the same as for your day-to-day web application, and is closer to that of a desktop application. I&#8217;ve been doing web apps for 12 years now, and desktop apps for 5 years (mostly in C#, Objective-C and C++); that&#8217;s my ground for stating this. You require a spec, you require tests, you require testers, you require daily builds, you require bug databases, you require <a
href="/2007/05/10/open-space-or-individual-offices/">quiet working conditions</a>.</p><p>You require at least an 11 in <a
href="http://www.joelonsoftware.com/articles/fog0000000043.html">Joel&#8217;s Test</a> to know that you&#8217;re doing fine, but not only that: you need to know about pointers, you need to <a
href="http://cocoadevcentral.com/articles/000081.php">know C</a>, you need to know that your code runs in an fragile environment with EXC_BAD ACCESS (SIGBUS) and low-memory warnings and stuff like that happening when you expect it the least.</p><p>Unfortunately, from what I&#8217;ve seen so far (at least here in the Lake Geneva region) many companies are spending much more than they intended to for rolling out their iPhone apps; these are real quotes from people I&#8217;ve dealt with in the past 6 months:</p><ul><li>&#8220;Oh, we do not write specs, we prefer to modify the code as we have ideas!&#8221;;</li><li>&#8220;Oh, we do not write tests, we do not have the time for that!&#8221;;</li><li>(in general) &#8220;Oh, we do not work like that here. We do what the client asks and that&#8217;s all.&#8221;;</li><li>&#8220;We will not follow Apple&#8217;s iPhone Human Design Guidelines at all; we have our own. Users must double-click on buttons, so they feel more comfortable while using our application&#8221;;</li><li>&#8220;We want our [PUT YOUR FAVORITE UIKIT CLASS NAME HERE] to have [SOME IMPOSSIBLE FEATURE WHICH DEFIES GRAVITY]. Easy, right?&#8221;</li><li>&#8220;We have to remove this XYZ feature, right now!&#8221;, which means rewriting half of the code and leads to this: &#8220;What? So much? For such a small change?&#8221;</li><li>&#8220;Why have you spent all that time &#8216;fixing memory leaks&#8217;? I won&#8217;t pay for that. Please concentrate in the new features we&#8217;ve asked. By the way, what are memory leaks?&#8221;</li><li>&#8220;Here&#8217;s the styles document you asked, with the colors and fonts for the application&#8221; and the guy provides me with&#8230; a CSS stylesheet. Which references a <a
href="/2008/11/12/iphone-font-browser/">font not available on the iPhone</a>, by the way, and with colors in hex format.</li><li>&#8220;We want an animation at startup, like the Chanel application&#8221; (everyone wants to release the next Chanel iPhone app these days) &#8220;here&#8217;s an [animated GIF / Flash movie / PowerPoint slides] with the animation for you.&#8221;</li><li>&#8220;Our team has slightly modified the code when you weren&#8217;t there, but it does not work any more, could you fix it please?&#8221;</li></ul><p>And of course, the all-time winners: the support tickets stating that &#8220;everything is slow&#8221; without further indication, or that &#8220;the application hangs&#8221;, without any details in it.</p><p>OK, I confess, I&#8217;m a bit of an extremist here; many of the quotes above are valid in some contexts. But not those of the small-to-medium sized iPhone projects I&#8217;ve been involved in lately, with the urgency of releasing the code as fast as possible, just for the sake of being there, in the App Store, right now.</p><p>There&#8217;s a long road ahead. The problem, again, is not the technology itself, but the people involved in these projects (me, for example :). There&#8217;s a bit of what Joel mentioned a while ago, about the <a
href="http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html">perils of Java schools</a>, which actually only has to do with developers, but there&#8217;s also the issue about teaching the clients the limits of the platform, and about creating a strong software engineering body of knowledge in companies which usually did not need it previously.</p><p>We&#8217;ve been doing web apps for so long that we&#8217;ve forgotten how to sit down, take a deep breath, fix that goddamn memory leak, and realize that, as Brooks and <a
href="http://www.joelonsoftware.com/articles/fog0000000017.html">Joel said</a>, good software takes time.</p> ]]></content:encoded> <wfw:commentRss>http://akosma.com/2008/12/23/dirty-little-secret/feed/</wfw:commentRss> <slash:comments>7</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>On the Need of Minimalist Polyglots</title><link>http://kosmaczewski.net/minimalist-polyglots/</link> <comments>http://kosmaczewski.net/minimalist-polyglots/#comments</comments> <pubDate>Mon, 12 May 2008 13:19:25 +0000</pubDate> <dc:creator>Adrian</dc:creator> <category><![CDATA[Code]]></category> <category><![CDATA[Opinion]]></category> <category><![CDATA[Project Management]]></category> <category><![CDATA[Quality]]></category> <category><![CDATA[Software]]></category> <category><![CDATA[programming]]></category> <guid
isPermaLink="false">http://kosmaczewski.net/2008/05/12/on-the-need-of-minimalist-polyglots/</guid> <description><![CDATA[Many companies, at some point of their history, ask themselves a simple question: what programming language should I use? The answer to this question is tricky, and has big, big consequences, for every single line of code of your future &#8230; <a
href="http://kosmaczewski.net/minimalist-polyglots/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Many companies, at some point of their history, ask themselves a simple question: <strong>what programming language should I use?</strong> The answer to this question is tricky, and has big, big consequences, for every single line of code of your future products will be written, read and suffered by it. This single choice defines the level of salaries you will have to pay, the skills of programmers you will have to deal with, the relative length and performance of your systems, the availability of tools (or lack thereof), the kind of support you will get (or not), the number of operating systems your code will work in, etc.</p><p><a
href='http://flickr.com/photos/undercover_surrealist/2314668364/'><img
src="http://kosmaczewski.net/wp-content/uploads/2008/05/2314668364_4b7c65db9b-300x300.jpg" alt="" title="2314668364_4b7c65db9b" width="150" height="150" align="left" /></a></p><p>Given the fact that <a
href="http://kosmaczewski.net/2007/08/02/web-development-equal-software-development/">Web Development equals Software Development</a>, this discussion will be of interest to those building the smallest websites, as well as old desktop-intensive apps. It will not be a &#8220;Tell me what programming language you use, and I will tell you who you are&#8221; type of article, though it may look like one, because that is something you have to figure out all by yourself.</p><p>If you take a look at the <a
href="http://en.wikipedia.org/wiki/List_of_programming_languages">list of programming languages</a>, any business person would have an instant headache. There are lots of them. With the strangest names. You cannot possibly guess which one to pick from such a list, obviously. So, how do companies choose the languages they use? There are some straightforward methods that I have seen so far, in no particular order:</p><ul><li>Looking at what other companies use (typically <a
href="http://www.google.com/">Google</a>, <a
href="http://www.microsoft.com/">Microsoft</a>, <a
href="http://www.apple.com/">Apple</a> or <a
href="http://www.sun.com/">Sun</a>, but it could be <a
href="http://37signals.com/">37signals</a> too).</li><li>Following the advice of the CIO, the Lead Architect or some other politically-powered person, which might or might not have read this article ;)</li><li>Looking at what the current pool of programmers in the company know how to use. Rinse, wash, repeat.</li><li>Following hype.</li><li>Because there is a market plenty of available, cheap programmers that I could use for this project.</li><li>Taking into account the characteristics of the languages themselves (static vs. dynamic, etc).</li><li>Following the company&#8217;s history of past projects (successful or not).</li><li>Following what your the client suggests (or mandates).</li></ul><p>I think that <strong>it is a very bad idea to take any of the above methods in isolation, without considering other factors.</strong> Doing so is a path to self-destruction in the medium to long term, even if you succeed in the short term.</p><p><span
id="more-1165"></span></p><p>Just as a small background for people not into programming: you can safely (roughly) group programming languages in a table like this:</p><table
border="1" cellpadding="5" cellspacing="0"><tr><td></td><th>Static</th><th>Dynamic</th></tr><tr><th>Strongly typed</th><td><a
href="http://kosmaczewski.net/2007/05/02/not-exactly-what-i-meant/">Java</a>, <a
href="http://kosmaczewski.net/2008/03/07/iphone-sdk-une-nouvelle-ere-demarre/">Objective-C</a>, Pascal, &#8230;</td><td><a
href="http://kosmaczewski.net/2008/01/11/my-first-django-project/">Python</a>, <a
href="http://kosmaczewski.net/2007/11/11/deliver-now/">Ruby</a>, <del
datetime="2008-05-13T06:49:42+00:00">JavaScript</del>, Objective-C, Lisp, &#8230;</td></tr><tr><th>Weakly typed</th><td><a
href="http://kosmaczewski.net/2008/03/13/templates/">C++</a>, C, &#8230;</td><td><a
href="http://kosmaczewski.net/2007/08/03/javascript-tips-tricks-1/">JavaScript</a>, <a
href="http://kosmaczewski.net/2005/09/15/land-of-the-forbidden-maneuver/">VBScript</a>, &#8230;</td></tr></table><p>In a static language all variable type references are bound at compile time; in a dynamic language, this is done at runtime (which allows you to assign a string or an int to the same variable). In a strongly-typed language, either the compiler or the runtime enforces the operations you can and cannot do on an object (depending on its type, as you may have guessed). In a weakly-typed one, there is no such restriction, and you can perform implicit conversions from one type to the other. And then you have functional ones, but that is another problem, because <a
href="http://kosmaczewski.net/2006/05/10/about-oop-and-other-programming-paradigms/">there are many programming paradigms</a> out there. And then there is the hybrid ones, which I love as <a
href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Steve Yegge</a> does:</p><blockquote> But also there&#8217;s, like, the Boo language, the io language, there&#8217;s the Scala language, you know, I mean there&#8217;s Nice, and Pizza, have you guys heard about these ones? I mean there&#8217;s a bunch of good languages out there, right? Some of them are really good dynamically typed languages. Some of them are, you know, strongly [statically] typed. And some are hybrids, which I personally really like.</blockquote><p>He did not include Objective-C as &#8220;hybrid&#8221;, but I think it is. Anyway, so much for the theory, here is the main point of this article:</p><p><a
href='http://flickr.com/photos/urban_data/373580375/'><img
src="http://kosmaczewski.net/wp-content/uploads/2008/05/373580375_ebd110c4cb.jpg" alt="" title="373580375_ebd110c4cb" width="500" height="377" class="alignnone size-full wp-image-1168" /></a></p><p>First of all, I consider programming languages (I know a <a
href="http://kosmaczewski.net/2007/12/19/erlang/">few of them</a>, and I have <a
href="http://kosmaczewski.net/2007/03/09/preferred-programming-languages/">my personal picks</a>) just as tools to <a
href="http://www.davidco.com/what_is_gtd.php">get things done</a>&trade;. <strong>Nothing else.</strong> I think of them as hammers or Black &amp; Decker screwdrivers or saws or nail guns.</p><p>Second, I believe that <a
href="http://www.elise.com/quotes/a/heinlein_specialization_is_for_insects.php">specialization is for insects</a>. Getting stuck in a single programming language because of any of the reasons I have enumerated above is just stupid.</p><p>So what I want to say is: <strong>You need polyglot programmers in your team</strong>, like you need a team of people knowledgeable in many human languages in every company doing business at global scale. I would say even more, you need not only people fluent in western languages (like English, French, Spanish and Italian, which is my combination) but also in other languages, with different paradigms behind, like Arab, Hebrew, Hindi or Chinese.</p><p>What does that mean in programming terms? You want to have programmers in your team being able to use different languages in different ways; you want to have programmers that learn new languages every so often, just for the sake of it. And most importantly, you want to get rid of programmers that not only get stuck on a single language, but that, even worse, dismiss any other way to do things. Having people that takes a negative look on the learning side of things can bring your whole company to a dead-end. This industry is plenty of integrists, and you do not want that in your company.</p><p>For example, JavaScript can be used as a procedural, object-oriented or functional programming language. Does your JavaScripters know how to write functional JavaScript? If not, that is too bad, because they will not be able to fully understand what is going on behind the scenes in <a
href="http://prototypejs.org/">Prototype</a> or <a
href="http://jquery.com/">jQuery</a> then. Of course this will not block them from using those libraries, but they might not understand how to apply some interesting patterns in their own code.</p><p>Ask more about your programmers: do they know how to do <a
href="http://en.wikipedia.org/wiki/Curiously_Recurring_Template_Pattern">complex C++ template metaprogramming</a>? Are they aware of some <a
href="http://kosmaczewski.net/2005/06/14/common-garbage-collection-problems/">performance problems brought by garbage collectors</a>? Do they follow the latest evolutions of the next version of JavaScript? (even if <a
href="http://kosmaczewski.net/2008/03/03/now-this-is-ridiculous/">they do not like them</a>) Which <a
href="http://kosmaczewski.net/2008/01/31/6-blogs/">blogs</a> do they follow? Do they know <a
href="http://www.ihatephp.net/">why some people hate PHP</a>? Do they know what a <a
href="http://www.seaside.st/">continuation server</a> is? Which <a
href="http://kosmaczewski.net/2008/01/23/best-books-of-2007/">programming books have they read</a> lately?</p><p>And finally, what is even more important than having chosen a good programming language? <strong>Your methodology.</strong> Ask yourself (or your team) about these points:</p><ul><li>Do you write unit tests? You might not have testers, which is a <a
href="http://www.joelonsoftware.com/articles/fog0000000067.html">bad idea</a> anyway, but that does not block you from testing code yourself (<a
href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Steve Yegge</a>):</li></ul><pre><code>&lt;blockquote&gt;
    And I would say it's a pain in the butt, but I mean... it's a pain in the butt because... a static type-systems researcher will tell you that unit tests are a poor man's type system. The compiler ought to be able to predict these errors and tell you the errors, way in advance of you ever running the program.
&lt;/blockquote&gt;
</code></pre><ul><li>Do you use <a
href="http://kosmaczewski.net/2007/08/23/design-by-contract/">defensive programming</a> techniques?</li><li>Do you have a wiki, a project website or at least good documentation in your code? If not, how do your new hires learn about your product? No, reading the code is NOT a good answer.</li><li>Is your chosen programming language portable? You might think that your system will never have to run on Linux or Mac, but why stuck yourself on purpose?</li></ul><p>The common factor of all the above items is that you have to <strong>manage complexity</strong>. If you write code, you are creating complex stuff, and one of the best ways to manage complexity is to create small systems; as <a
href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">Steve Yegge said</a>:</p><blockquote> Small systems are not only easier to optimize, they&#8217;re possible to optimize. And I mean globally optimize.</blockquote><p><a
href='http://flickr.com/photos/simon_shek/80220468/'><img
src="http://kosmaczewski.net/wp-content/uploads/2008/05/80220468_0747c5d7bd.jpg" alt="" title="80220468_0747c5d7bd" width="500" height="375" class="alignnone size-full wp-image-1167" /></a></p><p>And this is why you do not only need polyglot, but also <strong>minimalist programmers</strong> in your team. Small is beautiful. Paul Graham (of <a
href="http://ycombinator.com/">Y Combinator</a> fame) knows that <a
href="http://www.paulgraham.com/hp.html">dynamic languages yield small systems</a>:</p><blockquote> The right tools can help us avoid this danger. A good programming language should, like oil paint, make it easy to change your mind. Dynamic typing is a win here because you don&#8217;t have to commit to specific data representations up front. But the key to flexibility, I think, is to make the language very abstract. The easiest program to change is one that&#8217;s very short.</blockquote><p>And how can you get small programs? By choosing the right programming language. Which brings us to the beginning of this post! So, here go some tips for all of you looking for the right programming language:</p><ul><li><strong>Prefer strongly-typed, dynamic languages;</strong> there are a lot of reasons for that, particularly those exposed by Steve Yegge in his <a
href="http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html">excellent presentation at Stanford</a>:</li></ul><blockquote> Yeah, sure, it catches a few trivial errors, but what happens is, when you go from Java to JavaScript or Python, you switch into a different mode of programming, where you look a lot more carefully at your code. And I would argue that a compiler can actually get you into a mode where you just submit this batch job to your compiler, and it comes back and says &#8220;Oh, no, you forgot a semicolon&#8221;, and you&#8217;re like, &#8220;Yeah, yeah, yeah.&#8221; And you&#8217;re not even really thinking about it anymore.
Which, unfortunately, means you&#8217;re not thinking very carefully about the algorithms either. I would argue that you actually craft better code as a dynamic language programmer in part because you&#8217;re forced to. But it winds up being a good thing.</blockquote><ul><li>Some points about his talk:<ul><li>Many of the caveats of dynamic languages are not (so) true anymore (like the lack of decent <a
href="http://www.jetbrains.com/idea/">IDEs</a> or the performance problems);</li><li>There is a lot of research going on nowadays on the performance of programming languages, and this means that code written in these languages will benefit from many improvements in the near future, for free;</li><li>And yes, there is the hype factor I have mentioned above; the <a
href="http://www.paulgraham.com/pypar.html">cool kids are using them</a>:</li></ul></li></ul><blockquote> Which makes them exactly the kind of programmers companies should want to hire. Hence what, for lack of a better name, I&#8217;ll call the Python paradox: if a company chooses to write its software in a comparatively esoteric language, they&#8217;ll be able to hire better programmers, because they&#8217;ll attract only those who cared enough to learn it. And for programmers the paradox is even more pronounced: the language to learn, if you want to get a good job, is a language that people don&#8217;t learn merely to get a job.</blockquote><ul><li><strong>Teach yourselves;</strong> setup internal workshops to have all your team learn how to do cool stuff with those languages you have read about in <a
href="http://www.ddj.com/">DDJ</a>.</li><li><strong>Teach the community around you, and do not be scared of competition;</strong> have your team write papers, articles on business or technical journals, publish code as open source projects, and show that you can go beyond.</li><li><strong>Keep an open mind:</strong> continuation servers, <a
href="http://en.wikipedia.org/wiki/Comet_(programming)">Comet</a> or <a
href="http://www.gotw.ca/publications/concurrency-ddj.htm">multicore processors</a> are the future. Is your team prepared?</li></ul><p>Software is a social process. Once you get this in your mind, and get your team working proactively, collaboratively and teaching each other, the choice of a programming language comes in second place.</p> ]]></content:encoded> <wfw:commentRss>http://kosmaczewski.net/minimalist-polyglots/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> </channel> </rss>
