<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/atom10full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.feedburner.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:gd="http://schemas.google.com/g/2005" gd:etag="W/&quot;DEMBQHk7cCp7ImA9WxRRFkU.&quot;"><id>tag:blogger.com,1999:blog-30323643</id><updated>2008-09-29T04:07:31.708-07:00</updated><title>David's Software Development Survival Guide</title><subtitle type="html">Thoughts on software development management: &lt;br&gt; people, technology, processes, innovation, usability, and adoption.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default?redirect=false&amp;start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>DavidT</name><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>52</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/SoftwareSurvival" type="application/atom+xml" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">1550521</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://www.feedburner.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0EGQXY9fip7ImA9WxRSFUk.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-8213798078205486697</id><published>2008-09-15T22:07:00.000-07:00</published><updated>2008-09-15T22:07:00.866-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-15T22:07:00.866-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Technical Design Essentials</title><content type="html">As far as the current state of software technology, pretty much everything has been written on technical design - but &lt;a href="http://softwaresurvival.blogspot.com/2008/05/guidelines-for-good-technical-design.html"&gt;then again&lt;/a&gt;, it looks like Search Engines, with their current flaws, want us to write about the topic - and don't seem to lead to anything much relevant.&lt;br /&gt;&lt;br /&gt;So here is a list of 3 books that are essential to better designing software and creating solid architectures.&lt;br /&gt;These are classics that are worth much more than what they're being sold for.&lt;br /&gt;With one exception, the list weights heavily towards pure Object Oriented design and concepts. This doesn't mean that highly-structured OO designs are invariably better than the light-structured ones - it just means that in order to make a technical choice, you need to truly understand what your options are.&lt;br /&gt;Onto the list:&lt;br /&gt;&lt;br /&gt;. UML Distilled - by Martin Fowler. The focus of this book is as much on UML (which is a critical tool) as on the development and technical design process (where Fowler truly shines). Fowler is able to articulate in a very concise manner the process, challenges, and best practices of  creating great OO designs.&lt;br /&gt;Here are two great quotes that convey well Fowler's tone and philosophy:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;. "No user is going to help you for pretty pictures; what a user wants is software that executes"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;. "A hard deadline works well in concentrating minds"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;. Design Patterns - by Gamma, Helm, Johnson, and Vlissides; aka the Gang of Four&lt;br /&gt;This is an absolute classic.&lt;br /&gt;The book contains 23 software design patterns.&lt;br /&gt;There again, the actual patterns are interesting, but what is truly unique and invaluable is the description of the thought process underneath them.&lt;br /&gt;The authors also lay critical principles of good OO designs - including these two:&lt;br /&gt;. &lt;span style="font-style: italic;"&gt;"Program to an interface, not an implementation"&lt;/span&gt;&lt;br /&gt;. &lt;span style="font-style: italic;"&gt;"Favor object composition over class inheritance"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;. Building Scalable Web Sites - by Cal Henderson&lt;br /&gt;Cal Henderson played a key role in building the &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; architecture; so he knows a thing or two about building scalable web applications.&lt;br /&gt;There is a couple of things that make this book extremely compelling:&lt;br /&gt;1. It reflects on a much less formal approach to build solid architectures - the technology stack is &lt;a href="http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29"&gt;LAMP&lt;/a&gt;; with PHP intrinsically putting less focus on the high-structure OO principles that Fowler or the Gang of Four are outlining&lt;br /&gt;2. It touches on all the elements required to build high-traffic web applications - this includes general architecture options; authentication and security requirements; localization and internationalization; hosting; partitioning, distribution and clustering; performance and scalability.&lt;br /&gt;&lt;br /&gt;As a bonus - here are 3 websites that are worth looking at:&lt;br /&gt;. &lt;a href="http://ootips.org/"&gt;OO Tips&lt;/a&gt;, by Yonat Sharon, contains a great collection of notes on Object Oriented design. The content is sometimes too deeply rooted into Object Oriented dogma - but there again, knowledge is power.&lt;br /&gt;. &lt;a href="http://www.ibm.com/developerworks/library/ws-mapping-to-rdb/"&gt;Mapping objects to relational databases&lt;/a&gt;, by Scott Ambler, is a great paper on the key design issue of Object-relational mapping. The article balances depth and clarity, and perfectly articulate how design choices are a question of trade-offs.&lt;br /&gt;.The &lt;a href="http://c2.com/cgi/wiki?AntiPatternsCatalog"&gt;Anti-pattern catalog&lt;/a&gt;, on &lt;a href="http://en.wikipedia.org/wiki/Ward_Cunningham"&gt;Ward Cunningham&lt;/a&gt;'s web site, has an extensive list of design traps, that you can get familiar with - in order to be better able to identify and avoid them.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/8213798078205486697/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=8213798078205486697" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/8213798078205486697?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/8213798078205486697?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/09/technical-design-essentials.html" title="Technical Design Essentials" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;AkQMQHY9eip7ImA9WxRTF0g.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-2722118482962554377</id><published>2008-09-06T19:49:00.000-07:00</published><updated>2008-09-06T20:33:01.862-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-06T20:33:01.862-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>From Flip-Flop to Kung Fu via the Red Army - an alternative maturity model</title><content type="html">A number of years ago, the Capability Maturity Model was introduced as a way to measure the maturity of development organizations.&lt;br /&gt;In a nutshell, the concept is that the least mature organizations are relying on undocumented processes, practices and knowledge; and that their success -if any- is the sole result of individuals' heroic prowess.&lt;br /&gt;Grossly oversimplified, the CMM states that organizations mature by gradually developing repeatable processes; then measuring their efficiency, and finally optimizing the way they operate.&lt;br /&gt;Somewhat of a &lt;a href="http://en.wikipedia.org/wiki/Maslow%27s_hierarchy_of_needs"&gt;Maslow pyramid of needs&lt;/a&gt; applied to organizations - from survival to ongoing self-improvement.&lt;br /&gt;  You can read &lt;a href="http://www.sei.cmu.edu/cmmi/faq/comp-faq.html"&gt;here&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Capability_Maturity_Model"&gt;there&lt;/a&gt; for a more detailed -and clearer- explanation.&lt;br /&gt;&lt;br /&gt;The CMM is definitely a good way to "read" a development organization - and address its weaknesses.&lt;br /&gt;&lt;br /&gt;Looking back at the development shops I've worked at, and the ones I've worked with; it seems that the maturity of these organizations could also be categorized along an alternative framework, based on 3 very distinct types:&lt;br /&gt;&lt;br /&gt;. The Flip-Flop organization:&lt;br /&gt;Flip-Flop organizations are on the lower end of the scale, and are a too common type.&lt;br /&gt;Their essence and commonality lies in the fact that they are lacking focus and a sense of purpose.&lt;br /&gt;Some employ very formal and repeatable processes, others are very &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development"&gt;Agile&lt;/a&gt;; yet they all achieve the same thing: not much, if anything.&lt;br /&gt;A majority of the projects they engage in never come to fruition: they're either shut down in flight, experience a slow death, or do come to completion but with an outcome that has no significant impact.&lt;br /&gt; The &lt;a href="http://softwaresurvival.blogspot.com/2008/02/management-styles-beyond-x-and-y.html"&gt;management style&lt;/a&gt; of these organizations could pretty much be anything - except focused, deliberate, and resolved.&lt;br /&gt;The pattern is self-reinforcing as people quickly understand that there is no point in pushing their limits, that they won't be held accountable for slipping a date, and that they might as well focus on &lt;a href="http://www.healthcareguy.com/index.php/archives/346"&gt;Resume Driven Development&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The common cure for fixing a Flip-Flop organization is to come down with a hammer, set objectives that you can't mess with, and transform it into...&lt;br /&gt;&lt;br /&gt;. The Red Army development team&lt;br /&gt;&lt;span style="font-size:100%;"&gt;[&lt;span style="font-style: italic;"&gt;Apologies to veterans who fought in &lt;/span&gt;&lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Battle_of_Stalingrad"&gt;Stalingrad&lt;/a&gt;&lt;span style="font-style: italic;"&gt; and &lt;/span&gt;&lt;a style="font-style: italic;" href="http://news.bbc.co.uk/onthisday/hi/dates/stories/january/27/newsid_3520000/3520986.stm"&gt;freed-up death camps&lt;/a&gt;&lt;span style="font-style: italic;"&gt;; it's the &lt;a href="http://en.wikipedia.org/wiki/Nikita_Khrushchev"&gt;Management&lt;/a&gt; &lt;/span&gt;&lt;span style="font-style: italic;"&gt;I have in mind...&lt;/span&gt;]&lt;br /&gt;&lt;/span&gt; The central concept in this type of organization is that it's a crime not to meet a goal or to slip a date - and you might get shot (or fired) for doing so.&lt;br /&gt;Projects need to have aggressive completion dates before starting, and once initiated, there is no turning back unless an &lt;a href="http://en.wikipedia.org/wiki/Act_of_God"&gt;Act of God&lt;/a&gt; strikes.&lt;br /&gt;There again, processes may or may not be formal/agile/repeatable - although processes do tend to develop very quickly when people need to set boundaries around their responsibility and accountability.&lt;br /&gt;The overall throughput is much greater than in the Flip-Flop organization; the organization does get from point A to point B; but there are 2 major issues:&lt;br /&gt;1. Efficiency is on the same order as driving a military-grade truck to go to the post office (a practice that was popular until recently). Mileage is poor and you need deep pockets in order to  operate this way.&lt;br /&gt;2. In software development, the point B defined when you were at point A, rarely has any relevance when you're about reach the said point B. Development is a process of discovery that requires constant adjustments, and markets are typically volatile and demand an ongoing validation of the strategy and objectives.&lt;br /&gt;&lt;br /&gt;In order to fix a Red Army organization you need the organization and its leaders to develop a deep concern for both economy and impact - i.e. a focus on getting maximum results without expanding energy unnecessarily.&lt;br /&gt;&lt;br /&gt;You then get...&lt;br /&gt;&lt;br /&gt;. The Kung Fu organization:&lt;br /&gt;If you're not a fan of &lt;a href="http://en.wikipedia.org/wiki/Kung_Fu_Hustle"&gt;Stephen Chow's movies&lt;/a&gt; or haven't read &lt;a href="http://en.wikipedia.org/wiki/The_Art_of_War"&gt;Sun Tsu&lt;/a&gt; the concept might sound obscure.&lt;br /&gt;What lies within it is a constant focus on quickly assessing your current position, leveraging your strengths and the opportunities presented by the environment, and creating maximum impact with minimal effort.&lt;br /&gt;This requires the organization to be deliberate and disciplined, yet flexible and creative.&lt;br /&gt;In this type of organizations, you'll typically find:&lt;br /&gt;- very lightweight processes&lt;br /&gt;- very seniors engineers that have the respect of the entire organization, but yet are not unquestioned&lt;br /&gt;- a leadership team with a constant focus on performance and results&lt;br /&gt;&lt;br /&gt;In a way, &lt;a href="http://en.wikipedia.org/wiki/Peter_Drucker"&gt;Peter Drucker&lt;/a&gt;, might have been much closer to Kung Fu than one would have thought.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/2722118482962554377/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=2722118482962554377" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/2722118482962554377?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/2722118482962554377?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/09/from-flip-flop-to-kung-fu-via-red-army.html" title="From Flip-Flop to Kung Fu via the Red Army - an alternative maturity model" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;A0MMQH44eSp7ImA9WxRTFEQ.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-4994936068642881852</id><published>2008-09-03T20:38:00.000-07:00</published><updated>2008-09-03T20:38:01.031-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-03T20:38:01.031-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="usability" /><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="management" /><category scheme="http://www.blogger.com/atom/ns#" term="estimation" /><category scheme="http://www.blogger.com/atom/ns#" term="adoption" /><title>Persistence</title><content type="html">I'm talking about perseverance here -i.e. "to persist in a state, enterprise, or undertaking in spite of counter-influences, opposition, or discouragement" [&lt;a href="http://www.merriam-webster.com/dictionary/persevering"&gt;m-w definition&lt;/a&gt;] - not about &lt;a href="http://en.wikipedia.org/wiki/Persistence_%28computer_science%29"&gt;data storage&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;I recently came across 2 great pieces that are uplifting for any individual or team facing obstacles, and in particular the lack of understanding or empathy from the external world.&lt;br /&gt;&lt;br /&gt;The first one is coming from Guy Kawasaki: in a guest post on Sun's blog titled "&lt;a href="http://www.sun.com/solutions/smb/guest.jsp?blog=five_lessons"&gt;Five most important lessons I've learned as an entrepreneur&lt;/a&gt;" - item 4 reads:&lt;br /&gt;"&lt;br /&gt;Ignore schmexperts. Schmexperts are the totally bad combination of schmucks who are experts--or experts who are schmucks. When you first launch a product or service, they'll tell you it isn't necessary, can't really work, or faces too much competition. If you succeed, then they'll say they knew you would succeed. In other words, they don't know jack shiitake. If you believe, try it. If you don't believe, listen to the schmexperts and stay on the porch."&lt;br /&gt;&lt;br /&gt;The other piece is proof to Kawasaki's point - it's a &lt;a href="http://www.flickr.com/photos/thepartycow/87500580/sizes/l/"&gt;letter&lt;/a&gt; from the &lt;a href="http://www.moma.org/"&gt;NY MOMA&lt;/a&gt; that was sent to &lt;a href="http://en.wikipedia.org/wiki/Andy_Warhol"&gt;Andy Warhol&lt;/a&gt; in 1956.&lt;br /&gt;It reads:&lt;br /&gt;"&lt;br /&gt;Dear Mr. Warhol:&lt;br /&gt;&lt;br /&gt;Last week our Committee on the Museum Collections held its first meeting of the fall season and had a chance to study your drawing entitled &lt;span style="text-decoration: underline;"&gt;Shoe&lt;/span&gt; which you so generously offered as a gift to the Museum.&lt;br /&gt;&lt;br /&gt;I regret that I must report to you that the Committee decided, after careful consideration, that they ought not to accept it for our Collection.&lt;br /&gt;&lt;br /&gt;Let me explain that because of our severely limited gallery and storage space we must turn down many gifts offered, since we feel it is not fair to accept as a gift a work which may be shown only infrequently.&lt;br /&gt;&lt;br /&gt;Nevertheless, the Committee has asked me to pass on to you their thanks for your generous expression of interest in our Collection.&lt;br /&gt;&lt;br /&gt;Sincerely,&lt;br /&gt;Alfred H. Barr, Jr.&lt;br /&gt;Director of the Museum Collections"&lt;br /&gt;&lt;br /&gt;The letter ends with a P.S.:&lt;br /&gt;"The drawing may be picked up from the Museum at your convenience."</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/4994936068642881852/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=4994936068642881852" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/4994936068642881852?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/4994936068642881852?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/09/persistence.html" title="Persistence" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;A04AQXYyfCp7ImA9WxdUEkw.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-971084961009913259</id><published>2008-07-27T21:39:00.000-07:00</published><updated>2008-07-27T21:39:00.894-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-27T21:39:00.894-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>The 5 Easy Steps to Creating a Bullshit Management Methodology</title><content type="html">I recently went through another 3 day management training class - and it was just excruciating; a real punishment for being a manager.&lt;br /&gt;One of my lead, who was also attending the class, had me promise not to use this stuff at the office.&lt;br /&gt;&lt;br /&gt;The management field is plagued by a slew of witch doctors that are selling management books and trainings, in the hopes of making millions, while attempting to impersonate true management theorists - such as &lt;a href="http://en.wikipedia.org/wiki/Peter_Drucker"&gt;Drucker&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Watts_Humphrey"&gt;Humphrey&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Tom_DeMarco"&gt;De Marco&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There are 2 questions that keep on hitting me when I go through these types of trainings -I've stopped going through the books a while ago, but I don't always get, or choose, the option to skip the trainings-:&lt;br /&gt;. What are the components of BS management methodologies?&lt;br /&gt;. Why people eat the stuff?&lt;br /&gt;&lt;br /&gt;I only have a partial answer to the second question and it probably has to do with why there are so many variations of Fast Food chains in the World.&lt;br /&gt;&lt;br /&gt;I may have a more complete answer as to what is the fabric -if you will- of these management sub-methodologies.&lt;br /&gt;&lt;br /&gt;So here are 5 steps to creating a &lt;a href="http://en.wikipedia.org/wiki/Bullshit"&gt;Bullshit&lt;/a&gt; Management Methodology:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;1. Pick a good, wide-reaching, and difficult problem&lt;/span&gt; - e.g.&lt;br /&gt;. quality sucks in most products;&lt;br /&gt;. communicating with people is difficult;&lt;br /&gt;. change is hard;&lt;br /&gt;. we rarely get to retire before age 30;&lt;br /&gt;you name it...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;2. &lt;/span&gt;Identify common-sense concepts and ideas that, if applied, do address the problem - BUT &lt;span style="font-weight: bold;"&gt;introduce a thick layer of theories, concepts, and acronyms &lt;/span&gt;on top of it:&lt;br /&gt;Don't just say that Quality must be an overall process that needs to be constantly measured and improved; or that when discussing difficult topics with people, you should assess objectives, values, background, and emotions.&lt;br /&gt;Instead, introduce concepts with unique names and acronyms: "method 3", "level 4", SSX, "black belts", whatever...&lt;br /&gt;&lt;br /&gt;This step is absolutely critical and has 2 major benefits:&lt;br /&gt;1. No one wants to buy a book that just says common-sense stuff. It's boring.&lt;br /&gt;2. You put your audience on the edge - they need to memorize stuff, make an effort to follow you.&lt;br /&gt;The idea here is that there should be just enough complexity for the audience to follow you, and yet prevent them from analyzing and questioning the virtues of what you're saying.&lt;br /&gt;In other words, they should have just enough to chew on and digest.&lt;br /&gt;And if it makes people hopeful and upbeat at the prospect of solving a pain or addressing a need - they'll ask for more.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;3. Ignore other theories and authored work&lt;/span&gt;&lt;br /&gt;You should avoid referring to other authors; especially if they're original, critical, thought-provoking, and articulate - they are your competition.&lt;br /&gt;One caveat - it's OK, and actually recommended, to quote people who've given their names to a theory but haven't published much other than specialized research papers. So &lt;a href="http://en.wikipedia.org/wiki/Abraham_Maslow"&gt;Maslow&lt;/a&gt; is always a great addition.&lt;br /&gt;In any case, you should never list your sources and references in your books / training materials - unless your publisher forces you to mention other published authors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;4. Be assertive as if you had seen the Light and found the Truth&lt;/span&gt;&lt;br /&gt;Do not invite self-criticism or doubt.&lt;br /&gt;Push it as far as you can without ever showing an ounce of doubt.&lt;br /&gt;It's OK to call your work a 'philosophy', but you should instead define a dogma.&lt;br /&gt;The bulk of your audience isn't expecting to read &lt;a href="http://en.wikipedia.org/wiki/Immanuel_Kant"&gt;Kant&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Thomas_Hobbes"&gt;Hobbes&lt;/a&gt; when picking your book. They're looking for a ready-made solution that can give them a comforting faith; not for some uncertain philosophical journey raising more questions than they have answers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;5. Be universal&lt;/span&gt;&lt;br /&gt;The Management Methodology you're advocating should have the ambition to apply to all aspects of the audience's life.&lt;br /&gt;The 7 Epsilons Quality Management theory is relevant to your kitchen, and Situated Power Communication should work on your spouse, kids, and dog.&lt;br /&gt;And if it doesn't work; it means the reader didn't get it - and she should know it.&lt;br /&gt;&lt;br /&gt;This raises the stakes -the Methodology is much more powerful and critical than the audience initially imagined- and simplifies the reader's problem: just buy this book, follow these steps, and all of your problems will be fixed. And you should sign-up for my seminars if they're not.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And when you're done creating your very own Power Management Methodology for the Enterprise - if you've ended up corrupting yourself, feel lost, burned out, or need to get back to the basics - you can always reflect on what Peter Drucker's was writing in the early '70s:&lt;br /&gt;"An employer has no business with a man's personality. Employment is a specific contract calling for a specific performance... Any attempt to go beyond that is usurpation. It is immoral as well as an illegal intrusion of privacy. It is abuse of power. An employee owes no "loyalty," he owes no "love" and no "attitudes"--he owes performance and nothing else."</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/971084961009913259/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=971084961009913259" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/971084961009913259?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/971084961009913259?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/07/5-easy-steps-to-creating-bullshit.html" title="The 5 Easy Steps to Creating a Bullshit Management Methodology" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;D0AAQH05eSp7ImA9WxdQEU4.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-883716420723785846</id><published>2008-06-10T15:09:00.000-07:00</published><updated>2008-06-10T15:09:01.321-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-10T15:09:01.321-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="adoption" /><title>Measuring programming languages adoption trends</title><content type="html">I talked a while ago about perceived market trends in the programming language world: Java's stronghold seems to remain untouched, PHP is all the craze despite its intrinsic lack of structure, and the Ruby fad seems to be losing momentum - I actually thought it was pretty much dead until I started discussing with friends and was told Ruby is in fact alive and kicking.&lt;br /&gt;&lt;br /&gt;How can this easily be validated?&lt;br /&gt;Beyond formal polling -which is quite involved, expensive, and not necessarily accurate-, there are a number of ways to measure language adoption trends: analysis of book sales volumes, result counts in general-purpose search engines as well as blog-centered ones, or number of related job postings.&lt;br /&gt;&lt;br /&gt;One of the key to understand strengths and limitations of each of these approaches is to put them in the context of the &lt;a href="http://en.wikipedia.org/wiki/Diffusion_of_innovations"&gt;Diffusion of Innovation theory&lt;/a&gt;. In a nutshell, this theory states that 1. technologies spread by gradually addressing the needs of 4 types of users (innovators, early adopters, early majority, and late majority); and that 2. they do so in a non-linear manner, by typically expanding slowly until reaching the early majority, at which point they start expanding at a much faster rate (if and when the technology is successful).&lt;br /&gt;&lt;br /&gt;Here is a rundown of these trend analysis methods, followed by actual results:&lt;br /&gt;&lt;br /&gt;. Book sales volumes is an interesting source - as &lt;a href="http://radar.oreilly.com/archives/2005/04/book-sales-as-a-technology-tre.html"&gt;introduced by Tim O'Reilly&lt;/a&gt;.&lt;br /&gt;One limitation is that the numbers could reflect interest more than actual usage - buying a book on Ruby programming doesn't necessarily mean that I'm actually using it.&lt;br /&gt;From a Diffusion of Innovation standpoint, books would also tend to be purchased not so much by innovators or early adopters (books are typically not published when these categories start adopting a technology) and more by the early and late majorities - so sales numbers would probably better represent technologies that are already in the mainstream as opposed to the emerging ones.&lt;br /&gt;From a practical standpoint, a major issue with this approach is that the numbers are not published on a regular basis.&lt;br /&gt;&lt;br /&gt;. Volume returned by search engines is probably the simplest and most accessible method - I've tried to use it in my low-key analysis of &lt;a href="http://softwaresurvival.blogspot.com/2007/08/evolution-of-web-services-measuring.html"&gt;web services adoption trends&lt;/a&gt;, and &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html"&gt;TIOBE &lt;/a&gt;publishes indexes established based on this.&lt;br /&gt;One objection with TIOBE's index is that -as with any index- numbers can be taken at face value, with the audience ignoring their actual source and its intrinsic limitations:&lt;br /&gt;1. You need to pick your search keywords wisely; and you'll always get a level of noise in the results. TIOBE uses "&lt;language&gt; programming" as their keywords (as in "java programming" or "PHP programming") which might not be the best choice for say Actionscript (the more relevant keyword here being "Flex"). I use the language name as the search keyword - and I'm not sure how many of my results are related to jewelry when searching on "Ruby".&lt;br /&gt;2. Web count probably tends to favor languages on which there is a large established volume of data -i.e. those who've reached the majority-, or those who are creating an unusual amount of buzz (and thus generating a large number of references).&lt;br /&gt;&lt;br /&gt;. &lt;a href="http://technorati.com/"&gt;Technorati&lt;/a&gt;, or other similar blog-centered tools, is a useful variation on search engines - these probably tend to favor languages generating a lot of debate and discussions.&lt;br /&gt;The volume is likely to be generated by innovators and early adopters, and is therefore expected to tend to over-amplify early technologies rather than those in the mainstream.&lt;br /&gt;&lt;br /&gt;. Job postings are another place to look at.&lt;br /&gt;In fact, the job market could be one of the best indicators of the penetration of a technology: this is where the data is not affected by the volume of interest, publicity, or discussions; but in fact represents where organizations actually stand in terms of executing on a technology.&lt;br /&gt;One major caveat, is that organizations could more heavily recruit skills they don't have rather than the one they already have on staff – i.e. technologies entering the mainstream rather than established ones.&lt;br /&gt;The location of the job offering could also say a lot in terms of the diffusion of the technology: in tech-focused areas (e.g. the SF bay area), the numbers probably tend to favor technologies that are at the stage where they access the early adopters and early majority; in more traditional areas, they would reflect more or less on the early vs. late majorities, depending on how conservative the area is from a tech standpoint (e.g. NYC vs. Washington DC).&lt;br /&gt;&lt;br /&gt;To validate my hunch, here are the results of the above 3 approaches (excluding book sales because of lack of current data) for Java, PHP, Ruby, and Flex:&lt;br /&gt;I'm using &lt;a href="http://www.craigslist.org/"&gt;craigslist&lt;/a&gt; for job postings, and also normalizing results to 100% to help the comparison across sources.&lt;br /&gt;&lt;br /&gt;. Google:&lt;br /&gt;Java 487 millions; php 12,230m; ruby 130m; flex 95m&lt;br /&gt;[4%, 94%, 1%, 0.7%]&lt;br /&gt;&lt;br /&gt;. Yahoo&lt;br /&gt;Java 908 millions; php 2590m; ruby 267m; flex 195m&lt;br /&gt;[23%, 65%, 7%, 5%]&lt;br /&gt;&lt;br /&gt;. Technorati:&lt;br /&gt;Java 228k; php 141k; ruby 51k; flex 60k&lt;br /&gt;[47%, 29%, 11%, 13%]&lt;br /&gt;&lt;br /&gt;. Craigslist – SF Bay Area (all jobs)&lt;br /&gt;Java 1125; php 773; ruby 257; flex 250&lt;br /&gt;[47%, 32%, 11%, 10%]&lt;br /&gt;&lt;br /&gt;. Craigslist - NYC (all jobs)&lt;br /&gt;Java 406; php 606; ruby 143; flex 218&lt;br /&gt;[30%, 44%, 10%, 16%]&lt;br /&gt;&lt;br /&gt;. Craigslist - DC (all jobs)&lt;br /&gt;Java 228; php 267; ruby 47; flex 98&lt;br /&gt;[36%, 42%, 7%, 15%]&lt;br /&gt;&lt;br /&gt;What does this say? Probably that I need to do some more digging...&lt;br /&gt;&lt;br /&gt;- The google results seem to be out of control.&lt;br /&gt;I initially thought this was because of all the pages ending in .php, but the results are not different by much if searching on text only. So I went onto Yahoo, which is different, but still weighted towards php beyond what I was expecting.&lt;br /&gt;Plausible explanations:&lt;br /&gt;1. Php is indeed predominantly used&lt;br /&gt;2. Because of its nature and audience, php is much more "documented" on the web than java is&lt;br /&gt;&lt;br /&gt;- The Technorati weighting is indeed quite different from the regular search engines and instead closely aligned with the SF bay area job posting distribution - but I'm not quite sure what to make of it except that I'm not really seeing the amplification of emerging technologies that I was initially expecting.&lt;br /&gt;&lt;br /&gt;- In terms of job postings, the balance is leaning towards java in the Bay Area and PHP elsewhere.&lt;br /&gt;Is it really about being conservative, or does it have to do with the nature of the projects in different locations?&lt;br /&gt;Note also that there are less job postings in NYC and DC combined than in the Bay Area - so the question of what constitutes the "majority" might not be that straightforward.&lt;br /&gt;&lt;br /&gt;-As far as Ruby is concerned; there is not much that the numbers reveal - is it still in it's infancy, or slowly winding down?&lt;br /&gt;The only way to tell would be to look at the trending over time - which is a little bit more involved.&lt;br /&gt;&lt;br /&gt;I might take another checkpoint in 6 months to see where we are.&lt;br /&gt;&lt;br /&gt;&lt;/language&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/883716420723785846/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=883716420723785846" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/883716420723785846?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/883716420723785846?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/06/measuring-programming-languages.html" title="Measuring programming languages adoption trends" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;C08BRn08eyp7ImA9WxZaGUo.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-8325700365600009634</id><published>2008-05-05T00:02:00.000-07:00</published><updated>2008-05-05T00:17:37.373-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-05-05T00:17:37.373-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Guidelines for good technical design documents</title><content type="html">&lt;p class="MsoNormal"&gt;I recently realized that Yahoo! search gives me a great ranking on these keywords - but then doesn't link to anything relevant.&lt;br /&gt;That's a great question nonetheless... So here are some guidelines.&lt;br /&gt;&lt;br /&gt;What makes a good technical design doc varies greatly based on the environment, the level of uncertainty and changes expected, the level of formalism expected or required, the audience and stakeholders, and how the document fits into your &lt;a href="http://en.wikipedia.org/wiki/Software_development_process"&gt;SDLC&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal"&gt; There are some guidelines that are good to keep in mind in any case:&lt;br /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Only be as formal as you need to be - sometimes you don't need a document; discussions and brainstorming on a whiteboard might be sufficient&lt;/li&gt;&lt;li&gt;Start on the right foot by giving your document a relevant and clear title, a file name consistent with its content, a version history table, and a table of content&lt;/li&gt;&lt;li&gt;Don't write a &lt;a href="http://en.wikipedia.org/wiki/Victorian_literature"&gt;Victorian novel&lt;/a&gt; - use bullet points and tables, and keep sentences short&lt;/li&gt;&lt;li&gt;When documenting object oriented designs, make sure readers can quickly find and grasp each class' name, responsibility, and relationships to other classes (see &lt;a href="http://en.wikipedia.org/wiki/Class-Responsibility-Collaboration_card"&gt;CRC&lt;/a&gt; for more details)&lt;/li&gt;&lt;li&gt;A picture is indeed worth a thousand words - &lt;a href="http://en.wikipedia.org/wiki/Block_diagram"&gt;block diagrams&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Class_diagram"&gt;class diagrams&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/ER_diagram"&gt;ER diagrams&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Interaction_diagram"&gt;interaction diagrams&lt;/a&gt; are great tools that are easy to create. Keep them simple (their intent is to give the big picture), and make it easy on yourself (if you're good at MS Visio great; otherwise paper and scanner might be sufficient)&lt;/li&gt;&lt;li&gt;Make it as short and condensed as can be - the objective is not to write as much as you can; the objective is to describe the technical design as precisely and concisely as possible - most of us are not great writers, and most of us hate reading verbose tech docs&lt;/li&gt;&lt;li&gt;Do yourself a favor, read the &lt;span style="font-style: italic;"&gt;Elements of Style&lt;/span&gt; by Strunk and White - it's short and to the point, and will help make the writing process less painful for you&lt;/li&gt;&lt;/ul&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;Happy writing.&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/8325700365600009634/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=8325700365600009634" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/8325700365600009634?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/8325700365600009634?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/05/guidelines-for-good-technical-design.html" title="Guidelines for good technical design documents" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;DEUFSXwyfip7ImA9WxZUFUk.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-465682864513899385</id><published>2008-04-06T22:22:00.000-07:00</published><updated>2008-04-06T22:30:18.296-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-04-06T22:30:18.296-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Fixing performance reviews</title><content type="html">Performance reviews can be a great tool - both for managers and contributors - but most often, their intent is missed and their essence diluted in corporate formalism.&lt;br /&gt;&lt;p class="MsoNormal"&gt; Here is a rundown on some of the issues, and some thoughts on how to fix them.&lt;br /&gt;&lt;br /&gt;In most organizations performance reviews are comprised of:&lt;br /&gt;- a written self-review, where employees can reflect on their own performance&lt;br /&gt;- a written manager's review, where managers should structure and formalize their evaluation&lt;br /&gt;- a review meeting, where managers can formally deliver their feedback, and discuss with employees&lt;br /&gt;&lt;br /&gt;I believe these 3 components are essential, as they allow proper reflection and communication - on both ends.&lt;br /&gt;&lt;br /&gt;To spice things up, performance reviews are often driving, and followed by, salary adjustments.&lt;br /&gt;This sounds quite reasonable as you do want to compensate people based on their performance; but this is also putting a lot of weight on the exercise - most employees get less open to feedback when they think that the perception on how they performed on such or such project is solely guiding their paychecks&lt;br /&gt;[People should instead be compensated based on the overall value they provide to an organization in relation to market rates, as opposed to strictly on short-term performance]&lt;br /&gt;&lt;br /&gt;The crux of the problem often starts with the manager's written part of the performance review. These written reviews are either too un-structured -consisting in a loosely defined "Manager's Review" section which will eventually be followed by "Employee's Comments"; or conversely, too formalized - I've had to deal with "systems" where managers needed to rate their staff based on over 100+ questions after which a score would be given.&lt;br /&gt;These type of written performance evaluations result in review meetings with similar attributes - either a set of random recollections and thoughts, or a discussion around a metric system that employees try to game in order to get the highest possible score; hoping that their pay raise will follow.&lt;br /&gt;&lt;br /&gt;To be truly effective, to both the reviewer and the receiver, performance reviews need to focus of performance, results and growth - and just that.&lt;br /&gt;&lt;br /&gt;In order to accomplish this, I structure both self-reviews as well as reviews around 4 questions:&lt;br /&gt;- What were your major accomplishments over the review period?&lt;br /&gt;- What are the strengths you need to build on?&lt;br /&gt;- What are the areas you need to develop?&lt;br /&gt;- In which ways can we help you become more productive?&lt;br /&gt;&lt;br /&gt;While the relevance of the first question is obvious; the remaining questions are meant to help both the manager and the employee understand what they're good at (performance and results are obtained by building on strength, not weaknesses); where they need to improve in order to get greater leverage on their skills; and how can they make a greater contribution.&lt;br /&gt;&lt;br /&gt;The last key principle to better performance reviews is that the feedback provided during the review should be no surprise to the reviewee.&lt;br /&gt;People can only get better at their game if they receive constant feedback on their performance throughout the year.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/465682864513899385/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=465682864513899385" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/465682864513899385?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/465682864513899385?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/04/fixing-performance-reviews.html" title="Fixing performance reviews" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;AkUDR30zfip7ImA9WxZWEEU.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-6961231965715610299</id><published>2008-03-09T11:55:00.000-07:00</published><updated>2008-03-09T11:44:36.386-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-03-09T11:44:36.386-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Modeling development capacity in offshore teams</title><content type="html">When discussing roadmap options -estimates, plans and development capacity- with Executives, I'm often challenged by their assumption that x staff-weeks of effort here (in the San Francisco bay area) is equivalent to x-staff weeks of effort for our offshore team (located in India).&lt;br /&gt;The challenge for me has been as much to understand what variables affect offshore development productivity, as to communicate it to upper management - in a short and clear manner.&lt;br /&gt;&lt;br /&gt;Before going into further details, I should say that&lt;br /&gt;- Our overall development team is medium-sized (20-30 developers)&lt;br /&gt;- Our offshore team represents less than half of that size&lt;br /&gt;- Members of the offshore team are generally very solid and competent engineers; but&lt;br /&gt;. They're on average 5 years more junior that the SF folks&lt;br /&gt;. They have 6 to 18 months tenure with us, when the majority of the SF folks have been working with the product for over 5 years&lt;br /&gt;&lt;br /&gt;When talking about differences in productivity, I'm therefore NOT referring to a potential difference due to one of the team being intrinsically less competent or talented than the other; but differences related to experience, background, and distance.&lt;br /&gt;&lt;br /&gt;When I have to explain it in less than 10 seconds I usually say that because of the overhead created by the distance as well as the difference in seniority and tenure, we're typically able to get 90+% productivity (compared to the SF team) on 1/3rd of our projects.&lt;br /&gt;For the remaining projects, the overhead is typically so important that it doesn't make any sense to engage on the project at all if it has to be done offshore.&lt;br /&gt;&lt;br /&gt;So far, I've identified 3 major factors that affect offshore productivity:&lt;br /&gt;&lt;br /&gt;1. &lt;strong&gt;Technical competence &lt;/strong&gt;- meaning abilities, skills, and experience. In my situation, we're mostly affected by the difference in experience. In other cases, you might be affected as well by engineering abilities, meaning having the offshore team not being "as good" as your local engineering team.&lt;br /&gt;The difference in technical competence can be modeled as a percentage of productivity of your local team.&lt;br /&gt;&lt;br /&gt;2. &lt;strong&gt;Distance &lt;/strong&gt;- no matter what you do, you will get some overhead related to distance: communication is more challenging when engineers cannot just walk to the next cube to discuss an issue or validate a solution.&lt;br /&gt;The best way I've found to mitigate this is&lt;br /&gt;a. To have the offshore team work on their own set of projects – i.e. minimize the amount of cross-continent communication by allowing the offshore team to work on the same issues and resolve them internally&lt;br /&gt;b. To have an engineer on the local team being dedicated to be the point of contact for the offshore team. This helps understanding where they stand, what their progress and challenges are, and channel and follow-up on communications between the 2 teams&lt;br /&gt;c. To have proper communication solutions in place such as conference calling and/or video conferencing, instant messaging, servers for file transfers, and the like&lt;br /&gt;d. To have regular checkpoint meetings (at least twice a week) with the remote team&lt;br /&gt;&lt;br /&gt;While you can very significantly reduce the distance overhead, some will remain.&lt;br /&gt;This can also be modeled as a percentage of productivity of your local team.&lt;br /&gt;&lt;br /&gt;3. &lt;strong&gt;Nature of work&lt;/strong&gt;. This is where it gets tricky. There are a number of components that make the nature of the job more or less appropriate to do offshore.&lt;br /&gt;This includes factors such as&lt;br /&gt;. Amount of background info required to do the job. - e.g. Rewriting some SQL code for performance would require close to no new context for a qualified developer to do the job. Conversely, writing a new piece of functionality at the core of your business domain, and using some proprietary framework, would require some significant ramp-up effort as well as ongoing knowledge transfer.&lt;br /&gt;. Amount of iterations required or expected - how much design reviews and other cross-team validations are going to be required&lt;br /&gt;. Size of the job (i.e. small vs. large projects) - this might greatly affect the above factors; e.g. a significant training/ramp-up effort might be more appropriate on a large project&lt;br /&gt;&lt;br /&gt;Ultimately, the nature of the work might require both a fixed-cost increment of effort to start the job, as well as an ongoing increment of effort, that could also be modeled as a percentage of your baseline productivity.&lt;br /&gt;&lt;br /&gt;To sum it up; if we had to model the above, it would give something like&lt;br /&gt;&lt;br /&gt;Offshore Effort = (Baseline Effort x Skill Percentage Adjustment x Communication Percent Adjustment x Nature of Work Percent Adjustment) + Nature of Work Fixed Cost Adjustment&lt;br /&gt;&lt;br /&gt;That's probably a little over-the-top for managing day-to-day R&amp;amp;D with an offshore team; but it helps understanding the challenges.&lt;br /&gt;This is one of these cases where modeling is more interesting than the model.&lt;br /&gt;&lt;br /&gt;The most interesting part of this is that the productivity of offshore development efforts can vary widely based on these –and potentially other- factors.&lt;br /&gt;&lt;br /&gt;What this also says is that offshore development initiatives are bound to be unsuccessful if the distribution and execution of work is not properly thought out.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/6961231965715610299/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=6961231965715610299" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/6961231965715610299?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/6961231965715610299?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/03/modeling-development-capacity-in.html" title="Modeling development capacity in offshore teams" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;D0UDSXY_fSp7ImA9WxZRFEw.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-5527978067969472932</id><published>2008-02-07T12:18:00.000-08:00</published><updated>2008-02-07T12:14:38.845-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-02-07T12:14:38.845-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Management Styles - Beyond X and Y</title><content type="html">I was mentioning in &lt;a href="http://softwaresurvival.blogspot.com/2008/01/management-styles-mbo-x-and-y.html"&gt;my last post&lt;/a&gt; 2 widespread -and related- management theories: MBO on one hand, and Theory X / Theory Y on the other.&lt;br /&gt;&lt;br /&gt;Both theories are quite general and high level.&lt;br /&gt;They're both deeply rooted in assumptions about what motivate people.&lt;br /&gt;Theory X, which is authoritarian and directive, assumes people on the job are primarily motivated by money, fear, and/or the need for protection.&lt;br /&gt;On the other hand, MBO as well as Theory Y, are centered on fostering a collaborative environment based on trust, commitment and reciprocity where the focus is on end-goals and results.&lt;br /&gt;MBO/Theory Y assume that people on the job are primarily motivated by self-development and the search for personal achievement.&lt;br /&gt;&lt;br /&gt;A number of additional management theories exist.&lt;br /&gt;Some of them are bringing fresh perspectives both in terms of styles and methodology, while at the same time providing different spins on underlying motivational assumptions.&lt;br /&gt;These ultimately give us more keys, tools, and options to do better jobs and bring the best out of our teams.&lt;br /&gt;There are 2 of these I was familiar with -&lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolky's&lt;/a&gt; as well as &lt;a href="http://www.kenblanchard.com/about/bios/ken_blanchard/"&gt;Ken Blanchard's&lt;/a&gt;-.&lt;br /&gt;I also took a look at &lt;a href="http://en.wikipedia.org/wiki/Management_styles"&gt;Wikipedia's entry on Management Styles&lt;/a&gt;.&lt;br /&gt;Here is a rundown.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Management_styles"&gt;Wikipedia's entry&lt;/a&gt; lists 4 styles:&lt;br /&gt;- autocratic; where the leader makes all the decisions and drives them down the organization - the closest thing to Theory X&lt;br /&gt;- paternalistic; where the leader also makes all the decision, but is more concerned about the well-being of employees - a softer variation on Theory X&lt;br /&gt;- democratic; where decisions are made collectively - probably the closest thing to Theory Y; for as long as you understand that corporations' primary goal is not the well being of their employees, and as such are not meant to be democratic organizations&lt;br /&gt;- and laissez-faire; where decisions are not made in a concerted effort - and which is probably Theory Y applied with no drive; or simply the absence of Management.&lt;br /&gt;This nomenclature is interesting because it relates management styles to a form of political government.&lt;br /&gt;Beyond the fact that, in my view, governments and corporations should have radically different goals [the protection and well being of their citizen on one hand vs. making a profit on the other], I can see a couple of limitations here:&lt;br /&gt;The first one is that most of us put a judgment value on each of these forms of government -from unacceptable to desirable- with democracy being the only mature or reasonable system for the vast majority of us.&lt;br /&gt;The second limitation is that these form of management -and the way they're described- seem to be primarily a by-product of the personality traits of the person in charge. The type of work at hand as well as the attributes of the team being managed -size, skill level, or seniority- seem irrelevant to the choice or application of these styles; when in fact they should be key drivers.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.joelonsoftware.com/"&gt;Joel Spolsky&lt;/a&gt; has his own -very original- way of describing 3 distinct Management styles.&lt;br /&gt;. &lt;a href="http://www.joelonsoftware.com/items/2006/08/09.html"&gt;Econ 101 Management&lt;/a&gt; - this style is assuming that behaviors and performance can be driven by the prospect of financial rewards; and therefore assumes that the main motivation for people to work is money.&lt;br /&gt;It uses compensation mechanisms as the main leverage to get things done; and ignores other motivating factors.&lt;br /&gt;As pointed out by Spolsky, this style is both expensive and inefficient.&lt;br /&gt;&lt;br /&gt;. &lt;a href="http://www.joelonsoftware.com/items/2006/08/08.html"&gt;Command and Control&lt;/a&gt; - this style consists in applying general infantry military methods in the workplace.&lt;br /&gt;It is relying on imposed authority; and is based on the assumption that the subjects are ultimately motivated by fear, or a deep sense of duty.&lt;br /&gt;If you want to play Drill Sergeant on a team of developers, you'll notice that it's quite inefficient and you'll probably soon end up on your own.&lt;br /&gt;[While on the topic; I should mention that in a number of elite defense organizations, where members are highly trained and skilled, the management style can actually get quite sophisticated - see the book from David H. Friedman, &lt;span style="font-style: italic;"&gt;Corps Business&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;Spolsky' preferred management strategy is what he calls the &lt;a href="http://www.joelonsoftware.com/items/2006/08/10.html"&gt;Identity Management Method&lt;/a&gt; - it consists in encouraging people to identify with the organization, and implicitly assumes they will be primarily  motivated by the need for &lt;a href="http://softwaresurvival.blogspot.com/2006/10/what-makes-people-tick-motivation_24.html"&gt;Group Belonging&lt;/a&gt;.&lt;br /&gt;Team building exercises as well as treating people with genuine care are critical as this strategy heavily relies on reciprocity to foster performance and loyalty.&lt;br /&gt;&lt;br /&gt;The identity management method is a great approach that is virtuous and efficient when applied to development teams and other knowledge workers.&lt;br /&gt;The only limitation that could be objected is that it is somewhat uni-dimensional - it doesn't tell me if and how I should vary my management style between junior and senior developers, or how to deal with an upbeat team after an IPO vs. a depressed and disgruntled team going through multiple rounds of layoffs.&lt;br /&gt;&lt;br /&gt;To be most efficient, management styles should not only be applied at the overall level of a team, but should also vary based on general circumstances and individual situations.&lt;br /&gt;&lt;br /&gt;I've found the most interesting bit on this from management seminars' &lt;a href="http://www.kenblanchard.com/about/bios/ken_blanchard/"&gt;Ken Blanchard&lt;/a&gt;&lt;br /&gt;The method, called &lt;a href="http://www.wpsmag.com/content/templates/wps_article.asp?articleid=300&amp;amp;zoneid=31"&gt;one-on-one leadership&lt;/a&gt;, consists in identifying where each individual stands in terms of&lt;br /&gt;1. Competence - i.e. knowledge, skills, experience and capabilities; and&lt;br /&gt;2. Motivation - i.e. determination, confidence, and commitment&lt;br /&gt;Blanchard posits that management style needs to be adjusted considerably based on these 2 variables.&lt;br /&gt;More specifically, they need to be adjusted in terms of the amount of direction as well as support being given:&lt;br /&gt;Adjusting direction consists in providing different levels of granularity when stating objectives and giving instructions. A "low competence" individual typically needs a high degree of direction, with a clear and detailed description of what and how things need to be done. Conversely, a superstar developer would only need measurable goals with a description of the desired outcome and underlying intent -providing specific instructions, such as mingling into her code and telling her how to use such or such language feature, would instead be counter-productive.&lt;br /&gt;&lt;br /&gt;Management Support consists in the degree of encouragement and validation that is given to an individual.&lt;br /&gt;There again, this should vary significantly based on the level of motivation of the individual: an ecstatic new-comer might need to be paced, a developer going through the challenges of learning and growing needs a lot of encouragement and feedback; and our superstar developer might not need anything but a soft reinforcement of how much she is valued and appreciated.&lt;br /&gt;&lt;br /&gt;To take it further, good management style should not only factor levels of competence and motivation, but also &lt;a href="http://softwaresurvival.blogspot.com/2007/05/what-makes-people-tick-10-motivation.html"&gt;what specifically motivates each individual&lt;/a&gt; what they like, do best, and aspire to do better or grow into.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/5527978067969472932/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=5527978067969472932" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/5527978067969472932?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/5527978067969472932?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/02/management-styles-beyond-x-and-y.html" title="Management Styles - Beyond X and Y" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;CE4HQHgzeyp7ImA9WxZTEkU.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-737753399855620659</id><published>2008-01-13T19:38:00.000-08:00</published><updated>2008-01-13T19:55:31.683-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-01-13T19:55:31.683-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Management Styles - MBO, X, and Y</title><content type="html">[&lt;em&gt;Ed Note:&lt;br /&gt;1. Apologies to my regular readers for not having posted in so long - I got sidetracked... should be back to a 2 to 4 weeks schedule&lt;br /&gt;2. The email subscription has been fixed - you can now use the feedburner email widget on the right to get notified whenever a new post is published&lt;/em&gt;]&lt;br /&gt;&lt;br /&gt;Shortly after being promoted a manager, someone asked me which management style I was using.&lt;br /&gt;I did find the question a little odd for, at that time, there didn't seem to be many choices in "style" given the field and the environment - technical, volatile, and with most people hating the idea of being "managed".&lt;br /&gt;There are in fact quite a few approaches to managing technical teams; and understanding them is a good step in becoming a better manager.&lt;br /&gt;Here is a tentative rundown:&lt;br /&gt;&lt;br /&gt;One of the most known style of management is &lt;a href="http://en.wikipedia.org/wiki/Management_by_objectives"&gt;Management By Objective&lt;/a&gt; (MBO).&lt;br /&gt;Popularized by &lt;a href="http://en.wikipedia.org/wiki/Peter_Drucker"&gt;Peter Drucker&lt;/a&gt; in the late '50s, its key concept consists in getting buy-in from employees on defined objectives and specific tasks, and asking them when they'll be able to complete their assigned tasks.&lt;br /&gt;Commitment is here essential, as the method relies on:&lt;br /&gt;1. the assumption that the contributor knows better about the task at hand than their managers&lt;br /&gt;2. Once a commitment is made, the contributor will make every effort to deliver on her promise -see the concept of &lt;a href="http://en.wikipedia.org/wiki/Cognitive_dissonance"&gt;cognitive dissonance&lt;/a&gt; for a deeper explanation-&lt;br /&gt;&lt;br /&gt;MBO was somewhat of a revolutionary concept at the time, for it was in stark contrast with the generally accepted idea that managers should get results by either knowing more about the job than the people they managed or by having the ability to coerce subordinates into doing things -Management By Intimidation if you will-.&lt;br /&gt;These two approaches are completely irrelevant in the tech field where, if your team members are indeed solid contributors, they'll know more about their jobs than you do; and if you try to "intimidate" them they'll eventually raise their finger -not the one you want- and find a job elsewhere.&lt;br /&gt;&lt;br /&gt;Another spin on MBO is &lt;a href="http://en.wikipedia.org/wiki/Theory_X_and_theory_Y"&gt;Theory X vs. Theory Y&lt;/a&gt;, established in the '60s by Douglas Mc Gregor.&lt;br /&gt;Applying theory X consists in managing people by putting emphasis on controlling -meaning not trusting and instead directing and measuring.&lt;br /&gt;Theory Y on the other hand relies on empowering employees and giving them proper level of ownership to get their job done - which is very close with Drucker's MBO.&lt;br /&gt;&lt;br /&gt;The key to both theories, and when they would be relevant and effective, lies in what motivates employees in their lives and on the job.&lt;br /&gt;More specifically, theories X and Y are deeply rooted in the &lt;a href="http://softwaresurvival.blogspot.com/2006/10/what-makes-people-tick-motivation_24.html"&gt;Maslow Pyramid of needs&lt;/a&gt;:&lt;br /&gt;Theory X can only be appropriate for jobs that only satisfy the lower levels of the pyramid -i.e. "hygiene" needs / jobs that pay the rent.&lt;br /&gt;Theory Y is conversely only relevant in environments where the higher levels of the pyramid (need for group belonging and "self-actualization") can be satisfied:&lt;br /&gt;The need for group belonging makes it compelling for a contributor to deliver on her commitment to her peers, and not let her team down.&lt;br /&gt;The need for self-actualization drives people to learn new technologies, apply new skills, and try to improve their performance.&lt;br /&gt;&lt;br /&gt;In my next post, I'll go over a couple more theories on Management styles.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/737753399855620659/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=737753399855620659" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/737753399855620659?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/737753399855620659?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2008/01/management-styles-mbo-x-and-y.html" title="Management Styles - MBO, X, and Y" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;AkAGQnc5fyp7ImA9WB9XE08.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-7738627810601903762</id><published>2007-11-05T21:31:00.000-08:00</published><updated>2007-11-05T21:58:43.927-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-11-05T21:58:43.927-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Lumberjacks, hackers, scientists, and engineers</title><content type="html">I was rambling in my previous post about 2 types of developers you might think you want on your team but you really don't.&lt;br /&gt;Conversely, there are a number of profiles that are great assets to any team.&lt;br /&gt;&lt;br /&gt;Developer's types is a larger question that has been addressed in a number of ways:&lt;br /&gt;The &lt;a href="http://en.wikipedia.org/wiki/MBTI"&gt;Myers-Briggs Type Indicator&lt;/a&gt; (MBTI) is probably the most accepted way to categorize people and interpret behaviors. This is a great tool to better "read" people, understand what they might enjoy or dislike, and where they might excel.&lt;br /&gt;&lt;br /&gt;In the Psychology of Computer Programming, &lt;a href="http://www.geraldmweinberg.com/"&gt;Gerald Weinberg&lt;/a&gt; describes a number of personality traits required for being a great programmer:&lt;br /&gt;- ability to tolerate stressful situations&lt;br /&gt;- adaptability to rapid change&lt;br /&gt;- neatness&lt;br /&gt;- humility&lt;br /&gt;- assertiveness&lt;br /&gt;- sense of humor&lt;br /&gt;These are all good attributes to look for when recruiting, or to develop for oneself.&lt;br /&gt;&lt;br /&gt;In Managing Technical People &lt;a href="http://www.sei.cmu.edu/tsp/watts-bio.html"&gt;Watts Humphrey&lt;/a&gt; makes a couple of distinctions among developer types:&lt;br /&gt;- locals vs. cosmopolitans (grossly oversimplified: commitment to employer vs. technology or personal development)&lt;br /&gt;- scientists vs. engineers (I'll talk about these in a bit)&lt;br /&gt;&lt;br /&gt;The distinction between scientists and engineers is a great one.&lt;br /&gt;Looking at the folks I have worked with, I see 2 additional profiles that are great assets to a team: lumberjacks and hackers.&lt;br /&gt;&lt;br /&gt;Here is a shot at describing these 4 profiles:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Lumberjacks &lt;/strong&gt;enjoy getting things done, and doing it well.&lt;br /&gt;Lumberjacks are not necessarily great at learning, trouble-shooting, designing, or problem-solving but they're great at executing - often on a fairly established path.&lt;br /&gt;There are a lot of people who do enjoy marking things done, so to be clear, if being done is the name of the game, we're only interested in those who mark things done when they're truly done and done properly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Scientists &lt;/strong&gt;enjoy learning, discovering, and inventing.&lt;br /&gt;They enjoy finding order and simplicity from chaos and complexity; or in Humphrey's words "Scientists strive for knowledge and personal meaning. They see themselves as discoverers searching for hidden order and simplicity"&lt;br /&gt;Scientists can appreciate the aesthetics of a solution - often more than the practical application of it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Hackers &lt;/strong&gt;enjoy getting problems fixed.&lt;br /&gt;Aesthetics of a solution is typically secondary to end result, and any mean is valid to reach the end.&lt;br /&gt;Hackers are typically great at learning and problem-solving but do not put as much emphasis on structure and meaning as scientists do – which can result in messy solutions if some discipline is not enforced.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Engineers &lt;/strong&gt;enjoy building solutions and "seek to create their own monuments" (Humphrey).&lt;br /&gt;The emphasis here is on structure and outcome, as opposed to the method or approach (as might be the case for scientists).&lt;br /&gt;There is not necessarily a craving for learning new things, excelling at trouble-shouting, or for elaborating sophisticated solutions, but these qualities are important to make a great engineer.&lt;br /&gt;&lt;br /&gt;So which one is best?&lt;br /&gt;In a very small team (3 developers or less) versatility is key, and "engineers" tend to make things more efficient and predictable.&lt;br /&gt;In larger teams, the mix and balance of these types is probably the greatest asset to an organization.&lt;br /&gt;In fact, the challenge for recruiting managers is to make sure that not everyone is formatted along the same mold.&lt;br /&gt;Diversity is what makes an ecosystem strive.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/7738627810601903762/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=7738627810601903762" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/7738627810601903762?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/7738627810601903762?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/11/lumberjacks-hackers-scientists-and.html" title="Lumberjacks, hackers, scientists, and engineers" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;A0YHQnc4fCp7ImA9WB9RFE8.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-5732381264231859209</id><published>2007-10-14T23:27:00.000-07:00</published><updated>2007-10-14T23:18:53.934-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-10-14T23:18:53.934-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>I have a java certification and I'm not afraid to use it</title><content type="html">Every now and then, my team and I embark into a large-scale recruiting effort in order to bring in a few good developers.&lt;br /&gt;The effort is only "large scale" in the context of the size of the current team, the deliverables we're working on, and the fact that the market is hot right now for tech folks - which means it's tough when you're on the recruiting side.&lt;br /&gt;At any rate, I believe we ended-up interviewing over 100 candidates.&lt;br /&gt;Our requirements are simple:&lt;br /&gt;1. can code&lt;br /&gt;2. can solve problems&lt;br /&gt;3. not a jerk&lt;br /&gt;&lt;br /&gt;I've outlined in a previous post &lt;a href="http://softwaresurvival.blogspot.com/2007/06/4-guidelines-on-recruiting-developers.html"&gt;some guidelines for recruiting developers&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Folks who just don't have the right skill-set or experience are typically easy to identify.&lt;br /&gt;&lt;br /&gt;There are however 2 types of candidates that can be particularly deceiving and -I hate to say it- you do not want on your team.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;I have a java certification and I'm not afraid to use it &lt;/strong&gt;&lt;br /&gt;In retrospect, the thing that stroked me most on this recruiting round was the number of candidates who knew programming syntax and libraries by heart, and quickly jumped into coding solutions; only to produce a massive amount of code that didn't solve anything.&lt;br /&gt;The embodiment of maintenance nightmare.&lt;br /&gt;They're the "I have a java certification and I'm not afraid to use it" class.&lt;br /&gt;As the name implies, these candidates typically have one -or even a few- certifications.&lt;br /&gt;Certifications were great back in the 90s. They did give you an edge, and the folks who were carrying them were typically in the top percentile.&lt;br /&gt;Nowadays, certifications are the easiest way for anyone who has some good memory capabilities to get into the programming field.&lt;br /&gt;The problem is that programming is about solving problems.&lt;br /&gt;Not pissing code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Chatterboxes &lt;/strong&gt;&lt;br /&gt;The second type of candidate you need to be watching for is the "chatterbox".&lt;br /&gt;Chatterboxes are very articulate, and often very educated.&lt;br /&gt;They can talk in great details about what they worked on; and it sounds really great.&lt;br /&gt;Complex problems; brilliant solutions.&lt;br /&gt;If your interview process is properly setup - you then move into the programming / problem-solving part of the interview, and then nothing much happens.&lt;br /&gt;You may be puzzled at the end of your interview round - the candidate made a great first impression.&lt;br /&gt;Don't be.&lt;br /&gt;When there is a doubt, there is no doubt.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/5732381264231859209/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=5732381264231859209" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/5732381264231859209?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/5732381264231859209?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/10/i-have-java-certification-and-im-not.html" title="I have a java certification and I'm not afraid to use it" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;C0cCQ3YzfCp7ImA9WB9TGU4.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-251244509371662021</id><published>2007-09-23T23:31:00.000-07:00</published><updated>2007-09-27T15:11:02.884-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-09-27T15:11:02.884-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="adoption" /><title>The evolution of Web Services - Darwinism</title><content type="html">There are a couple of largely accepted theories that model or predict technology lifecycle and adoption patterns:&lt;br /&gt;- The &lt;a href="http://en.wikipedia.org/wiki/Diffusion_of_innovations"&gt;Diffusion of Innovations&lt;/a&gt; theory offers a model for how a given technology gets accepted and spreads through markets. Its central point is that technologies spread by gradually addressing the needs of 4 types of users: innovators, early adopters, the early majority, and the late majority (a fifth category, the laggards, might just never get it)&lt;br /&gt;&lt;br /&gt;- The &lt;a href="http://en.wikipedia.org/wiki/Technology_acceptance_model"&gt;Technology Acceptance Model&lt;/a&gt; (TAM) offers some prediction to End User adoption. The key concept here is that individual users adopt a given technology based on its perceived usefulness and its perceived ease of use.&lt;br /&gt;&lt;br /&gt;To my knowledge, there isn't an established theory or framework that models evolution trends of Technologies.&lt;br /&gt;When looking at the &lt;a href="http://softwaresurvival.blogspot.com/2007/08/evolution-of-web-services.html"&gt;history and evolution of web services&lt;/a&gt;, we seem to be in front of species that are spreading, adapting, and diverging much like &lt;a href="http://en.wikipedia.org/wiki/Darwin"&gt;finches in the Galapagos&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The immediate thought that then comes to mind is whether Darwin's &lt;a href="http://en.wikipedia.org/wiki/Evolution"&gt;Theory of Evolution&lt;/a&gt; has some or any relevance to Technology.&lt;br /&gt;&lt;br /&gt;The theory of evolution defines three basic mechanisms of evolutionary change:&lt;br /&gt;. Natural Selection is a process by which traits that are more useful in a given environment become more common over time (because they give better chances of survival), while traits that are harmful become rarer&lt;br /&gt;. Gene Flow is the exchange of genes within and between populations, which translates in traits being transferred between populations and species.&lt;br /&gt;. Genetic Drift is a purely random shift of the frequency of traits within a population - traits become more or less common in a population because of the long-term statistical effect of the random distribution of genes in each generation&lt;br /&gt;&lt;br /&gt;How could these mechanisms apply to technology?&lt;br /&gt;&lt;br /&gt;- Natural Selection is probably the mechanism most relevant to technology trending.&lt;br /&gt;The fitter a technology is to the needs of its market, the more likely it is to stick around, and potentially supersede other technologies&lt;br /&gt;This is why PCs are more likely to be found today than mainframes, why java is more often used than Fortran, and why &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;soap-based&lt;/a&gt; web services have replaced &lt;a href="http://en.wikipedia.org/wiki/XML-RPC"&gt;xml-rpc&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;- Gene Flow is also common in the tech field (although we'd probably want to call it something else).&lt;br /&gt;Features and concepts are constantly exchanged between complementary or competing technologies.&lt;br /&gt;That's how C# got a memory &lt;a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29"&gt;garbage collection&lt;/a&gt; mechanism similar to the one in java, and how row-level locking made it in MS SQL Server after years of Oracle claiming it as a key differentiator.&lt;br /&gt;Gene flow is also at the root of hybridization, where traits of different species end-up being combined. This is what might be truly going on right now with &lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt; - which is applying concepts of simpler web protocols, most notably HTTP and RSS, onto Web Services.&lt;br /&gt;&lt;br /&gt;- Genetic Drift seems at first least relevant to the tech field, but might in fact be the most interesting bit.&lt;br /&gt;The core concept in genetic drift is that the random distribution of genes in each generation can have a long-term effect on the frequency of traits in a population (because of the statistical &lt;a href="http://en.wikipedia.org/wiki/Law_of_large_numbers"&gt;law of large numbers&lt;/a&gt;, genetic drift is less likely to occur in large population than in smaller ones).&lt;br /&gt;What, if anything, could have a similar impact in the evolution of technologies? What type of mechanisms, if any, can have an effect on the evolution and adoption of a technology, without being connected to its intrinsic fit or value?&lt;br /&gt;Obviously there are a lot more forces that dictate the success or demise of technologies than just their core virtues.&lt;br /&gt;A strategic alliance with IBM propelled MS-DOS into market dominance; technology companies like Oracle spend millions trying to influence the market; and there is a whole ecosystem of media, analysts, and venture capitalists who strive on generating buzz (&lt;a href="http://en.wikipedia.org/wiki/PointCast_%28dotcom%29"&gt;PointCast&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Twitter"&gt;Twitter&lt;/a&gt; come to mind).&lt;br /&gt;&lt;br /&gt;Who knows - if &lt;a href="http://en.wikipedia.org/wiki/Lisp_%28programming_language%29"&gt;LISP&lt;/a&gt; had been able to be more hip, we might all be using more parenthesis today.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/251244509371662021/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=251244509371662021" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/251244509371662021?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/251244509371662021?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/09/evolution-of-web-services-darwinism.html" title="The evolution of Web Services - Darwinism" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;CUQGR3kzfCp7ImA9WB5bE0s.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-7991545117360645465</id><published>2007-08-28T21:55:00.000-07:00</published><updated>2007-08-28T21:55:26.784-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-28T21:55:26.784-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><category scheme="http://www.blogger.com/atom/ns#" term="adoption" /><title>The evolution of Web Services - Measuring Trends</title><content type="html">In my &lt;a href="http://softwaresurvival.blogspot.com/2007/08/evolution-of-web-services.html"&gt;last post&lt;/a&gt;, I've tried to summarize a history of web services; the most recent developments being around RPC-style vs. Document style SOAP-based web services, as well as SOAP-based web services vs. RESTful web services.&lt;br /&gt;I'd like here to try quantifying how each of these trends is progressing - the larger question being about finding efficient ways to measure the evolution and adoption of technologies.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Measuring trends&lt;/span&gt;&lt;br /&gt;There are a number of heavy-duty tools for measuring technology adoption; the most obvious one is probably to poll organizations that might adopt them.&lt;br /&gt;This is quite involved, can be expensive, and is not necessarily reliable.&lt;br /&gt;Other -more or less reliable- tools include assembling expert panels, gathering feedback from your clients, discussing with analysts, reviewing book sales, or trusting your own gutfeel.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Web publication volume and search trends&lt;/span&gt;&lt;br /&gt;Google is another tool that might be effective - not to find information, but to measure adoption levels and trends.&lt;br /&gt;The main advantage is that it's simple and cheap to use.&lt;br /&gt;The first step consists in identifying keywords relevant to the trends you're looking at and want to compare - in the case of web services, that might be "xml rpc", "soap web services", and "rest web services".&lt;br /&gt;Once keywords are identified, a simple query on Google tells us how many documents are found - the number is approximate and is actually more or less reflecting the number of indexed documents that were deemed appropriate, but it should give a good order of magnitude of the volume of information out there.&lt;br /&gt;Separately, &lt;a href="http://www.google.com/trends"&gt;Google Trends&lt;/a&gt; tells us the history of search volume on these keywords, i.e. how many searches were executed on these keywords over time.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Web Services publication volume:&lt;/span&gt;&lt;br /&gt;3.7 million documents are retrieved for "xml rpc", 28 million for "soap web services", and 133 million for "rest web services".&lt;br /&gt;If we assume that these terms are equally reflective of the amount of publication on the Web for their associated technologies (and that's a bold assumption); what this means is that rest is leading soap - at least in terms of publications and discussions on the web- and that xml rpc is marginal compared to REST or SOAP based web services.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Search frequency:&lt;/span&gt;&lt;br /&gt;Here is the compared search frequency graph returned on the 3 sets of keywords:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_cV_Oz_f4rys/RtTTUVpuHLI/AAAAAAAAABc/btdMh0pXcxI/s1600-h/webServicesTrends.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5103936624080592050" style="CURSOR: pointer" alt="" src="http://bp1.blogger.com/_cV_Oz_f4rys/RtTTUVpuHLI/AAAAAAAAABc/btdMh0pXcxI/s400/webServicesTrends.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It's important to remember here as well that we're making another major assumption in terms of accuracy of these results - which is challenged by the major blips we're seeing on the graph.&lt;br /&gt;&lt;br /&gt;What this seems to say is that there is still interest in xml rpc, that soap web services are still going strong, but that there isn't enough search history and/or volume on REST web services to show any data.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Innovators, early adopters, and mainstream users:&lt;/span&gt;&lt;br /&gt;The combined results seem to indicate that xml rpc is still being used but is on the decline, and that SOAP based web services are alive and well.&lt;br /&gt;The more interesting bit is that there is a huge volume of content out there on REST web services but few actual people looking for that information - especially in comparison to the ratio of content vs. search volume on soap based web services.&lt;br /&gt;&lt;br /&gt;Other than challenging the use of Google for measuring trends altogether - one interpretation is that REST web services are indeed not mainstream at this point, but they are generating a lot of buzz.&lt;br /&gt;Innovators and early adopters are the most content-prolific type of contributors on the Net, and by virtue of being a hot topic, a lot of content is generated and discussions are occurring over REST on the Web.&lt;br /&gt;Separately, because the technology is not fully embraced by the Masses, little search volume is generated compared to soap-based web services.&lt;br /&gt;&lt;br /&gt;This is in line with the theory of diffusion of innovation, which I'll try to summarize in my next post along with other theories of adoption, before taking a shot at looking at the relevance of the Theory of Evolution applied to Technology.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/7991545117360645465/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=7991545117360645465" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/7991545117360645465?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/7991545117360645465?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/08/evolution-of-web-services-measuring.html" title="The evolution of Web Services - Measuring Trends" /><author><name>DavidT</name><email>noreply@blogger.com</email></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://bp1.blogger.com/_cV_Oz_f4rys/RtTTUVpuHLI/AAAAAAAAABc/btdMh0pXcxI/s72-c/webServicesTrends.jpg" height="72" width="72" /></entry><entry gd:etag="W/&quot;DUUHSH45eip7ImA9WB5UEU0.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-441525495669019047</id><published>2007-08-14T09:00:00.000-07:00</published><updated>2007-08-14T09:00:39.022-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-08-14T09:00:39.022-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>The evolution of Web Services</title><content type="html">&lt;div&gt;There are a lot of changes going on right now in the area of Web Services technologies.&lt;br /&gt;The transition from RPC to document style, and the recent buzz around REST, raise the question as to what the technology is evolving into, why, and along which patterns - if any.&lt;br /&gt;&lt;br /&gt;I'll try here to do a recap on the history of web services.&lt;br /&gt;In my next posts I'll try to take a look at the trends and review them against existing technology diffusion, acceptance, and evolution models.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;A short history of web services&lt;/strong&gt;&lt;br /&gt;Distributed computing and interoperability is nothing new and the origins of web services should probably include efforts by &lt;a href="http://en.wikipedia.org/wiki/Defense_Advanced_Research_Projects_Agency"&gt;DARPA&lt;/a&gt; to interconnect distributed computers.&lt;br /&gt;In the enterprise world, flat file exchange via shared directories was a popular technique for exchanging information between different systems.&lt;br /&gt;In the banking world, &lt;a href="http://en.wikipedia.org/wiki/Society_for_Worldwide_Interbank_Financial_Telecommunication"&gt;SWIFT&lt;/a&gt; -a private financial messaging network established in the '70s, with its own protocol and message format- is still a very much established standard.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Serializing the object model - CORBA, RMI, and DCOM&lt;br /&gt;&lt;/strong&gt;In the late '90s, a number of technologies allowing remote procedure calls (&lt;a href="http://en.wikipedia.org/wiki/Remote_procedure_call"&gt;RPC&lt;/a&gt;) from one system to another became popular:&lt;br /&gt;. &lt;a href="http://en.wikipedia.org/wiki/CORBA"&gt;CORBA&lt;/a&gt; allowed distributed software components to collaborate with a language and platform-neutral remote procedure call specification.&lt;br /&gt;. &lt;a href="http://en.wikipedia.org/wiki/Java_remote_method_invocation"&gt;RMI&lt;/a&gt; was essentially offering something similar, except it was entirely java based. As such it was somewhat easier to implement (at least for java programmers) but was also restricted to interoperability between java programs.&lt;br /&gt;. On the Microsoft side, &lt;a href="http://en.wikipedia.org/wiki/Distributed_Component_Object_Model"&gt;DCOM&lt;/a&gt; allowed native Windows programs to interact.&lt;br /&gt;&lt;br /&gt;All of these competing standards had at least a couple major limitations:&lt;br /&gt;1. They were restricted in terms of platforms they could interoperate with&lt;br /&gt;2. It was a major challenge to have them work securely over Internet firewalls.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;XML-RPC &lt;/strong&gt;&lt;br /&gt;The momentum java was gaining at that time, and its main value proposition to run anywhere, seemed to have prompted Microsoft to come up with a cross-platform interoperability standard, which could potentially help them get out of the corner they were slowly being pushed into.&lt;br /&gt;In 1998, &lt;a href="http://en.wikipedia.org/wiki/XML-RPC"&gt;XML-RPC&lt;/a&gt; was advocated by Microsoft as a truly open technology leveraging the web infrastructure.&lt;br /&gt;XML-RPC is essentially a remote procedure call protocol which uses XML format to encode its calls, and HTTP as a transport mechanism.&lt;br /&gt;XML-RPC is a very simple protocol, defining only a handful of data types and commands - and this simplicity made it quite popular across major platforms.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SOAP&lt;/strong&gt;&lt;br /&gt;The XML-RPC standard quickly evolved into the more elaborate &lt;a href="http://en.wikipedia.org/wiki/SOAP"&gt;SOAP&lt;/a&gt; specification.&lt;br /&gt;SOAP is a natural extension of XML-RPC that provides a greater level of structure and support for data types and operations semantic.&lt;br /&gt;&lt;br /&gt;During the same timeframe, the need arose to provide more automation around message parsing, code generation, and discovery of web services over the network.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/WSDL"&gt;WSDL&lt;/a&gt; became the standard for defining web services interfaces; and &lt;a href="http://en.wikipedia.org/wiki/UDDI"&gt;UDDI&lt;/a&gt; became the standard for registering and finding web services on the Web.&lt;br /&gt;There is today a considerable amount of tooling available for generating web services interfaces (i.e. WSDL) based on existing classes and interfaces, or for generating client libraries based on a WSDL.&lt;br /&gt;&lt;br /&gt;Together, SOAP, WSDL, and UDDI form what is commonly referred as Web Services.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;From RPC-style to Document-style &lt;/strong&gt;&lt;br /&gt;As Web Services usage gained momentum, a gradual transition occurred from RPC-style to Document-style.&lt;br /&gt;In the RPC pattern, a client sends a request to a server, and the server immediately sends a response back to the client.&lt;br /&gt;The RPC model is similar to existing programming models, and RPC-style Web Services are often implemented by simply generating services interfaces that map directly to existing language-specific function or method calls.&lt;br /&gt;A major issue with this approach is the stability of the object model that these interfaces are based on: as classes’ attributes and operations change throughout their lifecycle, corresponding web service interfaces need to be re-generated accordingly, resulting in brittle and complex interfaces. A better approach is to provide a layer of abstraction by first defining the interface - a.k.a. &lt;a href="http://en.wikipedia.org/wiki/Facade_pattern"&gt;Façade&lt;/a&gt;.&lt;br /&gt;Another issue is that the RPC-style inherently requires synchronous processing – The RPC-style mandates the client end-point to be expecting the remote procedure call to return from the server-side.&lt;br /&gt;&lt;br /&gt;Document-style Web Services offer a more radical alternative by putting the emphasis on publishing a schema, and exchanging messages, rather than on defining a rigid set of operations.&lt;br /&gt;The Document-style approach is also known as the messaging model, or the SOA style (although the later term is overly abused, as can be seen on its &lt;a href="http://en.wikipedia.org/wiki/Service-oriented_architecture"&gt;Wikipedia definition page&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Unlike RPC Web services, loose coupling is more likely, because the focus is on the document "contract" that the WSDL provides, rather than on the underlying implementation details of operations.&lt;br /&gt;As such Document-style services can be more agnostic to how, when, and by whom they are going to be consumed.&lt;br /&gt;[A good technical article on Document-style web services can be found &lt;a href="http://www.ibm.com/developerworks/library/ws-docstyle.html"&gt;here&lt;/a&gt;]&lt;br /&gt;&lt;br /&gt;Even when properly designed, SOAP-based web services often end up being complex to the point where directly coding against them would be a daunting task; and it is quite common to see enterprise web services packages heavily rely on the client-side libraries they’re delivered with - essentially reducing web services to some kind of middleware messaging protocol.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;REST &lt;/strong&gt;&lt;br /&gt;In reaction to this complexity, RESTful web services are now becoming quite popular -at least in discussion forums-.&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/REST"&gt;REST&lt;/a&gt; is a concept that was presented in 2000 and lays out a number of principles. The concept is still quite new when applied to web services, and a number of divergent definitions of what constitute RESTful web services are available.&lt;br /&gt;The general focus is on interacting with stateful resources, rather than messages or operations.&lt;br /&gt;Grossly oversimplified, RESTful web services heavily rely on standard operations already defined by the http protocol: GET, POST, but also PUT and DELETE. These operations allow to interact with stateful resources uniquely identified on the network, and to specify whether a given resource should be created, updated, or deleted.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;The prototypical example of a RESTful type of "web service" is RSS, which consists of an http GET operation that returns an XML formatted representation of the state of resources exposed by the server.&lt;br /&gt;&lt;br /&gt;A good programmatical comparison of XML-RPC, SOAP, and REST can be found &lt;a href="http://www.kbcafe.com/rss/?guid=20060704042846"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;While there is a great level of antagonism in forums between proponents of REST vs. SOAP (the REST folks are typically more vocal), it's not clear that both technologies conflict: SOAP is well suited for supporting complex business operations, while REST is most appropriate for implementing simpler operations on simpler schema. In other words, REST seems to be well suited for broadly distributed, consumer-focused, web services (e.g. that of amazon.com or Google) while SOAP seems to be more suited for the enterprise world, where the challenges are around exposing complex legacy services, with requirements on security and transactionality.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;In my next post, I'll try to look at some sources and data points for further analyzing the adoption trends.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/441525495669019047/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=441525495669019047" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/441525495669019047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/441525495669019047?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/08/evolution-of-web-services.html" title="The evolution of Web Services" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;CkQGQH0zeip7ImA9WB5WGEw.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-3181464438617598294</id><published>2007-07-29T22:35:00.000-07:00</published><updated>2007-07-30T08:45:21.382-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-30T08:45:21.382-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>Next Year's Budget</title><content type="html">I've mentioned in my &lt;a href="http://softwaresurvival.blogspot.com/2007/07/add-bullying-and-art-of-war.html"&gt;last entry&lt;/a&gt; Scott Berkun's post on &lt;a href="http://www.scottberkun.com/blog/2007/asshole-driven-development"&gt;Asshole Driven Development&lt;/a&gt; and other software engineering &lt;a href="http://en.wikipedia.org/wiki/Anti-pattern#Management_anti-patterns"&gt;antipatterns&lt;/a&gt;.&lt;br /&gt;The post generated comments listing 60 additional variations of anti-patterns and a number of them touched on software development issues that are budget-related; i.e. where the focus on expenses and/or revenues negatively impacts the development process.&lt;br /&gt;&lt;br /&gt;Some of them were great, others didn't seem as valid; but they all seem to reflect a number of frustrations expressed by developers.&lt;br /&gt;&lt;br /&gt;One of the most interesting one was &lt;span style="font-weight: bold;"&gt;NY$DM; &lt;/span&gt;&lt;strong&gt;Next Year's Dollars Don't Matter:&lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;"&lt;/strong&gt;When following this approach, every dumb decision that creates a potential maintenance or portability nightmare is elevated to "essential" because maintenance dollars are in next year's budget, and don't matter for this development project.&lt;br /&gt;Indeed, the absolute worst crud can be preserved because it is an "investment". Rewriting and replacing the crud would only spend this years dollars on an effort that wouldn't have any tangible ROI until several years in the future. The idea that maintenance is usually forever (the service life of in-house software appears to be measured in decades) has no impact at all, since that gigantic maintenance budget is only spent one year at a time, and it's made up of next year's worthless dollars. &lt;strong&gt;"&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;NY$DM describes a situation where development decisions do not factor the long term cost of building a piece of software (or not building it in the proper way), implicitly mortgaging future development budgets.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Variations on NY$DM&lt;/span&gt;&lt;br /&gt;The anti-pattern has a number of variations based on size, role of the development organization (e.g. IT vs. R&amp;D), and age / maturity of the organization (e.g. early-stage startup vs. my bank's IT shop).&lt;br /&gt;The context in which NY$DM is expressed seems to be one of an in-house IT shop, where the focus is on not over-spending the yearly allocated budget (a.k.a a cost-driven organization); but similar patterns and variations can found at software vendors, where the focus is on generating value and revenues (a.k.a. revenue-driven organizations) &lt;tbd&gt;. &lt;/tbd&gt;&lt;br /&gt;&lt;br /&gt;In the later case, it is not uncommon to divert development efforts onto some poorly thought-out feature in order to get this one sale that might help meet this year's revenue target. A pattern which easily results in building a set of disconnected features that are too shallow, too specific to a customer, or not taking the product in the right direction.&lt;br /&gt;&lt;br /&gt;Along with poor feature investment decision, exclusive focus on this year's revenue numbers and operating costs can also prevent long term technology investments necessary to achieve the product's long-term vision.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Generating Value&lt;/span&gt;&lt;br /&gt;To be clear, the goal of commercial software development is to generate more value than is invested - and ultimately make a profit.&lt;br /&gt;As such, trade-offs do need to be made, and there is no point in engaging in the development of a grand feature with a grand design if it means the organization cannot survive.&lt;br /&gt;&lt;br /&gt;There is also only so much that can be predicted in any business, and sometimes not making a move is more detrimental than putting something out - even if imperfect.&lt;br /&gt;&lt;br /&gt;Software is a process of discovery, and part of it consists in failing early, fast, and often.&lt;br /&gt;&lt;br /&gt;The challenge resides in making sure that a rational and conscious decision is being made when such a trade-off is being made, and that the known consequences are collectively understood by the stakeholders and decision-makers.&lt;br /&gt;&lt;br /&gt;In other words, there is nothing wrong in building a feature that is more shallow than it seems - as long as it's internally understood that more investments will be needed if taking that feature to where it needs to be.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;strong&gt;Cognitive Dissonance and Communication Challenges &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The frustration from the developers' side is multi-fold. It generally has its roots in a mix of &lt;a href="http://en.wikipedia.org/wiki/Cognitive_dissonance"&gt;cognitive dissonance&lt;/a&gt; and difficulties in articulating and raising awareness of the impact of the decisions being made at the top. &lt;/p&gt;&lt;p&gt;Engineers strive to build great things, not crap that can get us by. It's also not really exciting to develop something knowing that upcoming development efforts will involve fixing the shortcuts being taken right now.&lt;br /&gt;Understanding and reinforcing that these constraints and trade-offs are an intrinsic part of the commercial development effort can help make things easier and put things back in perspective. &lt;/p&gt;The other great challenge and frustration technical people face is being able to articulate the cost of maintenance of ill-designed functionality or the need -and associated cost- of refactoring a piece of code.&lt;br /&gt;It is often extremely difficult to quantify the long term cost of maintaining some old component built on antiquated technology, or to articulate the future impacts of taking some design infrastructure shortcuts in order to get a feature out earlier.&lt;br /&gt;&lt;br /&gt;Non-technical people typically have a hard time understanding -or trusting- that a piece of code needs to be cleaned up -or worst torn apart and rebuilt- in order to create something greater.&lt;br /&gt;You can always use a construction metaphor (e.g. I can't build a skyscraper on top of a &lt;a href="http://en.wikipedia.org/wiki/Shack"&gt;shack&lt;/a&gt;) but it will only get you so far. &lt;a href="http://en.wikipedia.org/wiki/Feng_Shui"&gt;Feng shui&lt;/a&gt; will also probably only have limited success.&lt;br /&gt;&lt;br /&gt;Your main options are constant education and re-enforcement on the issues of total costs of software development and maintenance; as well as possibly leveraging more senior and/or influential technical people within your organization and use their greater authority/credibility to help you articulate your views.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/3181464438617598294/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=3181464438617598294" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/3181464438617598294?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/3181464438617598294?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/07/next-years-budget.html" title="Next Year's Budget" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;DEAGRX06eCp7ImA9WB5XFk0.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-695147582595912984</id><published>2007-07-16T10:13:00.000-07:00</published><updated>2007-07-16T10:25:24.310-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-16T10:25:24.310-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>ADD, Bullying, and the Art of War</title><content type="html">Scott Berkun recently wrote an awesome post on &lt;a href="http://www.scottberkun.com/blog/2007/asshole-driven-development/"&gt;Asshole Driven Development&lt;/a&gt; and other software engineering &lt;a href="http://en.wikipedia.org/wiki/Antipattern"&gt;antipatterns&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Berkun defines Asshole Driven Development (ADD) as follow:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Any team where the biggest jerk makes all the big decisions is asshole driven development. All wisdom, logic or process goes out the window when Mr. Asshole is in the room, doing whatever idiotic, selfish thing he thinks is best. There may rules and processes, but Mr. A breaks them and people follow anyway. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"Asshole" is the trendiest way these days to describe a bully.&lt;br /&gt;Robert Sutton recently made a hit with his book, &lt;span style="font-style: italic;"&gt;The No Asshole Rule: Building a Civilized Workplace and Surviving One That Isn’t&lt;/span&gt; [read Guy Kawasaki's great review &lt;a href="http://blog.guykawasaki.com/2006/10/you_have_to_lov.html"&gt;here&lt;/a&gt;]&lt;br /&gt;The term works great for generating attention and calling things out, but is not really practical when you want to discuss and resolve a situation where one of your co-worker is being a jerk: calling someone an asshole is somewhat antagonizing... and is reflecting a judgment on the person rather than on his or her conduct. And in most cases, you'll be far more successful building a case against a behavior rather than against a specific individual.&lt;br /&gt;&lt;br /&gt;Beyond the individual(s) with an inclination for bullying, ADD can typically only develop in an environment where there is either:&lt;br /&gt;1. a lack of management leadership,&lt;br /&gt;2. a lack of awareness of the situation from the management team,&lt;br /&gt;3. a corporate culture of bullying -including at the senior management level&lt;br /&gt;4. a combination of the above.&lt;br /&gt;&lt;br /&gt;Possible remedies very much depend on the situation, but in any case, even if you're great at being an asshole, the recommendation would be to avoid playing back the game: power play typically fires back and is inefficient both for the organization as well as -most important in this case- for you.&lt;br /&gt;Instead, you'd probably want to take it to a different field by constantly calling on rational decision-making and critical thinking, and questioning individual and/or emotional decisions.&lt;br /&gt;&lt;br /&gt;If you feel powerless about corporate politics, i.e. how power flows through the organization and how you can influence decisions, a good read is the &lt;a href="http://en.wikipedia.org/wiki/The_Art_of_War"&gt;Art of War&lt;/a&gt; from Sun Tzu.&lt;br /&gt;This is not a book about how to get rid of people, but one about finding the most efficient ways to achieve your own goals: know yourself, know your opponent(s), know your terrain, and avoid expanding energy unnecessarily...</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/695147582595912984/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=695147582595912984" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/695147582595912984?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/695147582595912984?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/07/add-bullying-and-art-of-war.html" title="ADD, Bullying, and the Art of War" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;CkYCQX8yfSp7ImA9WB5QE0s.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-2747281404803789183</id><published>2007-07-01T23:55:00.000-07:00</published><updated>2007-07-02T00:09:20.195-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-07-02T00:09:20.195-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Out of the Sandbox</title><content type="html">In my &lt;a href="http://softwaresurvival.blogspot.com/2007/06/air-and-gears.html"&gt;last post&lt;/a&gt;, I wrote about Offline Application platforms in general, and Adobe Air and Google Gears in particular.&lt;br /&gt;The technologies are very nice - the larger question is which problemscan they solve, and what type of opportunities are they opening.&lt;br /&gt;In other words, are these just gadgets, some incremental technology additions, or do they have the potential to introduce a set of not-seen-before applications?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;From thick to rich&lt;/strong&gt;&lt;br /&gt;"Thick clients" was how desktop client-server applications were described in the late '90s when web applications started to take over.&lt;br /&gt;While desktop client-server applications offered much more sophisticated User Interfaces, they were a pain to deploy and as such were quickly outpaced by web applications - the later introduced new levels of deployability and accessibility because their logic reside on the server.&lt;br /&gt;&lt;br /&gt;For the past few years, the goal of technology players such as Adobe and Google was to develop technologies that would bring desktop-level User Interfaces onto web applications - a.k.a "&lt;a href="http://en.wikipedia.org/wiki/Rich_internet_application"&gt;Rich Internet Applications&lt;/a&gt;" - most notably Ajax and Flex.&lt;br /&gt;&lt;br /&gt;It only seems natural that once this goal is somewhat achieved, these players complete their technological expansion by bringing web UI onto the desktop.&lt;br /&gt;&lt;br /&gt;While long-term strategic market positioning is one way to look at it, it's not clear that the intent here is to attack Microsoft by making Microsoft Visual Studio and native Windows application irrelevant - there's less and less native Windows application development anyway, and the next killer application is unlikely to outcast the MicrosoftOffice suite.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Do you really need gmail on your desktop?&lt;/strong&gt;&lt;br /&gt;One of the most prominent value proposition claimed by Air/Gears technologies is to allow users to take their favorite Web Applications offline.&lt;br /&gt;&lt;br /&gt;But does anyone really need offline desktop applications?&lt;br /&gt;People switched to gmail precisely because it was on the web -i.e. anywhere, and not on a designated computer.&lt;br /&gt;If users wanted to easily save online maps, they'd probably want to save them to an online repository and be able to access them from any network-connected location - not on some random desktop computer.&lt;br /&gt;&lt;br /&gt;The need to be able to work while disconnected is irrelevant to 90% ofUsers:&lt;br /&gt;How often are you disconnected?&lt;br /&gt;How often will you be 5 years from now?&lt;br /&gt;&lt;br /&gt;This doesn't mean that 80% of the Users may not be asking for this type of features - asking is cheap.&lt;br /&gt;If and when users do get this type of functionality, they realize that offline applications intrinsically hold a number of data synchronization issues - the "which version am I working off?" syndrome -, and often abandon the idea .&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Out of the Sandbox&lt;/strong&gt;&lt;br /&gt;The greater value of the technologies offered by Adobe and Google might be in being able to lift the sandbox restrictions imposed by browsers, ActiveX controls, or the Flash Player.&lt;br /&gt;&lt;br /&gt;These sandbox restrictions mainly prevent 2 functions: client-level http services mashups and cross-application integration:&lt;br /&gt;Browser-based applications can't mashup http services from multiple web servers, unless the traffic is proxied by the server serving the said web-based app.&lt;br /&gt;In other words, you can't develop a web application that pulls data from eBay and Google - unless the data transits through your own web server.&lt;br /&gt;These sandbox restrictions also prevent to easily exchange data between applications - be they web-based or desktop-.&lt;br /&gt;&lt;br /&gt;Fine points?&lt;br /&gt;May be, may be not.&lt;br /&gt;In essence, the features offered by Adobe Air or Google Gears allow the development of applications that can extract, process, compose, and render information from multiple sources in a way that can fit a user's specific goals - i.e. some sort of ultra-specialized "browsers" that are web-application smart -: Grab data from here and there, transform it in such a format, and display it this way - replace the "here and there" by your favorite web and/or desktop apps - Gmail, linkedIn, eBay, MS Office, et al-; the list grows as fast as the number of services offered on the Web.&lt;br /&gt;&lt;br /&gt;The target market for such applications might initially look like somewhat of a niche, but whoever comes up with a more general application might have the potential of challenging some of the largest Internet players by commoditizing, enhancing and controlling the user experience around the services they offer.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/2747281404803789183/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=2747281404803789183" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/2747281404803789183?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/2747281404803789183?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/07/out-of-sandbox.html" title="Out of the Sandbox" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;DUAARH48fip7ImA9WB5REUk.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-5731575757644980747</id><published>2007-06-17T23:24:00.000-07:00</published><updated>2007-06-17T23:22:25.076-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-17T23:22:25.076-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="technology" /><title>Air and Gears</title><content type="html">2 major technologies are being released which are targeted at allowing web developers to build and deploy web applications to the desktop.&lt;br /&gt;Some background and a quick summary - I'll follow-up with some thoughts in my next post:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Background:&lt;/strong&gt;&lt;br /&gt;When Users start relying heavily on a given web application, there typically comes a point when they start asking to be able to continue using the application while they are disconnected.&lt;br /&gt;This is true for enterprise applications (e.g. being able to enter my expenses while being disconnected from the enterprise Expense Reporting web app) or for consumer web applications (e.g. being to consult my Gmail and draft emails when on the plane).&lt;br /&gt;&lt;br /&gt;While Users understand that an offline application would provide them with only a subset of data or functionality (constrained to the amount of data previously synchronized on the desktop); the &lt;a href="http://softwaresurvival.blogspot.com/2007/03/undreamt-requirements.html"&gt;unconscious requirement&lt;/a&gt; is often that the User Interface should be similar -if not identical- to the online web application.&lt;br /&gt;&lt;br /&gt;The offline application should allow data to be synch'ed from the server, work offline, and synch back to the server.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In the past, deploying a java-based web application as a Windows desktop application was not the most straightforward thing to do:&lt;br /&gt;You typically needed to have a windows executable embedding and managing a low footprint web/servlet server as well as a browser instance pointing to the embedded web server.&lt;br /&gt;If you wanted to add persistance on top of that, you could either serialize the object graph into local files, or use an embedded database server.&lt;br /&gt;The fun wouldn't stop there if you needed a smart synchronization mechanism between the desktop app and the app server: the challenge there wouldn't be in establishing a connection to the server and exchanging data, but rather in resolving conflicts - i.e. resolving concurrent changes to data made offline and online.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Air and Gears&lt;/strong&gt;&lt;br /&gt;There pretty much hasn't been much -if any- traffic on the Offline Application Framework front since web applications became mainstream. If you wanted to deploy a web-based application as a Windows desktop application, the only solution so far has been to develop a tremendous amount of infrastructure for being able to deliver a web UI into a desktop application.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Just recently, both Google and Adobe released beta versions of application frameworks allowing to easily create such apps.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://gears.google.com/"&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Gears&lt;/span&gt;&lt;/a&gt; is an open source browser extension that allows Html/Ajax-based apps to run on the desktop.&lt;br /&gt;When accessing a Gears-enabled web application, Users will need to install the Gears extension (but only the first time) as well as allow the website to use Gears.&lt;br /&gt;Users would then be able to use whatever desktop-based features the web application provides, and access back the application and its features while disconnected.&lt;br /&gt;From an architectural standpoint, the Gears browser extension has three components that can be accessed via JavaScript APIs:&lt;br /&gt; - a local Web server, which runs in the browser - for storing and accessing application pages offline&lt;br /&gt; - the open-source database &lt;a href="http://www.sqlite.org/"&gt;SQLite&lt;/a&gt; - for storing and accessing application data on the user's computer&lt;br /&gt; - browser extensions that allow multiple JavaScript jobs to run in parallel - the WorkerPool object that allows long-running tasks, such as the code that synchronizes data between your server and users' computers&lt;br /&gt;The Gears browser extension should be under 1 megabyte in size.&lt;br /&gt;More on the architecture can be found &lt;a href="http://code.google.com/apis/gears/architecture.html"&gt;here&lt;/a&gt;, and a good tutorial can be found &lt;a href="http://code.google.com/apis/gears/tutorial.html"&gt;there&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;a href="http://labs.adobe.com/wiki/index.php/Apollo"&gt;Air&lt;/a&gt; &lt;/span&gt;(Adobe Integrated Runtime) was called Apollo as of last week when it was still in alpha.&lt;br /&gt;Air a cross-operating system runtime that runs outside of the browser (as opposed to Gears, which is a browser extension).&lt;br /&gt;The runtime needs to be installed only once and can be distributed either independently or within any Adobe AIR application.&lt;br /&gt;Users can then run desktop applications that leverage rich Internet applications technologies such as Flash, Flex, HTML, JavaScript and Ajax.&lt;br /&gt;The intent is to allow the development of connected applications that work while offline; but any desktop application could be built on the platform.&lt;br /&gt;Developers should not need to re-write any code to have an existing Flex application run within Adobe AIR, but they may need to write additional code to take advantage of Adobe AIR specific APIs and controls.&lt;br /&gt;&lt;br /&gt;Like Gears, Air embeds SQLite as a native database; and much like Gears, AIR 1.0 will not have built-in support for communicating directly to 3rd party databases.&lt;br /&gt;In theory though, it should be possible to write Database drivers in ActionScript and allow AIR applications to communicate directly with local or remote databases.&lt;br /&gt;&lt;br /&gt;Another nice bit is that Adobe intends to incorporate a mechanism to make it easy to automatically update applications.&lt;br /&gt;&lt;br /&gt;Some cool &lt;a href="http://labs.adobe.com/wiki/index.php/AIR:Applications:Samples"&gt;samples&lt;/a&gt; are available online: a desktop RSS reader; an application that allows to save and manage Yahoo Maps locally; a mashup of Google Maps with VCard; an application that allows you to drag and drop files between &lt;a class="external" title="http://www.amazon.com/gp/browse.html?node=" href="http://www.amazon.com/gp/browse.html?node=16427261" target="_blank" rel="nofollow"&gt;Amazon Simple Storage Service (S3)&lt;/a&gt; storage services and your local file system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;&lt;/span&gt;It's interesting to see that there was practically no development in this area; and all of the sudden, 2 of the largest players in web technologies are releasing some major platforms.&lt;br /&gt;&lt;br /&gt;In my next post, I'll try to formalize some thoughts as to what is the problem we're trying to solve, and whether being able to solve it might open-up some new possibilities.</content><link rel="replies" type="application/atom+xml" href="http://softwaresurvival.blogspot.com/feeds/5731575757644980747/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=30323643&amp;postID=5731575757644980747" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/5731575757644980747?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/30323643/posts/default/5731575757644980747?v=2" /><link rel="alternate" type="text/html" href="http://softwaresurvival.blogspot.com/2007/06/air-and-gears.html" title="Air and Gears" /><author><name>DavidT</name><email>noreply@blogger.com</email></author></entry><entry gd:etag="W/&quot;D0YFSXc-eyp7ImA9WB5REU0.&quot;"><id>tag:blogger.com,1999:blog-30323643.post-4665369414330994181</id><published>2007-06-03T21:47:00.000-07:00</published><updated>2007-06-17T11:31:58.953-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2007-06-17T11:31:58.953-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="management" /><title>4 Guidelines on Recruiting Developers</title><content type="html">By default, hiring processes tend to naturally favor candidates who can best talk about their jobs; not candidates who can best DO their jobs.&lt;br /&gt;As such, if you don't establish a somewhat thought-out process, you'll tend to favor developers with the best interviewing skills - not the ones with the best programming skills.&lt;br /&gt;There is no silver bullet, but there are a few guidelines that can be used to help bringing the best developers on a team.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Test Programming skills &lt;/strong&gt;&lt;br /&gt;If the interview doesn't contain a programming test; you're not really interviewing for a Developer position.&lt;br /&gt;Most organizations understand that; what they don't, is that you need to establish programming tests that are reflective of the actual type of work that the candidate is interviewing for.&lt;br /&gt;- Questions around the implementation of the QSort algorithm, or the removal of duplicates within a linked list tell you something - how well they've studied their basic algorithms, or how good they are at implementing them. This is not really what you need to know when say you're looking for a web developer with java/jsp/sql skills.&lt;br /&gt;- Theoretical programming questions (such as 'can an abstract class be declared as final?' or what's an outer join) are just that. They work well for anyone who's passed any sort of certification, which is pretty much everyone these days, not for identifying who will be good at doing the daily work that the job requires; unless it mainly involves passing certifications&lt;br /&gt;- When interviewing someone over the phone on technical questions - you are pretty much only assessing that person's ability to talk about technical topics over the phone - not their ability to comprehend a problem, devise a solution, and implement it successfully&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Each job requires specific skills. The programming test should be as close as possible to what candidates will in fact be working on if hired.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Be consistent &lt;/strong&gt;&lt;br /&gt;You should prepare and be in a position to ask the same questions to all candidates - whoever is the candidate, and whoever is the interviewer.&lt;br /&gt;A good way to do this is simply to compile a list questions into a document; and add to it as you go.&lt;br /&gt;There are at least a couple of reasons why this is critical:&lt;br /&g