<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3595126709385852916</id><updated>2011-11-27T16:33:55.203-08:00</updated><category term='kanban'/><category term='software estimation'/><category term='social computing'/><category term='crowdsourcing'/><category term='agile'/><category term='cloud computing'/><category term='Agile TDD'/><category term='leadership'/><category term='user stories'/><category term='management'/><title type='text'>Jack Notarangelo's Application Engineering Blog</title><subtitle type='html'>The purpose of this blog is to share software development methodologies and techniques related to  project management, estimation, resourcing, communication, etc.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>39</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-5578685007915817138</id><published>2011-10-30T10:32:00.000-07:00</published><updated>2011-10-30T10:38:47.279-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>Development Managers in Agile</title><content type='html'>To understand the role of a development manager in Agile, we must first understand the difference between management and leadership.&lt;br /&gt;&lt;br /&gt;The goal of management is to attain perfection in its processes in an effort to maximize productivity. The goal of leadership is to be an agent for change in an effort to maximize organizational sustainability through innovation and adaptability.&lt;br /&gt;&lt;br /&gt;Although they are counteracting forces they are&amp;nbsp;both required to be successful.&amp;nbsp;It is as important to get things done efficiently as it is to innovate and adapt.&lt;br /&gt;&lt;br /&gt;So how should leadership and management manifest themselves in an Agile-based organization?&lt;br /&gt;&lt;br /&gt;From a management perspective, Agile assigns management roles through clear delineation of authority&amp;nbsp;between the Agile roles, i.e. Product Owner, ScrumMaster, and Team.&lt;br /&gt;&lt;br /&gt;Leadership is an implied attribute in Agile. Agile consciously acceptances that much of what we believe to be true will prove to be either fundamentally flawed, or, will become flawed because of real-world change. Since change is inevitable, leadership is a universal trait that is necessary for Agile entities to be successful.&lt;br /&gt;&lt;br /&gt;A leader is often characterized as a charismatic and/or visionary&amp;nbsp;manager. As I mentioned in my previous blog post, that is because most organizations are autocratic in nature and thus leaders are part the management tier.&lt;br /&gt;&lt;br /&gt;Agile is not autocratic. There is no&amp;nbsp;hierarchy. As part of this structure, it is intended that leaders emerge and assert themselves as part of the process of getting things done. This also means that leadership resides in each of the three Agile roles in a quantity that is not assigned or dictated but emerges&amp;nbsp;according&amp;nbsp;to need.&lt;br /&gt;&lt;br /&gt;So if Agile groups are not&amp;nbsp;hierarchical&amp;nbsp;and leaders emerge naturally, then what is the role of the development manager?&lt;br /&gt;&lt;br /&gt;The job of a development manager in an Agile organization is to promote both leadership and management; to value both within the organization; and to empower both to grow and change organically through the &lt;a href="http://agilemanifesto.org/principles.html"&gt;Agile&amp;nbsp;principles&lt;/a&gt;. If it sounds like a development manager is more leader than manager - you are right.&lt;br /&gt;&lt;br /&gt;I'm sure as you read this, many of you recognize command-and-control (autocracy) as a significant attribute within your workplace. Through your&amp;nbsp;commitment&amp;nbsp;to Agile principles, you are&amp;nbsp;provided&amp;nbsp;the opportunity of implementing the aforementioned organizational model -&amp;nbsp;if not&amp;nbsp;throughout&amp;nbsp;your organization, then as a model for your organization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-5578685007915817138?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/5578685007915817138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2011/10/agile-leadership-management-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5578685007915817138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5578685007915817138'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2011/10/agile-leadership-management-and.html' title='Development Managers in Agile'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-910693178160776042</id><published>2011-10-15T11:57:00.001-07:00</published><updated>2011-10-15T12:01:23.157-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Self-Managing Teams, Adaptability and Innovation</title><content type='html'>&lt;p&gt;Technological advancements and the global economy has made innovation and adaptability a critical component for sustainability. Thus we need to push our conventional management model into antiquity and move towards the more dynamic model of self-managing teams.&lt;/p&gt;  &lt;p&gt;As we all know, Agile promotes the concept of self-managing teams. This concept has been gaining steam recently but has actually been around for quite some time. W.L. Gore, for example, has been organized around self-managing teams since 1958.&lt;/p&gt;  &lt;p&gt;Let’s start with what we have today and how we got here.&lt;/p&gt;  &lt;p&gt;Top-down leadership is the prevalent model in most organizations and is ingrained in most of our thinking and behaviors. The current autocratic nature of management was introduced during the industrial revolution. Its ability to churn out vast quantities of manufactured goods is undeniable. Its primary limitation in today’s business climate is that it requires that a select few contain the wisdom, vision, and authority - and the masses execute the plan. This is great for repetitive tasks but less so for innovation and adaptability. &lt;/p&gt;  &lt;p&gt;Just as it is irrational to think that we can plan the development of software up front and rigidly adhere to and execute the plan – as if change isn’t going to happen - so too is it delusional to think that adaptability and innovation is borne out of autocracies and bureaucracies. &lt;/p&gt;  &lt;p&gt;Innovations are not planned or commanded into existence. Instead, innovations are developed serendipitously. We search for one thing and unexpectedly find another. We need to structure our organizations in a way that promotes the manifestation of the unforeseen.&lt;/p&gt;  &lt;p&gt;As with all things, we must make compromises when changing from one management model to another. As Gary Hamel so aptly puts it in his book &lt;em&gt;&lt;a href="http://www.amazon.com/Future-Management-Gary-Hamel/dp/1422102505/" target="_blank"&gt;The Future of Management&lt;/a&gt;:&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;“&lt;em&gt;You can build a company that is virtually error and mistake free. You can build a company that is highly adaptable. But you can’t do both. In this sense, perfection is the enemy of progress&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;If I sound like an anarchist who thinks there’s no room for authority, I assure you I am far from it. Leadership is always needed and always sought out. I believe in authority too. I just think that it is ineffectively distributed in the conventional management model. &lt;/p&gt;  &lt;p&gt;The requirements for managers in the contemporary world in which we compete are:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Leading by pushing authority, accountability, and reward to small front line teams. &lt;/li&gt;    &lt;li&gt;Leading by creating an environment that allows for experimentation, collaboration, and not only self-managing but self-organizing teams.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These steps will encourage creativity, passion, and a sense of community and mission – all of which are ingredients for a dynamic, adaptable and innovative workplace. A workplace built to compete in the 21st century.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-910693178160776042?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/910693178160776042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2011/10/self-managing-teams-adaptability-and.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/910693178160776042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/910693178160776042'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2011/10/self-managing-teams-adaptability-and.html' title='Self-Managing Teams, Adaptability and Innovation'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-1437710408306097766</id><published>2011-10-05T18:56:00.000-07:00</published><updated>2011-10-05T21:59:39.989-07:00</updated><title type='text'>Distributed Scrum - Integrating Offshore Resources</title><content type='html'>Tranistioning to distributed scrum with offshore resources is hard. It requires significant change in the way teams are run and how members interact. There is also potential for dramatic improvement with productivity and ROI in general. &lt;br /&gt;&lt;div&gt;&lt;/div&gt;There are plenty of articles written about offshoring projects, significantly less written on distributed teams, and a trivial amount written on distributed scrum with oursourced and offshore teams. &lt;br /&gt;&lt;br /&gt;In my view, the best option when working with offshore resources is distributed scrum. I have faith in Agile as a framework for development. With all of the risks associated with software engineering and the added complexity of team members distributed across the planet, I want control over how projects are executed and the emphasis on continuous improvement.&lt;br /&gt;&lt;div&gt;&lt;/div&gt;With that said, here are a few things to consider when considering distributed scrum with offshore resources:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Team and Agreement Structure&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Limit resource distribution&lt;/u&gt;: The more distributed the team the more complex the work becomes. Limit the distribution of resources as much as possible.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Aim for long-term partnership&lt;/u&gt;: When you find the right partner, don't be afraid of arranging a long-term partnership, e.g. 1-2+ years. This allows for you and your outsourcer to concentrate on team building and continuous improvement without distraction of the next agreement. This does not preclude a 30-90 day exit strategy built into the contract if the partnership goes south.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Measurable results&lt;/u&gt;: I'm on the fence with this one. It is common to insert milestone-based payments based on deliverables. This is common for any project that is completely outsourced regardless of whether it is software, buildings, etc. But in this structure, any performance incentive is more akin to a performance-based bonus for employees. I keep harkening back to a book I read by B.F. Skinner where he postulated that most incentives are actually disincentives. Agile principles, when adopted fully, make it clear when resources, or outsourcers for that matter, are failing. Payment schemes typically provide incentive to maximize financial reward not necessarily maximizing productivity and effectiveness.&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Build a rapport with your outsourcing partner&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Stay close at the executive level&lt;/u&gt;: The best situation is one where you have access to the executive level of the outsourcer. When you really need something done, you want to be able to reach out at the highest levels.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Find a true partner&lt;/u&gt;: It's important that your offshore partner be your business partner too. The organization that you choose should be an advocate for your vision.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Trade players for a few weeks&lt;/u&gt;: It cannot be overstated how important it is that the team members get to know one another on a personal level. The affect on a team when dispartely located people finally meet each other face to face and work together for a period of time is stunning.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Maximize overlapping working hours&lt;/u&gt;: Both sides should help to extend the overlapping work hours in a day. It's easy to say "your my vendor, you should bend to my wishes". Altough yoru oursourcer may acquiesce, you should expect more to get accomplished when both sides are engaged and working together to solve this particular proximity problem. &lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Expect Proficient Communication&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;One language&lt;/u&gt;: Pick a single language for communication and make sure everyone one on the team speaks it well. Seems obvious but I've heard of translators being hired to bridge language barriers. With that said, don't be afraid to learn a few words and phrases in their native language. It will help to add character and color to the team.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Good communication skills&lt;/u&gt; - Communication is more than language, it's also proactively alerting the team of potential problems, sharing knowledge, willingness to disagree, recommending improvements, etc. As with onshore resources, have high standards with each person's ability to communicate effectively.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Video conference&lt;/u&gt;: For good reasons, we don't conduct telephone meetings when everyone is in the office. As humans, we prefer in person conversation. It is important to emulate the behaviour of colocation and video conferencing is the next best thing to holograms. It's a bit awkward at first but becomes very comfortable very quickly.&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Treat Offshore Resources Like Employees&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Expect profient professionals&lt;/u&gt;: Just as with colocated permanent employees, look forward to the right balance of intelligence, creativity, passion, dedication, and all of the other traits we look for when adding to our teams. Don't lower your standards!&lt;/li&gt;&lt;li&gt;F&lt;u&gt;it people to jobs&lt;/u&gt;: The best team is made up of people who are in positions that accentuate their strengths and marginalize their weaknesses.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Career pathing and mentoring&lt;/u&gt;: Check-in with your offshore team mates to make sure they are experiencing job satisfaction. Provide mentoring to advance their careers and expertise. Just as with colocated permanent employees, this helps to build a stronger team.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Work/life balance&lt;/u&gt;: Expect that your offshore resources have families and lives outside of work.&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;strong&gt;Be Patient&lt;/strong&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;u&gt;Coalescing a team takes time&lt;/u&gt;: It takes longer for distributed teams, especially when they are offshore vendors, to coalesce. Many people on the team were hired not by you but by your vendor. Don't underestimate this obstacle. Team building is hard enough when everyone works for the same company and is in the same building. This structure is orders of magnitude more complex.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Encourage coalescence&lt;/u&gt;: Agile is inherently one of the best methods of coalescing a team. Let that process of direct communication happen naturally. Assuming good quality team members, the only obstacle is you if you act as a proxy between team members.&lt;/li&gt;&lt;li&gt;&lt;u&gt;Facilitation is key&lt;/u&gt;: There will be a lot of change immediately and stability can feel very far off. The person who is in charge of building and motivating the team must have good facilitation skills. &lt;/li&gt;&lt;/ul&gt;Yes, there is risk and some parts of this are down right scary. But don't lose site of the fact that distributed srum work. When it does, most organizations will find themselves fundamentally stronger than they were before.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-1437710408306097766?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/1437710408306097766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2011/10/distributed-scrum-integrating-offshore.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/1437710408306097766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/1437710408306097766'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2011/10/distributed-scrum-integrating-offshore.html' title='Distributed Scrum - Integrating Offshore Resources'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-5594666109577675515</id><published>2011-03-22T18:22:00.001-07:00</published><updated>2011-03-22T18:22:50.289-07:00</updated><title type='text'>The Wild West of Mobile Governance</title><content type='html'>&lt;p&gt;With many years of network infrastructure experience and evolution behind us, the networks and workstations within most organizations are pretty well standardized. It’s a different story for mobile devices and especially tablets, where the landscape could be aptly described as a lawless wild west. &lt;/p&gt;  &lt;p&gt;The Aberdeen Group just published a study called &lt;a href="http://www.aberdeen.com/Aberdeen-Library/6859/RA-enterprise-mobility-management.aspx" target="_blank"&gt;Enterprise Mobility Management 2011: Mobility Becomes Core IT&lt;/a&gt; that show dramatic gaps in IT governance with smart devices in general and tablets specifically have been approached from an “adopt now - manage later” philosophy. &lt;/p&gt;  &lt;p&gt;Here are some industry averages of companies that have implemented basic security features which in my opinion depicts a frenzied adoption of mobile technologies in lieu of an IT infrastructure to support them:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Lock and Wipe Capabilities: Smartphones 56%, Tablets 22%      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Two Factor User Authentication: Smartphone 29%, Tablets 22%      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;Data Encryption of Removable Media: Smartphones 26%, Tablets 12% &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;These data are unbelievable. In the Aberdeen paper, the best in class data are at points significantly better than industry averages but certainly still unacceptable. The laggards are abhorrently bad in their adoption of many of the most basic security features.&lt;/p&gt;  &lt;p&gt;As software developers, we should view the rapid - and apparently reckless - adoption of tablets as a precursor to an imminent explosion of mobile development internally within each of our organizations. &lt;/p&gt;  &lt;p&gt;We are entering an era unlike any that has ever been seen. One that will make the Internet boom look tame and uneventful. Interestingly, all the development we’ve done in the past has prepared us well for this moment in time. The mobile platform is not nearly as challenging as when the Internet was introduced to us. &lt;/p&gt;  &lt;p&gt;The difference maker this time around is having a creative workforce with a vision of how a mobile workforce is different than the status quo and what tools are required to leverage their nearly ubiquitous connectivity.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-5594666109577675515?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/5594666109577675515/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2011/03/wild-west-of-mobile-governance_22.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5594666109577675515'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5594666109577675515'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2011/03/wild-west-of-mobile-governance_22.html' title='The Wild West of Mobile Governance'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-8521837639037975321</id><published>2011-03-20T12:02:00.001-07:00</published><updated>2011-03-20T12:02:28.363-07:00</updated><title type='text'>How Does Your App Dev/Support IT Budget Compare to Industry Averages?</title><content type='html'>&lt;p&gt;The Gartner Group has done a great job with compiling data related to industry averages for application development and support. Those industry averages are also sliced and diced by vertical. &lt;/p&gt;  &lt;p&gt;Industry averages do not indicate best practices or imply the sweet spot for spending for application development resources; they are merely averages for how your peers are balancing resources. &lt;/p&gt;  &lt;p&gt;Anyway, here are some interesting stats compiled by the Gartner Group in 2010. There are lots more to go along with these and you can get them &lt;a href="http://www.gartner.com/technology/metrics/application-portfolio-managment.jsp" target="_blank"&gt;here&lt;/a&gt;. Do you know how your organization stacks up against your peers and the IT teams in general?&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;IT Spend Distribution      &lt;ul&gt;       &lt;li&gt;34% of IT spend goes to application development and support resources. 83% of that spend is towards personnel, of which 60% are programmers. &lt;/li&gt;        &lt;li&gt;Of the IT budget for application development and support, 52% goes towards application development and 48% goes towards application support. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Personnel and Work Distribution      &lt;ul&gt;       &lt;li&gt;37% of IT staff is dedicated to application development and support &lt;/li&gt;        &lt;li&gt;53% of the work distributed to application development support goes to development projects with the balance towards support. &lt;/li&gt;        &lt;li&gt;Work distribution aligned to the SDLC breaks out to 27% requirements/design, 26% development, 32% testing, and the balance being PM and other admin functions. &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Development Methodology &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;Surprisingly, only 14% of organizations consider themselves to be Agile shops. However, there are an additional 31% that use some form of iterative development. &lt;/li&gt;      &lt;li&gt;Believe it or not, Waterfall is still king with 55% of organization using that methodology.&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-8521837639037975321?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/8521837639037975321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2011/03/how-does-your-app-devsupport-it-budget.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8521837639037975321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8521837639037975321'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2011/03/how-does-your-app-devsupport-it-budget.html' title='How Does Your App Dev/Support IT Budget Compare to Industry Averages?'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-4410129041958315999</id><published>2011-02-08T15:48:00.001-08:00</published><updated>2011-02-09T05:05:48.717-08:00</updated><title type='text'>Why Wireframing Should be a Required Activity</title><content type='html'>&lt;p&gt;The overwhelming majority of users we deal with are non-technical and visual learners. As a result, requirements documents that are heavy on narrative are a poor conduit to understanding the way in which users will interact with a proposed application. By visually manifesting the application prior to development, wireframes put everyone in the best position to win.&lt;/p&gt;  &lt;p&gt;Here’s my anecdotal allegory of the problem with requirements documents. When distributing a requirements document, if there are six business users in the room there are probably four that have read the document and two that understand it. Of the two who have understood the document, each of them is imagining a different application in their mind’s eye. It’s not their fault. This stuff isn’t what they do for living and when they become involved it’s on top of their normal day job.&lt;/p&gt;  &lt;p&gt;Wireframes replace the written word with visual manifestations of the screens/pages. From a users perspective (an even from our respective) they are significantly easier to understand than dozens of pages of narrative. Software developers and business users live in different worlds and often think very differently. Wireframes help to bridge that gap through pictures that represent a common understanding of functionality. Because wireframes are a visual representation of the application, everyone in the room leaves with the same understanding of what will be developed.&lt;/p&gt;  &lt;p&gt;Wireframes should be developed either alongside requirements documents or in lieu of them. They should also be developed deeply and completely to the point where the development team can state at the end of the wireframing sessions:&lt;/p&gt;  &lt;p&gt;“&lt;em&gt;This is what we are building – no more and no less. If we are forgetting a feature and it needs to be added later it will likely effect the schedule and budget.&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;From my experience, when the wireframing sessions are done well and are complete, change orders are almost never disputed. Don’t get the wrong idea, however, that wireframes result in everyone living happily ever after. Change orders, regardless of whether disputed or not, still frequently cause frustration and require negotiations with scope, schedule, and/or budget.&lt;/p&gt;  &lt;p&gt;It’s amazing how often what seems to make sense in thought and speech requires modification once manifested on screen. Wireframes help to alleviate, but not eliminate, this affect. Needless to say, virtually every project succumbs to &lt;a href="http://applicationengineering.blogspot.com/2010/11/humphreys-requirements-uncertainty.html" target="_blank"&gt;Humphrey’s Requirements Uncertainty Principle&lt;/a&gt; which states:&lt;/p&gt;  &lt;p&gt;&lt;i&gt;“For a new software system, the requirements will not be completely known until after the users have used it.”&lt;/i&gt;&lt;/p&gt;  &lt;p&gt;Wireframes also help to uncover hidden business rules. We all take what we know as professionals for granted and sometimes inadvertently omit information from those with less experience than ourselves. When the development team is discussing the need for each page, workflow, control, validation rule, et al it’s a natural process to hit upon each of the business reasons and processes and discuss them in detail.&lt;/p&gt;  &lt;p&gt;Wireframing also helps with estimating projects. I’ve mentioned in previous posts about the &lt;a href="http://applicationengineering.blogspot.com/2009/03/software-estimation-v-1.html" target="_blank"&gt;inherent problem with estimating&lt;/a&gt; software projects. A good example of how badly human beings are at estimating is a statistic from “Demystifying the Black Art of Estimation” by Steve McConnell that most estimates are actually 30% of the actual level of effort. With that kind of epidemic of over-optimism, the clearer we, and the business users, can visualize the application – the better.&lt;/p&gt;  &lt;p&gt;Once the wireframes are developed, a finer grained estimate is possible than prior to the wireframes. Each page and feature is able to be enumerated, sized and prioritized. Any prior estimates should be validated against the new information provided by the wireframes.&lt;/p&gt;  &lt;p&gt;Wireframing the application doesn’t eliminate documentation. Things like complex business processes still need to be codified. &lt;/p&gt;  &lt;p&gt;Wireframes, however, do a better job than requirements documents at articulating for what purposes users need to use a system and the most efficient way in which to use it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-4410129041958315999?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/4410129041958315999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2011/02/why-wireframing-should-be-required.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4410129041958315999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4410129041958315999'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2011/02/why-wireframing-should-be-required.html' title='Why Wireframing Should be a Required Activity'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-4783266704595066881</id><published>2010-12-10T15:30:00.001-08:00</published><updated>2010-12-13T16:24:26.407-08:00</updated><title type='text'>Could the Unthinkable Happen to Microsoft?</title><content type='html'>&lt;p&gt;This year has been a pivotal one for the OS business. A few key stats caused my mind to fast-forward to a possibly unthinkable scenario –- Within the next 5 years, Windows will not be the dominant OS, and in fact is set up to be this millennium's OS2.&lt;/p&gt;  &lt;p&gt;Yikes. &lt;/p&gt;  &lt;p&gt;You’re probably thinking; “How could Jack possibly think that? Has he lost his mind?”&lt;/p&gt;  &lt;p&gt;The latter question is hardly up for debate. However, the aforementioned radical scenario is far from certain, but in my view, certainly plausible. Here are some stunning data and some logic immediately thereafter to make my compelling argument. I end the story with all the reasons why Microsoft should maintain their coveted pace in the OS market.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;How Microsoft Could Lose Their Place&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;From a &lt;a href="http://www.morganstanley.com/institutional/techresearch/pdfs/Internet_Trends_041210.pdf" target="_blank"&gt;Morgan Stanley study&lt;/a&gt; published in April 2010, there are four stats that I think support my dire Windows scenario (not prediction).&lt;/p&gt;  &lt;p&gt;1. By 2015, there will be more mobile than desktop Internet users.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_-9FPYnfwXqs/TQa4o5wlW-I/AAAAAAAAAEQ/B8nESyHaK4o/s1600-h/image%5B1%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh6.ggpht.com/_-9FPYnfwXqs/TQK4ArUR74I/AAAAAAAAAEU/4-2xM38ckaM/image_thumb%5B1%5D.png?imgmax=800" width="325" height="253" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2. Social network users have surpassed email users indicating the preference to communicate in the context of online collaboration.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_-9FPYnfwXqs/TQK4AxwMmpI/AAAAAAAAAEY/t47ySDeVaK4/s1600-h/image3%5B1%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_-9FPYnfwXqs/TQK4BG8xnmI/AAAAAAAAAEg/jrVnFplfybk/image3_thumb.png?imgmax=800" width="329" height="256" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;3. People are using their mobile devices more as computers than as phones.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_-9FPYnfwXqs/TQK4BVvSlFI/AAAAAAAAAEs/FbO5Ycaz95c/s1600-h/image6%5B1%5D.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh3.ggpht.com/_-9FPYnfwXqs/TQK4Bvsus8I/AAAAAAAAAEw/7lW5S5rRs5g/image6_thumb.png?imgmax=800" width="330" height="255" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Couple those stats with these by &lt;a href="http://www.gartner.com/it/page.jsp?id=1434613" target="_blank"&gt;Gartner&lt;/a&gt; showing the growth of Android and Apple and the decline of Windows in the context of mobile devices. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_-9FPYnfwXqs/TQK4BzZP_GI/AAAAAAAAAEI/27-MMWkdwgc/s1600-h/image14.png"&gt;&lt;img style="background-image: none; border-right-width: 0px; margin: 0px 0px 5px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="http://lh4.ggpht.com/_-9FPYnfwXqs/TQK4CK7pmzI/AAAAAAAAAEM/LC8rEXZjLoE/image_thumb4.png?imgmax=800" width="244" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Mobile technology is moving at a break neck pace that consumers and businesses alike are adopting virtually immediately. More and more, those mobile users are using their mobile devices in the same way as their desktop computers. With the advent of the iPad and it’s competitors, one can fast forward to a day where a user’s mobile device IS their desktop by virtue of plugging their device into a docking station to enable additional sets of ports, a bigger monitor and/or multiple monitors, a keyboard and mouse, and to charge their battery.&lt;/p&gt;  &lt;p&gt;One can also make the argument that over the next 2-3 years, the mobile OS business will trim down through attrition to only a few big players; right now the trajectory favors Apple and certain flavors of Android. A side note … doesn’t Android’s story remind you of Linux where at one point there were lots of players that ultimately trimmed down to a select few best of breed?&lt;/p&gt;  &lt;p&gt;With only 4%of the mobile market, is Microsoft too far behind to catch up in the requisite time? Could metaphors introduced by Android and/or Apple provide well known and soon-to-be intuitive features where Microsoft could be frozen out of the mobile OS market and thus by extension the desktop market?&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size="3"&gt;Why Microsoft Is Likely To Maintain Their Place&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Here are some reasons why the unthinkable Microsoft scenario may not happen, many of which should be attributed to a colleague of mine who counter-pointed me at every turn as I laid down the potential demise of Microsoft.&lt;/p&gt;  &lt;p&gt;Android, by nature of it being open source, is not a single, consistently deployed OS but in actuality many flavors of the same OS with a different feel to each one. By contrast, Microsoft, as usual, will continue to provide a singular vision of it’s Windows mobile OS providing a consistency across devices.&lt;/p&gt;  &lt;p&gt;Businesses and consumers alike use their devices to be continuously connected and to easily collaborate with one another. Outlook, Microsoft’s email client, is well known and well liked by it’s users making adoption by primarily email users highly likely. &lt;/p&gt;  &lt;p&gt;So you say that with a current 4% market share, Microsoft is too far behind and too late the to the game? &lt;/p&gt;  &lt;p&gt;Well, the throw away, appliance-like, aspect of mobile devices means that users will be upgrading to new devices every two years or so. As a result, the ability to enter the market with a better mouse trap and convert audiences from one OS to another is constantly available. &lt;/p&gt;  &lt;p&gt;My colleague also makes the point that the rapid nature of new, unforeseen, and game changing devices being introduced every 5 years&amp;#160; or sooner requires a constant introduction of new OS’s for the foreseeable future. &lt;/p&gt;  &lt;p&gt;We’ve gotten used to Microsoft letting others break ground then usurping control of said ground. However, with the speed at which mobile devices are being adopted and replacing desktops, one has to wonder if waiting has put their place in the OS market in jeopardy.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-4783266704595066881?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/4783266704595066881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/12/could-unthinkable-happen-to-microsoft.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4783266704595066881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4783266704595066881'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/12/could-unthinkable-happen-to-microsoft.html' title='Could the Unthinkable Happen to Microsoft?'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_-9FPYnfwXqs/TQK4ArUR74I/AAAAAAAAAEU/4-2xM38ckaM/s72-c/image_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-7907508389021505128</id><published>2010-12-10T11:43:00.001-08:00</published><updated>2010-12-10T11:52:35.465-08:00</updated><title type='text'>Dreamforce 2010</title><content type='html'>&lt;p&gt;This was my first Dreamforce and I have to say that Salesforce really knows how to put on a show. Nonetheless, it was a good take and worth the money and time. There was lots to see, plenty of people to talk to and a good number of significant Salesforce announcements . So here is my summary as it relates to app dev.&lt;/p&gt;  &lt;p&gt;The biggest news is their mega jump into cloud-based application development with the announcements of the acquisition of Heroku, partnership with VMWare to offer the VMForce platform, and their abstraction of the Salesforce database platform into a product called Database.com.&lt;/p&gt;  &lt;p&gt;Clearly, Salesforce’s slew of recent offerings is their foray into the competition for cloud-based developers joining Amazon EC2, Google App Engine, and Microsoft’s Azure.&lt;/p&gt;  &lt;p&gt;Salesforce is playing catch up. Amazon and Google leveraged their infrastructures for development and hosting services two years ago. Microsoft was talking about Azure soon thereafter and unveiled it for general release earlier this year. &lt;/p&gt;  &lt;p&gt;However, with the acquisition of Heroku, a hosted application development platform for Ruby on Rails developers, and their 107K hosted applications, Salesforce has bought a development community. If you are going to be late to the game, they did a great job of catching up.&lt;/p&gt;  &lt;p&gt;VMForce, which is a Salesforce/VMWare partnership, was unveiled this past summer and is geared towards the enterprise Java development community. Like Heroku, VMForce is a hosted application development environment. &lt;/p&gt;  &lt;p&gt;Both Heroku and VMForce provide developers with the ability to code locally and publish to the cloud.&lt;/p&gt;  &lt;p&gt;Database.com is an abstracted version of the Salesforce database platform. The IDE is completely web-based and all development happens in the cloud. Like all demos, it looks pretty slick but time will tell whether it is scalable and its performance is up to the standards that application developers and their customers expect.&lt;/p&gt;  &lt;p&gt;Salesforce has bet big on cloud-based application development. It’ll be interesting to see how it all shakes out between them, Google, Amazon and Microsoft.&lt;/p&gt;  &lt;p&gt;P.S. A funny thing happened to me on my first day back from Dreamforce. I logged into LinkedIn today and saw a note in my message box from Microsoft offering me a trial version of Microsoft CRM Online. Weird coincidence ;)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-7907508389021505128?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/7907508389021505128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/12/dreamforce-2010.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7907508389021505128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7907508389021505128'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/12/dreamforce-2010.html' title='Dreamforce 2010'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-630469000412765117</id><published>2010-11-15T14:42:00.001-08:00</published><updated>2010-11-17T14:32:19.360-08:00</updated><title type='text'>Humphrey's Requirements Uncertainty Principle</title><content type='html'>&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: tahoma; font-size: 12px; "&gt;&lt;a href="http://en.wikipedia.org/wiki/Watts_Humphrey"&gt;Watts S. Humphrey&lt;/a&gt; (&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;July 4, 1927 - October &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;28, &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;2010) passed away over the last few weeks and as a memorial to him I thought I'd post an article about his Requirements Uncertainty Principle, which is a cornerstone of Agile's approach to defining system requirements.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;Watts Humphrey contributed significant thought leadership in the software engineering process and one of the principles he states is requirements are inherently uncertain. To quote and excerpt from his book "&lt;i&gt;A Discipline for Software Engineering&lt;/i&gt;":&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;"This creative design process is complicated by the generally poor status of most requirements descriptions. This is not because the users or the system's designers are incompetent but because of what I call the requirements uncertainty principle: &lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;For a new software system, the requirements will not be completely known until after the users have used it.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;i&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;The true role of design is thus to create a workable solution to an ill-defined problem. While there is no procedural way to address this task, it is important to establish a rigorous and explicit design process that can identify and help to resolve the requirements uncertainties as early in the  developmental process as possible."&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px; "&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;Back in 1995 when this book was written (2 years after the founding of Scrum), Humphrey recognized that the software engineering process was broken and that repeated attempts at having a requirements document comprehensively describe a proposed system was met with failure many more times than with success. We are 15 years removed from this publication and there are many development teams still searching for this fictitious Holy Grail!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px; "&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px;"&gt;As we all know, Agile addresses Humphrey's Requirements Uncertainty Principle by:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;Capturing what users' want in user stories&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;At the time of development, collaborating orally and through whatever documentation is required to fully understand what is to be developed&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;Designing and developing features to address the requirement(s)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;&lt;i&gt;Then immediately thereafter providing what's been developed to the user(s) so the requirements can thus be fully known&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-size: 13px; line-height: 19px; "&gt;Repeat&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: 13px; line-height: 19px; "&gt;Why wait till the end of a project or many months after a feature has been developed to get feedback from our users. It is always most efficient to make the inevitable, yet unforeseen, changes to features immediately after they have been introduced.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-630469000412765117?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/630469000412765117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/11/humphreys-requirements-uncertainty.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/630469000412765117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/630469000412765117'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/11/humphreys-requirements-uncertainty.html' title='Humphrey&apos;s Requirements Uncertainty Principle'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-206341134870076251</id><published>2010-10-31T17:40:00.000-07:00</published><updated>2010-11-07T15:32:24.222-08:00</updated><title type='text'>The Uncertainty Principle in Software Engineering</title><content type='html'>Way back in 1996, three computer scientists, Hadar Ziv, Debra J Richardson, and Rene Klosch, wrote a paper that should be better known than it is. It's called &lt;i&gt;The Uncertainty Principle in Software Engineering&lt;/i&gt;. Many have shortened the reference to &lt;i&gt;Ziv's Uncertainty Principle&lt;/i&gt;. It states that "uncertainty is inherent and inevitable in software development processes and products". This principle sheds light on why Waterfall is well intentioned but flawed as a development methodology and Agile is better suited to deal with the uncertainty in software development.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ziv's Uncertainty Principle models uncertainty in software engineering using &lt;a href="http://en.wikipedia.org/wiki/Bayesian_network"&gt;Bayesian Belief Networks&lt;/a&gt;. In the software development world, &lt;i&gt;Bayesian nets&lt;/i&gt; are most commonly known in its use in search algorithms used on large volumes of text and hypertext.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The authors focused on five areas of software engineering to demonstrate uncertainty;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;requirements analysis&lt;/li&gt;&lt;li&gt;transition from requirements to design and coding&lt;/li&gt;&lt;li&gt;software re-engineering&lt;/li&gt;&lt;li&gt;software reuse&lt;/li&gt;&lt;li&gt;software testing&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The authors also provided three example sources of uncertainty of which below are my paraphrased descriptions of each:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Uncertainty in the problem domain&lt;/b&gt;: The problem, for which an application is developed, exists in the real world. We all know the real world has many uncertainties, many of which are not, and/or cannot, be addressed by the application being developed.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Uncertainty in the solution domain&lt;/b&gt;: Building the application itself introduces uncertainty beyond the uncertainties in the problem domain. The example used in the paper is the act of debugging of race conditions from concurrent use. There is uncertainty in the exact conditions that cause it as well as how to observe the condition for reproduction. The authors use Heisenberg's uncertainty principle as similar a affect where by the mere attempt at observing an environment will change it. If you've had to debug a problem with concurrent use, then I'm sure you see this connection.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Human participation&lt;/b&gt;: Human involvement introduces uncertainty through business logic built into the application. Business logic coded into an application do no typically address explicit uncertainties. We code mostly based on certainty - not uncertainty.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The point is that attempting to address in advance all of the potential situations and conditions that will be faced in production is futile. The most effective way of dealing with the inevitable uncertainties is to get the application in the hands of the users as soon as possible and let the real world tell us what needs to change. This doesn't mean production alone. It means putting the application in the hands of users who can use the application in real world circumstances.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Waterfall makes the noble, yet inherently flawed, attempt at making the application as rock solid as possible on paper before commencing development. Agile's principle of frequent inspection requires that the team deliver working code frequently. Agile accepts and embraces the fact that once in production, the real world will show that significant imagined truths will be deemed either false or incomplete thus requiring non-trivial modifications and enhancements. These changes are most effectively implemented when features are introduced and not when the application is fully developed.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-206341134870076251?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/206341134870076251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/10/uncertainty-principle-in-software.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/206341134870076251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/206341134870076251'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/10/uncertainty-principle-in-software.html' title='The Uncertainty Principle in Software Engineering'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-5843146715512890019</id><published>2010-10-30T07:14:00.000-07:00</published><updated>2010-10-30T08:49:35.490-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='user stories'/><title type='text'>Another Explanation of Story Points</title><content type='html'>Story points seem to be the most misunderstood concept within Agile so I'm going to take my stab at helping others to understand what they are and their importance. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The typical question is: Why estimate user stories with these ambiguous and arbitrary things call story points when I can use hours which inherently make more sense to me? &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Hours may make sense over story points at this very moment, but hopefully I'll be able to change your mind after you complete reading this article.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The major impediment to using hours is the variability between people and teams. I recently heard &lt;a href="http://en.wikipedia.org/wiki/Jeff_Sutherland"&gt;Jeff Sutherland&lt;/a&gt; state that a Yale University study has shown that what will take the best developer one hour to complete, the worst developer needs 10 hours to complete. When comparing best and worst teams that grows by an order of magnitude so an hour of the best teams translates to 2000 hour for the worst teams. The variability of hours is a real impediment and is typically a huge time consuming task on most projects. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Story points simplifies the estimation process by taking the developer/team variability out of the process by assigning a level of complexity to user stories. Many in the Agile community use a subset of the Fibonacci sequence as the units of measure; 1/2, 1, 2, 3, 5, 8, 13, 21, 34 and 45 per user story respectively. Think of story points as a more flexible version of assigning estimates as small, medium or large. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The story point estimation process begins by the team selecting the smallest user story and mutually agreeing on its complexity by assigning it a number from the Fibonacci subset of numbers. This user story is called the "keystone", meaning all other user story estimates are based on relative complexity to the keystone user story.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The byproduct of this is that upon sprint completion the team is able to report to the Product Owner in a more concise measurement of productivity - number of story points completed. The Product Owner sees things through the lens of project stories, features, etc. It makes more sense to communicate velocity, i.e. sprint productivity, in the form of story points than hours. Story points translate directly to what is manifested on screen when the working code is demonstrated and hours do not.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here is an example of using hours as a measurement of sprint effectiveness. A team of four developers work on a project for a two week sprint. At 40hrs per week, the four developers have 320 hours of available time to work during the sprint. However, once the sprint is complete, their velocity shows that they only accomplished 60 hours of work based on the estimated hours assigned to the user stories they completed. That is a misleading depiction of productivity that leads to irrational conversation about whether the team is working hard enough.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Using story points, the team's velocity is expressed in terms of productivity related to the complexity of the tasks completed. For example, let's say the Product Owner knows in advance of the sprint that the team's goal is to complete 35 story points. At sprint completion, the effectiveness of the sprint is measured against the sprint goal and previous sprint velocities. Story point velocity is used to view the overall project productivity in terms of acceleration/deceleration, i.e. is velocity increasing or decreasing. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The Product Owner can also easily translate velocity into an estimated release date more easily than with estimated hours. As an example, if there are 350 total story points remaining in the product backlog, and the velocity of the team is at 35 story points per sprint, then the product backlog will be exhausted in 10 sprints.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lastly, estimating projects is not only faster but more accurate than estimating in hours! Jeff Sutherland references two experiences related to this in one of his blog articles (&lt;a href="http://scrum.jeffsutherland.com/2010/04/story-points-why-are-they-better-than.html"&gt;read it here&lt;/a&gt;).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I hope this clears up what a story point is, why we use them, and provides a compelling reason to transition from hours to points.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-5843146715512890019?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/5843146715512890019/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/10/another-explanation-of-story-points.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5843146715512890019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5843146715512890019'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/10/another-explanation-of-story-points.html' title='Another Explanation of Story Points'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-2929421122966481276</id><published>2010-07-30T07:31:00.000-07:00</published><updated>2010-07-31T11:37:01.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>Performing a Review of a Software Development Team</title><content type='html'>&lt;div&gt;&lt;font face=""&gt;I've had several conversations this week about how difficult it is to provide reliable and consistent software development. Whether the team is an internal IT team, a product team, or a team of consultants, software development is rarely a pretty sight. It is sort of inline with the &amp;quot;making sausage&amp;quot; analogy. However, it doesn't have to be ugly so to help I thought I'd provide a checklist of attributes that every development team should consider.&lt;/font&gt;&lt;/div&gt;  &lt;p&gt;&lt;font face=""&gt;&lt;strong&gt;Development Infrastructure&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Each developer should be working in a virtual environment. Whether those VMs should live on the users computer or on the network is a debatable point. I believe the environments should live on the network to ensure they reside in the safest place possible. Residing VMs on the network also removes the dependency of a workstation being online.&lt;/p&gt;  &lt;p&gt;Each developers’ local version of source code and folder structure should be identical so if someone were to go from developer to developer the location and folder structure would be identical.&lt;/p&gt;  &lt;p&gt;There should be an integration environment to which a build is deployed at least once a day automatically. If the build fails the entire teams should be notified. At least one person should get an email when it succeeds. I’ve been in situations when everyone thought the build was succeeding reliably when in actuality the build machine was down. The integration environment should be identical to the production environment, e.g. web server, app server, database server. When the application is deployed it should tear down the servers to a base environment and rebuild it from scratch. At the very least, this environment provides developers with the ability to test their code in an environment that replicates production. Ideally, there should be automated QA testing that happens with each deployment. It doesn’t have to be full regression testing; an automated smoke test goes a long way.&lt;/p&gt;  &lt;p&gt;Continuous integration is a must have. Finding out immediately when a developer has broken the build is vital. It’s so much easier to fix issues as they occur than to untangle them weeks after many developers have introduced their own flavors of bugs.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font face=""&gt;Development Methodology&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This one is a big deal to me because I think very few shops actually have a development methodology. My evidence is anecdotal evidence from being a consultant talking with many clients and prospects and through interviewing software engineers. Most profess to having a methodology which turn out to be more of a set of development procedures than a methodology. &lt;/p&gt;  &lt;p&gt;One definition of the term methodology is “&lt;em&gt;the methods or organizing principles underlying a particular art, science, or other area of study.&lt;/em&gt;” Organizing principles is the key phrase. Organizing principles are more than a set of procedures. Your methodology should be well understood and those using it should evoke confidence that when the going gets rough that your organizing principles will protect you - as long as you stick to them. Abandoning your organizing principles, in whole or in part, when times get tough results in pain for you, your team, your management and your internal/external customers. In other words – everyone.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Estimation Techniques&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My own little survival handbook is called “&lt;em&gt;Demystifying the Black Art of Software Estimation&lt;/em&gt;” by Steve McConnell. In it, the author states that studies have shown that estimates are, on average, 30% of what the actual level of effort will be. Thus, know that your developers will significantly and consistently underestimate tasks. If you have never read a book on software estimation then it is a must. &lt;/p&gt;  &lt;p&gt;The absence of formal estimation techniques could be the biggest failure point in software development. Communicate estimates in the form or ranges not in single values; e.g. 4-6 weeks. Include all the ancillary tasks such as user documentation, technical documentation, project management, etc. When developing the schedule consider vacations and holidays. And lastly, stand strong in the face of resistance from those who want the job done cheaper and/or sooner. You can negotiate rate, features, etc. but you can’t negotiate how long it’s going to take by magically lowering the number of hours and expecting good things to come from it.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Strong Project Management     &lt;br /&gt;&lt;/strong&gt;A project manager, depending on the organization, is either just another resource keeping track of the project plan, or a leadership role on the project. The latter role requires the project manager to be an oracle and captain at the helm and is the one I prefer. “The captain” reference refers to that person as a significant influencer of decisions and direction. The oracle reference&amp;#160; refers to the ability to recognize patterns to identify risks and potential pitfalls. Project management is a combination of art and science. It also requires a strong personality who is willing to give bad news as soon as it is known. This isn’t easy for most people to do and lots shy away from it and futiley hoping things will work out. &lt;/p&gt;  &lt;p&gt;&lt;font face=""&gt;&lt;strong&gt;Team Composition&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;We all want the best an brightest. But what’s often overlooked is how the team is composed. Being smart isn’t enough. Your team needs to be filled with smart people who fill specific roles and view the world in a specific way. People can be big picture oriented or not, detail oriented or not, organized or not, ambitious or not, etc. It is vital to architect your teams composition, meaning, defining how many of what types of people you want/need on the team. Teams need a variety of types to be successful. Know what those types are and fill them accordingly.&lt;/p&gt;  &lt;p&gt;&lt;font face=""&gt;&lt;strong&gt;QA Process&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The business should write the test plans and ideally they should be written before development begins. If you are an Agile shop, each user story should have test scenarios. There should be automated QA testing. If there are budget constraints there are free tools out there to leverage (Selenium and NUnit combined with Cruise Control will work fine in most cases).&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font face=""&gt;Stakeholder Roles &amp;amp; &lt;/font&gt;Cross Functional Relationships&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The business users should be heavily involved. My mantra to customers when negotiating for their time is “the quality of the end product correlates directly with the level of your direct involvement.” Given that they are often making a significant capital expenditure, they tend to get involved to whatever degree they are needed. The reality of the outcome as a result of their involvement, or lack thereof, just needs to be communicated.&lt;/p&gt;  &lt;p&gt;Resource roles should be clearly defined at the beginning of the project. There should be no ambiguity with what’s needed from the business users. &lt;/p&gt;  &lt;p&gt;Cross functional relationships should be nurtured during and outside of projects. it is important that the business and technical teams know that they are partners and together they will be succeed or fail.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Communication&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The glue that hold all of these together individually and as a whole is communication. Everyone should be communicating to everyone often and transparently. When issues occur, make sure everyone knows. I’m not saying that there shouldn’t be a communication protocol. There should be. However, when Engineering disagrees that a bug found by QA is actually a bug, the engineer who developed the feature should have direct access to the QA engineer who logged the bug and the product manager who articulated the feature. &lt;/p&gt;  &lt;p&gt;Customers should be involved on a daily basis (with Agile via the daily standup). This makes the weekly status report nothing more than a summary of what the customer already knows. Demo working code frequently to get feedback from the customer. At least one engineer should be in the demo to hear directly from the customer and be able to ask questions accordingly.&lt;/p&gt;  &lt;p&gt;Transparency can be scary because we are afraid of the repercussions of allowing the customer to see our problems as they occur. What I’ve found is that customers are reasonable business people who understand the ups and downs of projects. The surprises are what get them angry. Transparency eliminates surprises and keeps everyone in the loop with everything that is happening with the project. Under this umbrella of openness the cross functional team inherently act as a unified team navigating the project towards a mutual success.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-2929421122966481276?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/2929421122966481276/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/07/performing-review-of-software.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2929421122966481276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2929421122966481276'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/07/performing-review-of-software.html' title='Performing a Review of a Software Development Team'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-4278615353805215395</id><published>2010-03-28T08:31:00.001-07:00</published><updated>2010-03-28T08:41:51.953-07:00</updated><title type='text'>Why Cloud Computing Won’t Lead to Dumb Terminals</title><content type='html'>&lt;p&gt;It’s easy to fast forward to a time where cloud computing will once again lead to an era of dumb terminals. However, I don’t believe that to be true.&lt;/p&gt;  &lt;p&gt;Back when dumb terminals were the norm, the world of computers was quite different than it is now. Most importantly the cost of computer systems was staggeringly higher than it is now and the pace of advancement was much slower. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Moore%27s_law" target="_blank"&gt;Moore’s Law&lt;/a&gt; is at a point where our individual workstations have processing power equivalent to high end servers of only a few years ago. It only makes sense that horsepower at the workstation provides for a promising future for distributed computing and at some point the ubiquity of grid computing. Leveraging millions, and even billions, of computers as opposed to a much smaller set of monolithic servers is a more likely model. &lt;/p&gt;  &lt;p&gt;A server-based model provides for central points of of failure; distributed and grid computing does not.&lt;/p&gt;  &lt;p&gt;With cloud computing, the proximity of our data is less important (and likely to be less obvious) but it does not necessarily point to a future where my laptop plugs into the network as a throw back to mainframe days. &lt;/p&gt;  &lt;p&gt;I believe it actually points to a time that compares more closely to peer to peer computing, similar to Groove’s replication of data across a network of computers. This eliminates central points of failure, promotes greater power (horsepower and&amp;#160; volume) by leveraging large numbers, and is more conducive to offline computing and synchronization.&lt;/p&gt;  &lt;p&gt;We are all guessing at this early stage of cloud computing, on which every server and workstation is merely a node, so I’m interested in your perspective.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-4278615353805215395?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/4278615353805215395/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/03/why-cloud-computing-wont-lead-to-dumb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4278615353805215395'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4278615353805215395'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/03/why-cloud-computing-wont-lead-to-dumb.html' title='Why Cloud Computing Won’t Lead to Dumb Terminals'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-6491878124210677180</id><published>2010-03-10T09:42:00.001-08:00</published><updated>2010-03-10T09:42:04.902-08:00</updated><title type='text'>The Proximity Problem: A Cloud Fable Part II</title><content type='html'>&lt;p&gt;The Internet has provided opportunities to advance efficiencies like no other time in human history. With proximity becoming less important every nanosecond, collaboration between parties half way around the world is now possible on an on-demand and real-time basis. I’d like to think altruistically and see the world as a utopian Garden of Eden where everyone is working together for the betterment of mankind, but alas, that is not reality - especially in the trade of underground contraband.&lt;/p&gt;  &lt;p&gt;Manuel is part of a South American drug cartel. He and his peers view their operation like any other multi-national conglomerate. The objective is to increase revenue and profits. Just-In-Time Manufacturing is as real here as in any other enterprise. The concept of Kanban, the infamous innovation from the Toyota Production Process (TPS) that has been replicated in so many industries is a fully blown implementation in Manuel’s operation.&lt;/p&gt;  &lt;p&gt;The United States, Manuel’s monolithic neighbor to the north, is not only his biggest and most profitable region but also his most tenacious and sophisticated foe. Travel to the US for business meetings has never been risk free. Since 9/11, however, the risks associated with in-person business meetings whether in the US or at home, have increased dramatically.&lt;/p&gt;  &lt;p&gt;Like any high performing enterprise, Manuel’s is innovative and constantly striving to stay ahead of their competition. With the risk of international travel increasing for both Manuel and his customers, the cloud has been a boon to removing proximity as an attribute of doing business.&lt;/p&gt;  &lt;p&gt;One innovation is the use of video conferencing as a way of entering into business agreements between Manuel and his customers. Not only does video conferencing mitigate the risk of in-person meetings but also provides the byproduct of recording the meetings thus acting as a binding contract between the parties. &lt;/p&gt;  &lt;p&gt;When choosing his provider, Manuel knew that he could not choose one from the US. The Patriot Act took that option off the table immediately. So he opted for an off-shore provider. One domiciled in a sympathetic nation. In addition to the typical criteria such as functionality, bandwidth, and up-time, Manuel also considered things like extradition and privacy laws of the host nation. &lt;/p&gt;  &lt;p&gt;Manuel’s organization embraced the cloud in many ways beyond video conferencing. Coupled with video conferencing, his cloud-based providers for storage, ERP, CRM, email, and banking, Manuel could conduct business anywhere and with anyone. Moving his operation was limited to moving people – not infrastructure and data. &lt;/p&gt;  &lt;p&gt;What Manuel did not, and likely could not, consider was the complete infrastructure of his providers.&lt;/p&gt;  &lt;p&gt;Cloud-providers potential Achilles heel is redundancy and failover. Customers of cloud providers expect near 100% up-time. The best providers fall into the Five-9s category (99.999%). To provide that kind of uptime there needs to be a sophisticated infrastructure with the same goal as Manuel – minimize proximity as a central point of failure. What Manuel did not know was that several of his providers contracted with US firms for redundancy, load balancing, and disaster recovery.&lt;/p&gt;  &lt;p&gt;The one flaw in Manuel’s planning has now come home to roost.&lt;/p&gt;  &lt;p&gt;The US DEA has indicted Manuel and a Chicago-based group, which was made up of US citizens, green-card holders, and illegal aliens, for illegal drug trafficking. After years of undercover operations, wire tapping, and packet sniffing, the DEA uncovered a recording of a video conference contract from a data center in Tucson, AZ. The Tucson data center was a tertiary load-balancing location for Manuel’s Chinese conferencing provider. Apparently Manuel struck a big deal over the Chinese New Year when many Chinese expatriates from around the world used his provider to video conference with their families back home. The provider experienced a high volume of calls when Manuel entered into these negotiations which kicked in the tertiary site in Tucson based on call volume and proximity of the callers in the system at the time – the Tucson data center was the most central of those data centers between Chicago and Manuel’s Venezuelan villa. &lt;/p&gt;  &lt;p&gt;The DEA has its work cut out for it. Manuel is busted but his nation is unfriendly to US interests. The domicile of the video conferencing provider is likely to be equally uncooperative. If the US is lucky enough through interrogations or packet sniffing to intercept data related to Manuel’s other cloud-based providers, it’s likely to encounter the same minimal level of cooperation from those providers and their home nations.&lt;/p&gt;  &lt;p&gt;However, Manuel has an equally uncomfortable situation. His epiphany is that he has no idea where all his data are stored and by the very nature of the Internet there is likely no way to remove it from the locations that can work to his disadvantage. His proximity and flexibility advantages are to an unknown extent countered by his lack of control over those environments.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-6491878124210677180?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/6491878124210677180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/03/proximity-problem-cloud-fable-part-ii.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6491878124210677180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6491878124210677180'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/03/proximity-problem-cloud-fable-part-ii.html' title='The Proximity Problem: A Cloud Fable Part II'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-100886421332144878</id><published>2010-03-05T08:13:00.001-08:00</published><updated>2010-03-05T08:13:01.867-08:00</updated><title type='text'>Going Rogue: A Cloud Fable</title><content type='html'>&lt;p&gt;The leadership within a certain division, let’s call it the BizDev division, of a fortune 500 company is entrepreneurial by nature and thus results oriented. BizDev is impatient with the red-tape required to get anything done. Capital expenditures are difficult to get approved and initiatives are equally difficult to resource, initiate, and complete. The leadership’s perception of their peers within the divisions from which they consume services is that because of resource constraints they have a basic reflex towards being obstructionists.&lt;/p&gt;  &lt;p&gt;Being entrepreneurial, innovation comes naturally to the BizDev leadership team. They contemplated bypassing the corporate infrastructure and protocol for the greater good of their group. The BizDev team looked to the cloud for solutions to their bureaucratic woes. Using operational instead of capital expenditures for outsourced cloud services made sense to them. Implementing cloud solutions is quick, the process is simple, and if they stay mainstream, the vendors will be known quantities with effective and reliable track records. Why trudge the internal landscape when you can subscribe to existing solutions that satisfy the 80-20 rule. BizDev decided to roll the dice; guessing that the monolith didn’t have the appetite to stop them&lt;/p&gt;  &lt;p&gt;BizDev was going rogue.&lt;/p&gt;  &lt;p&gt;BizDev specializes in content management and as such has significant storage requirements. They looked to Infrastructure as a Service (IaaS) providers to solve their problem. Storing content at an IaaS provides them with the ability to increase and decrease their requirements in a self-service kind of way with virtually no red-tape. The BizDev team saw this as a no brainer and after a relatively quick selection process contracted with a vendor and began using their services shortly thereafter. The IT division with the company got wind of the cloud deal and although outwardly condemns the move doesn’t fight it and is actually relieved to get BizDev off their back.&lt;/p&gt;  &lt;p&gt;BizDev’s gambit paid off. Over the course of several years, BizDev’s use of content management providers became more sophisticated by using specific vendors based on cost and functionality related to specific media. They also expanded its use of the cloud by encouraging its thought leaders to blog using the blog space of their choice and by actively using as many of the available social networking sites as possible.&lt;/p&gt;  &lt;p&gt;Word of BizDev’s success in the cloud spread throughout the organization to other divisions. Many using the cloud for their own purposes; marketing, software development, legal services, ERP, CRM; you name the cloud service offering and it was being used somewhere within the company.&lt;/p&gt;  &lt;p&gt;Although there was apprehension about the lack of governance over the use of cloud providers and the policies around their use, there was no appetite to take on a task that most anticipated to be a politically charged and multi-year project involving many resources. The use of cloud services was widespread and for the most was providing huge benefits with regards to speed to market, flexibility, and cost reduction. The cloud was considered a boon to efficiency that dramatically improved the organization.&lt;/p&gt;  &lt;p&gt;Until the indictment.&lt;/p&gt;  &lt;p&gt;The SEC came down hard on the company for alleged indiscretions related to business deals, profit forecasts, and accounting schemes. In addition to emails related to the executives of the organization, the opposing counsel is asking for all the marketing material related to BizDev and other business units to determine if fraudulent claims have been made about product effectiveness.&lt;/p&gt;  &lt;p&gt;The company’s lack of governance over cloud resources is now making the process of providing discoverable resources to opposing counsel within federally mandated time frames untenable. &lt;/p&gt;  &lt;p&gt;Where does all the marketing content reside? How do they capture what’s required and filter out what isn’t? Are the cloud providers prepared (and willing) to provide what’s requested by the opposing counsel? What are their retention policies and do they follow federally mandated regulations? &lt;/p&gt;  &lt;p&gt;Have the respective business units maintained compliance with corporate policies related to external marketing? Is there a controlled and comprehensive set of messaging that’s contained in blogs and articles written by thought leaders? Are there any incriminating status messages posted by overzealous thought leaders in their favorite social networking sites? How does the company search for, retrieve, and provide social networking status messages for key individuals?&lt;/p&gt;  &lt;p&gt;Although the cloud is becoming, and will continue to be, a direction for cheap and scalable solutions to common business problems, without governance business entities potentially put themselves in tenuous positions. The cloud is just another option like the myriad of other options for conducting business operations. And as such, cloud vendors should fall under the governance of corporate policies like any other vendor. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-100886421332144878?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/100886421332144878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/03/going-rogue-cloud-fable.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/100886421332144878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/100886421332144878'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/03/going-rogue-cloud-fable.html' title='Going Rogue: A Cloud Fable'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-2006459540745962471</id><published>2010-02-20T11:53:00.001-08:00</published><updated>2010-02-20T12:16:38.962-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Which Cloud is right for you?</title><content type='html'>&lt;p&gt;Deciding which cloud is right for your software engineering team isn’t as difficult as you would think. The big players getting all the attention in the media today are Google, Amazon, Microsoft, and Force.com. For most software engineering teams, however, none of them is the best option from a development perspective.&lt;/p&gt;  &lt;p&gt;The big four are geared more to production environments than development. Although most of them provide the ability to extend their environments through local IDEs like Visual Studio and Eclipse, that’s hardly enough for a development team. They don’t address things like integration, testing, and demo environments. &lt;/p&gt;  &lt;p&gt;A good example of the inadequacy of the big four as software engineering environments is the fact that Amazon deletes VMs when they are shut down. That’s clearly indicative of a public facing focus where shutting down a VM equates with shutting the doors on a business. Thus, Amazon, as well as Google, Microsoft and Force.com, are not options when moving “development” to the cloud &lt;/p&gt;  &lt;p&gt;A more appropriate approach for cloud development environments are Infrastructure as a Service (IaaS) providers geared specifically towards development teams. They are lesser known but I assure you they are out there.&lt;/p&gt;  &lt;p&gt;Under this structure, environments can be spooled up on demand. Costs are controlled by having VMs running during working hours and shut off during off hours. In addition to conventional application development, teams need temporary plug and play VM infrastructures to be used for an finite period of time to develop POCs, demo systems, troubleshooting specific issues, and many other one-off situations.&lt;/p&gt;  &lt;p&gt;My firm’s application support service offering is an ideal function that is conducive for IaaS providers. Our development team has 40 VMs consisting of various client applications and project infrastructures. Putting all of them in the cloud with the ability to start and shutdown on demand based on client requests provides our team with the ability to focus on our core competency (software development) and offload those functions that aren’t our core competency (infrastructure engineering and management) to cloud providers.&lt;/p&gt;  &lt;p&gt;IaaS providers aren’t for everyone either. They are ideal for organizations with lots of infrastructure needs. They are typically not suitable for public facing production environments nor are they ideal of a single demo VM or similarly smaller infrastructure.&lt;/p&gt;  &lt;p&gt;In general, here are the rules of thumb:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Big Four: If you have a public facing product with a high hit rate, then one of the big four providers is likely to be the right choice. &lt;/li&gt;    &lt;li&gt;Infrastructure as a Service (IaaS):&lt;/li&gt;    &lt;ol&gt;     &lt;li&gt;If&amp;#160; you are a software development team with many sophisticated infrastructures to support many projects and would like to offload the infrastructure supporting the SDLC, then an IaaS provide is the right choice. &lt;/li&gt;      &lt;li&gt;If you are a startup product company and do not want to invest in infrastructure engineering resources, then an IaaS provider is worth considering.&lt;/li&gt;   &lt;/ol&gt;    &lt;li&gt;Internal Resources: If you are a small application development team with few environments, your internal resources or that of your consulting vendor will be the most efficient solution.&lt;/li&gt; &lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-2006459540745962471?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/2006459540745962471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/02/which-cloud-is-right-for-you.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2006459540745962471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2006459540745962471'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/02/which-cloud-is-right-for-you.html' title='Which Cloud is right for you?'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-980551229027824853</id><published>2010-02-06T14:11:00.001-08:00</published><updated>2010-03-01T13:04:25.039-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Evolution of Software Development and Cloud Computing</title><content type='html'>&lt;p&gt;Cloud computing is a relatively new term for what has been around for a decade – leveraging virtual environments within the firewall and beyond it. Many software engineering teams have been in the cloud since its inception and will likely be drivers for its adoption going forward. &lt;/p&gt;&lt;p&gt;HOW DID WE GET HERE?&lt;/p&gt;&lt;p&gt;Prior to virtual environments, the infrastructure to support development efforts was physical. Thus, software engineers had their development tools loaded on their respective workstations and integration, test, and production environments were made up of servers on the network. Coupled with the expense of physical hardware for every required infrastructure environment, installing development tools and custom applications on workstations and servers often had a corrupting effect on those machines. &lt;/p&gt;&lt;p&gt;If you subscribe to the definition of a cloud environment as being any that is virtual – even those behind the firewall – then the first iteration of a private cloud for software development came with the emergence of using virtual environments for development workstations. This had a mammoth effect on development efficiencies and IT governance.&lt;br /&gt;&lt;br /&gt;As an example, in 2001, I was hired as a consultant to help a client develop the next generation of their commercial e-Discovery product. The suite of applications were complex with many moving parts and technologies. It took the average developer 1-2 weeks to get their development environment up and running. Because of the expense associated with physical infrastructures there were limited environments to promote code, and continuous integration wasn’t even a dream.&lt;br /&gt;&lt;br /&gt;I was hired back again in 2005 for yet another next generation development effort. This time, the developer workstations were based off of a base VM. Getting up in running took hours instead of weeks. The fact that developer tools were loaded on the VM instead of the host machine was a dramatic improvement for IT. At last, a software engineer’s machine was like everyone else's in the organization.&lt;br /&gt;&lt;br /&gt;In addition to developer workstations, the integration and test environments were also virtualized. This allowed the release engineers to revert environments to their base snapshots in preparation for new releases. When we needed to branch testing, we would spool up another virtual environment. Our only limitation was the hardware on which those environments were deployed.&lt;/p&gt;&lt;p&gt;WHERE ARE WE GOING?&lt;/p&gt;&lt;p&gt;The last several years have seen virtual environments that exist beyond the firewall. The current ‘big four’ front runners are Google App Engine, Amazon Web Services (AWS), Force.com by SalesForce, and Microsoft’s Azure platform. These providers offer scalability for large volume web-based applications with built-in clustering and load balancing.&lt;/p&gt;&lt;p&gt;However, the big four aren’t inherently development environments with sophisticated processes for building and testing applications and maintaining source code control, build scripts, and other requirements of complex projects. For these types of projects, you would use Infrastructure as a Service (IaaS) providers. IaaS providers allow teams to customize virtual server and workstation configurations in a plug and play fashion that’s conducive to on-going development.&lt;/p&gt;&lt;p&gt;A complete cloud solution would be to combine an IaaS provider with one of the big four. The IaaS provider would be the infrastructure for the development and test environments. Releases would be published from the IaaS provider to one of the big four for your high traffic web app.&lt;/p&gt;&lt;p&gt;Software Engineering teams interested in using cloud providers need to decide which flavor of Internet-based cloud infrastructure is appropriate for them; extending a developers workspace and “being” the developers workspace.&lt;/p&gt;&lt;p&gt;Each of the big four allow developers to use existing IDEs to extend their development environment. Here are the major IDEs and the providers support.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Visual Studio: Azure&lt;/li&gt;&lt;li&gt;Eclipse: Google App Engine, AWS, Force.com, Azure&lt;/li&gt;&lt;li&gt;NetBeans: Google App Engine, AWS&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Each of the big four support one or more programming languages. This list below is not comprehensive but provides the major languages:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Azure: C#, Java, PHP, Python&lt;/li&gt;&lt;li&gt;Google App Engine: Java, Python&lt;/li&gt;&lt;li&gt;AWS: C++, C#, Java, Python&lt;/li&gt;&lt;li&gt;Force.com: Active Script, Apex, Visual Force&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;As you can see above, which platform you choose is dependent on your internal expertise. Force.com is the platform that does not provide support for the major languages. However, it’s a more rapid development environment than the others – somewhat like a 4 GL – and I anticipate that it will be a player for the long haul.&lt;/p&gt;&lt;p&gt;The appropriate infrastructure associated with the decision to move to a cloud provider is a decision to think through carefully. The various configurations are virtually unlimited, e.g. have the entirety of your virtual environments either behind or in front of the firewall, split environments between behind and in front of the firewall, and deciding which, if any, segments of the infrastructure are public.&lt;/p&gt;&lt;p&gt;The adoption of cloud providers is a non-trivial decision as is the design of the appropriate infrastructure. However, as a manager, software engineer, and consultant, the cloud is likely to be a catalyst for a trend that offers developers an opportunity to think more about development and less about infrastructure. Which is as it should be.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-980551229027824853?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/980551229027824853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2010/02/software-development-and-cloud.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/980551229027824853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/980551229027824853'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2010/02/software-development-and-cloud.html' title='Evolution of Software Development and Cloud Computing'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-8007603678675297992</id><published>2009-11-26T05:22:00.001-08:00</published><updated>2009-11-28T04:28:23.881-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social computing'/><title type='text'>Will Google Wave Re-Define the Blog Paradigm?</title><content type='html'>As we all know, blogs are a social networking tool to desseminate information and capture feedback. The tools currently in use &lt;em&gt;almost&lt;/em&gt; provide the mechanism for discussion but don't quite get there. Google Wave holds promise of bringing blogs to the conversational promiseland - at least in the world of typed messages.&lt;br /&gt;&lt;br /&gt;Currently, the process works like this: Someone writes a blog article that is typically several paragraphs long with several points linked together by logical reasoning. After visitors read the article, they input a comment at the bottom. The comments usually consist of general commentary on the article subject matter, specific commentary on one or more points within the article, or extending the article through logical relationships to subject matter not discussed in the article.&lt;br /&gt;&lt;br /&gt;Commentary from a blogs reader ship currently consists of narrative pointers into the article, e.g. "&lt;em&gt;I disagree with you when you state...&lt;/em&gt;". These narrative pointers become exponentially more cumbersome with high volumes of visitors and comments. Discussion is lost because it quickly becomes impossible to follow the massive array of narrative pointers contained in the set of disparate comments.&lt;br /&gt;&lt;br /&gt;Google Wave blows up this paradigm by allowing inline commentary within the article. Comments are no longer aggregated by visitor containing multiple points at multiple locations within the article. Comments become decentralized and are input directly in the article at the location where the specific points are made. This allows follow-on visitors to add to the discussion on just those points with which they have interest and absolved of the prerequisite filtering of content and comments that currently exists. The playback feature is also a pretty cool way of being able to read the article without comments and follow visitor feedback sequentially as they occurred.&lt;br /&gt;&lt;br /&gt;I posted much of the text from this blog to a wave that I made public. Virtually immediately after posting it, I started getting inline feedback from a Wave user. If you have a Google Wave account you can view it by searching for &lt;span style="FONT-STYLE: italic"&gt;with:public google notarangelo&lt;/span&gt;&lt;span style="font-size:+0;"&gt;. There's some interesting commentary.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;If you want to contact me using this new and interesting medium - and what I think is the future of blogging - then get a Google Wave account (I have some invites available if you need one) and ping me &lt;a href="mailto:jack.notarangelo@googlewave.com"&gt;jack.notarangelo@googlewave.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can read more about Google wave at &lt;a href="http://wave.google.com/"&gt;http://wave.google.com/&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-8007603678675297992?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/8007603678675297992/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/11/will-google-wave-re-define-blog.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8007603678675297992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8007603678675297992'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/11/will-google-wave-re-define-blog.html' title='Will Google Wave Re-Define the Blog Paradigm?'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-6541545081725558333</id><published>2009-11-10T06:16:00.000-08:00</published><updated>2009-11-14T08:09:09.156-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>Economic Darwinism</title><content type='html'>Over the summer, I wrote an article in this space called &lt;a href="http://applicationengineering.blogspot.com/2009/07/it-end-of-july-2009-and-we-are-in.html"&gt;It's Winter in July&lt;/a&gt;. The premise being that in these tough economic times everything you've done to this point in your career has culminated to your current market value. This article extends that subject in the form of what I call Economic Darwinism. Surprisingly, my Google searches on the term came up with hits but not in the way that I think of it.&lt;br /&gt;&lt;br /&gt;Economic Darwinism in my mind is related to survival of the fittest. We have been in this downturn for over a year and it's been difficult. Lot's of layoffs, attrition, hard looks at the way we do business, and in many cases lots of change.&lt;br /&gt;&lt;br /&gt;For the past year or so you have been in survival mode which is a good and healthy process. If you have survived being in survival mode then it likely means that you are built for what you are doing.&lt;br /&gt;&lt;br /&gt;When you look around at your respective team members you likely see a strong set of individuals that as a group can deliver whatever needs to be delivered. In a culture of meritocracy, which for the most part describes software engineering, we have been transformed into lean teams with a kick-ass set of players that gets shit done. Yes, it was painful getting to this point, but the result is good.&lt;br /&gt;&lt;br /&gt;If that accurately describes your situation, then from a leadership perspective the view should be "The recovery starts with us. The inevitable new phase of growth will be through this team. And through that inevitable growth there are opportunities for everyone."&lt;br /&gt;&lt;br /&gt;Morale, whether poor or euphoric, is a state of mind. The thoughts bouncing around your cranium, regardless of whether they are verbalized or not, influence those whom you lead. It's your belief system that will - and does - significantly influence whether your team feels confident or insecure. Look around, see the strength of your team, and &lt;em&gt;know&lt;/em&gt; that the recovery starts with you. If you believe that, confidence/morale will increase. If you choose otherwise then you should expect the malaise to continue.&lt;br /&gt;&lt;br /&gt;Let there be no doubt that which ever side you land is all in your head. Your harvest is in part dependent on the seeds sown now in the Spring of this recovery.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-6541545081725558333?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/6541545081725558333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/11/economic-darwinism.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6541545081725558333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6541545081725558333'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/11/economic-darwinism.html' title='Economic Darwinism'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-8399805248284907779</id><published>2009-10-26T04:17:00.001-07:00</published><updated>2009-12-15T04:42:34.838-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cloud computing'/><title type='text'>Cloud Computing: Hype vs. Reality</title><content type='html'>&lt;p&gt;The term &lt;em&gt;cloud computing&lt;/em&gt; is a recent branding effort for an umbrella set of hosted service offerings. Of course hosted offerings have been around for decades - SalesForce.com has been providing an Internet-based (i.e. cloud computing) CRM solution since 2000. There are also a plethora of other vendors with offerings related to Platform as a Service (PaaS), Infrastructure as a Service (IaaS), and Software as a Service (SaaS).&lt;/p&gt;&lt;p&gt;Cloud configurations fall into three categories – Public, Hybrid, and Private.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Public&lt;/strong&gt;: Public cloud offerings are those that are typically subscription-based where all of the hardware and software purchases and maintenance are abstracted away from the customer. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Hybrid&lt;/strong&gt;: Hybrid cloud offerings are provided with a combination of abstracted hardware and software with private infrastructure configurations. It is presumed that this will be the most likely configuration as cloud services become more mature and mainstream. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Private&lt;/strong&gt;: A private cloud is an Internet-based offering where the entire infrastructure is managed by customer personnel and typically has security applied to limit usage to authorized personnel.&lt;/p&gt;&lt;p&gt;There are some who will refute my definitions above as too limited because they consider on-site virtualized environments as a valid cloud configuration. In my view, if the service isn't Internet-based then it's not in the cloud. Time will be the arbiter of this amorphous aspect of cloud computing.&lt;/p&gt;&lt;p&gt;So why has something that has been around for so long now become worthy of re-branding? The major drivers are the ubiquity of the Internet, the reliability of Internet connections, the maturity of web-based interfacing technologies, and the rapidly expanding blur between desktop and web.&lt;/p&gt;&lt;p&gt;The remaining obstacle for most organizations with moving to the cloud model is security.&lt;br /&gt;Moving sensitive data and intellectual property to a cloud provider is a risk to be considered carefully. An internal infrastructure can be completely isolated from the outside world where malicious activity is voracious to say the least. In fact, it's safe to say that because of intellectual property and the sensitive nature of the data being stored, that for some companies there will always be a need for an internal infrastructure. Government regulations regarding privacy and organizations obligations to ensure protection of personal data will continue to be a driving force for internal resources.&lt;/p&gt;&lt;p&gt;There is also the counterpoint that because of perception and the fact that their services are in the cloud, cloud vendors focus significantly more attention to security than many internal IT teams in organizations where IT is not the core service. That is a valid point that deserves consideration.&lt;/p&gt;&lt;p&gt;You could also make a case that cloud computing implemented as the status quo across all industries and organization size - in its current form – could be considered a national economic risk. As cloud computing proliferates and third parties develop widgets of functionality as a subscription-based model, resources from disparate cloud environments will become interwoven into applications resulting in nested dependencies. When developing the next killer application, why invent a wheel when you can subscribe to one and integrate it into its processes? A benign or malicious act that triggers a negative event across the Internet could have significant economic consequences depending on its impact. There could also be inherent compatibility issues when cobbling unrelated cloud-based widgets together.&lt;/p&gt;&lt;p&gt;Cloud computing has also been touted as the return to dumb terminals with all software being cloud and subscription-based. I can not see that happening in the short to mid-term. Much of this article was written on my vacation without wireless Internet access. My writing was done offline using software local to my computer. Installing binaries locally is going to be a way of life for the foreseeable future albeit possibly a bit neutered in some instances since more and more of what appears to be local functionality in many applications is actually sourced from the web. (e.g. online help, lists of templates, installing add-ins)&lt;/p&gt;&lt;p&gt;If you are reading this because you are interested in cloud computing and are considering how to leverage it for your organization then you are ahead of the curve. Take your time, develop a long-term strategy (including governance policies), implement in controlled phases, and seek advice from professionals to ensure your implementation is the right one for your organization.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-8399805248284907779?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/8399805248284907779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/10/cloud-computing-hype-vs-reality.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8399805248284907779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8399805248284907779'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/10/cloud-computing-hype-vs-reality.html' title='Cloud Computing: Hype vs. Reality'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-66159465028447383</id><published>2009-09-28T16:25:00.001-07:00</published><updated>2009-09-29T04:22:05.959-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social computing'/><title type='text'>Social Networking, Privacy, and Identity Verification</title><content type='html'>&lt;p&gt;The value of total obscurity on the Internet is overestimated and is more destructive than constructive. Our fears about privacy infringement are largely irrational; at least in the context of social networking.&lt;/p&gt;&lt;p&gt;The ability to be totally obscure allows those bent on malicious intent to cloak themselves in an anonymous or fake identity – allowing them to say anything they want, about anyone they want, and without any repercussions.&lt;/p&gt;&lt;p&gt;It’s still rare, but sites are starting to require identity verification and that trend, in my opinion, is certain to continue. It has to. Identity verification provides for accountability and enforces a set of socially acceptable rules of etiquette just as they exist in the &lt;em&gt;real&lt;/em&gt; world.&lt;/p&gt;&lt;p&gt;Most of us &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;aren&lt;/span&gt;&lt;/span&gt;’t afraid to have our identification verified for credit cards, licenses, loans, job verifications, and many other situations. The large majority of us willingly provide our credit card information to purchase goods over the Internet.&lt;/p&gt;&lt;p&gt;Is caller ID a bad thing? Don’t most of us frown upon those that restrict the rest of us from seeing their identity when they call by setting their caller ID to private?&lt;/p&gt;&lt;p&gt;I just joined a social networking site called &lt;a href="http://www.bestthinking.com/"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;BestThinking&lt;/span&gt;&lt;/span&gt;.com &lt;/a&gt;that requires subscribers to have their identification verified. And you know what? I was not only willing but found it refreshing!&lt;/p&gt;&lt;p&gt;They do it in a very clever way with little personal info - nothing that you would consider a security risk to divulge – and a short multiple choice quiz of information about you to make sure you are really you. The bottom line is that social networking sites where those involved are willing to be known by their &lt;em&gt;real &lt;/em&gt;identity adds credibility to discussions and opinions.&lt;/p&gt;&lt;p&gt;Remember the sense of foreboding people had when purchasing goods over the Internet was first introduced? As time went on we realized that our fears were irrational. Yes, there is identity theft and sometimes on a colossal level. That is what comes with forging a new frontier. It takes time to get it right. In spite of that, we continue to purchase goods over the Internet because we consider there to be considerably more value than risk.&lt;/p&gt;&lt;p&gt;We are now forging forward further into the Internet as a new frontier where a new level of identity verification will become increasingly more required and hence a more credible place to share information.&lt;/p&gt;&lt;p&gt;Do I think we should encourage legislation to force identity verification as a prerequisite to participating on the Internet? That would be a hearty No. &lt;/p&gt;&lt;p&gt;I do, however, think identity verification will become ubiquitous within this coming decade for the sheer reason that deep down we want to mold the virtual world into one that resembles, as closely as possible, the physical one in which we live.&lt;/p&gt;&lt;p&gt;Why?&lt;/p&gt;&lt;p&gt;In addition to basic familiarity and the comfort that brings, the physical world is more soundly implemented; especially with regards to established rules of engagement. The Internet adopting attributes of the physical world, which have been tested, modified, and enhanced over many &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;millennia&lt;/span&gt;&lt;/span&gt;, will help to realize the potential of the virtual world. Identity verification brings the Internet one step closer to maturity and in this corner it’s a welcomed step.&lt;/p&gt;&lt;p&gt;I'm interested in your thoughts.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-66159465028447383?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/66159465028447383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/09/social-networking-privacy-and-identity.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/66159465028447383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/66159465028447383'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/09/social-networking-privacy-and-identity.html' title='Social Networking, Privacy, and Identity Verification'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-6261222927044474980</id><published>2009-09-12T07:47:00.001-07:00</published><updated>2009-09-12T07:47:26.047-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crowdsourcing'/><category scheme='http://www.blogger.com/atom/ns#' term='social computing'/><title type='text'>The Future of Crowdsourcing</title><content type='html'>&lt;p&gt;Crowdsourcing, for those who are new to the term, is the concept of entities outsourcing problems to a large and typically unrelated group of people. For example, Netflix has an ongoing competition - open to anyone - to develop an algorithm to predict customers ratings based on their past ratings that bests Netflix's proprietary algorithm by 10%. The prize is a million dollars.&lt;/p&gt;  &lt;p&gt;Crowdsourcing is not a new concept. The Longitude prize was an open competition established by Great Britain in the 18th century to solve the maritime problem of discerning longitude at sea. John Harrison was awarded the prize for his invention of the Chronometer. He wasn't treated well either. The dude solved the problem and was delayed the prize money for a full 30 years.&lt;/p&gt;  &lt;p&gt;John Harrison's poor treatment by Great Britain illustrates one potential problem with crowdsourcing however there are others - little to no contracts, lack of continuity with contributors, potential lack of interest thus little to no participation, low to no wages, and risk of malicious intent.&lt;/p&gt;  &lt;p&gt;The global recession has resulted in rapid growth of crowdsourcing due to two major factors:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It is often cheaper for companies to crowdsource solutions as opposed to directly hiring or contracting with professionals. &lt;/li&gt;    &lt;li&gt;There are lots of people out of work so the pool of willing participants is high.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;When the economy turns around will the resources currently involved in crowdsourcing dry up? Will the competition for intellectual property and time to market pressures move corporations back to more traditional methods that are more easily managed?&lt;/p&gt;  &lt;p&gt;My answer to both questions is no.&lt;/p&gt;  &lt;p&gt;With corporations having the ability to tap into a world population for ideas and solutions there is bound to be better results than with a small set of specialists. Crowdsourcing offers the possibility of tapping into brilliance without having to interview for that special person who will develop that next killer product.&lt;/p&gt;  &lt;p&gt;As far as the contributor is concerned, crowdsourcing offers recognition, flexibility, collaboration, pay, and other self-satisfying attributes. The city of Los Angeles provided a survey to it's population asking questions such as &amp;quot;What services should be cut to balance the budget?&amp;quot; with a list of city services from which the constituent may choose. This type of crowdsourcing relies on non-monetary rewards but still has a high rate of participation.&lt;/p&gt;  &lt;p&gt;One of the more interesting things to consider is how crowdsourcing will effect various occupations such as those in the creative design industries. When creativity is outsourced to the world, there is a potential for deleterious effects on wages and the number of permanent positions in those fields.&lt;/p&gt;  &lt;p&gt;In my opinion, crowdsourcing, like social media, is in its Wild West phase. There will be significant movement and change along the way and its current incarnation will be unrecognizable 5-10 years from now.&lt;/p&gt;  &lt;p&gt;As crowdsourcing models mature and become easier to manage the majority of us will be involved in some sort of crowdsourcing as an inherent part of our lifestyle. Just as I continue to manage my LinkedIn contacts and update my status on Facebook, I will likely also be contributing to my favorite crowdsourcing activities.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-6261222927044474980?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/6261222927044474980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/09/future-of-crowdsourcing.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6261222927044474980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6261222927044474980'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/09/future-of-crowdsourcing.html' title='The Future of Crowdsourcing'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-3251485828222757803</id><published>2009-09-01T10:02:00.000-07:00</published><updated>2009-09-01T17:42:57.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='user stories'/><title type='text'>Kano Model for Prioritizing User Stories/Requirements</title><content type='html'>&lt;p&gt;Regardless of whether you subscribe to Waterfall or Agile as your preferred methodology, some form or prioritization of requirements (Waterfall) or user stories (Agile) will take place. &lt;/p&gt;&lt;p&gt;One of the more difficult tasks is helping the user community to determine the varying degrees of importance of each requirement. One method to help with this process is the Kano Model.&lt;/p&gt;&lt;p&gt;The Kano Model is named after Professor Noriako Kano who in 1987 developed a theory for product development to classify features into five categories based on answers to questions about the specific features. Following are the five classifications. &lt;/p&gt;&lt;table border="0" cellspacing="0" cellpadding="2" width="400"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="137"&gt;&lt;strong&gt;Attractive&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="263"&gt;Delighted to have but unexpected.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="137"&gt;&lt;strong&gt;One-Dimensional&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="263"&gt;Features customers compare with your competition.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="137"&gt;&lt;strong&gt;Must-Be&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="263"&gt;A must have feature.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="137"&gt;&lt;strong&gt;Indifferent&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="263"&gt;Neutral about the feature.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="137"&gt;&lt;strong&gt;Reverse&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="263"&gt;The customer do not want the feature and actually expect the reverse of it.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td valign="top" width="137"&gt;&lt;strong&gt;Questionable&lt;/strong&gt;&lt;/td&gt;&lt;td valign="top" width="263"&gt;Indicates that the customer is unclear about the nature of the feature&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;The features are classified by asking the customer two questions – one functional and the other dysfunctional – to which the customer selects one of 5 possible answers.&lt;/p&gt;&lt;p&gt;The questions are:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;How would you feel if the feature was present in the product? &lt;/li&gt;&lt;li&gt;How would you feel if the feature was absent from the product? &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The answers from which they may choose are:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;I would like that. &lt;/li&gt;&lt;li&gt;I require that. &lt;/li&gt;&lt;li&gt;I don’t care about that. &lt;/li&gt;&lt;li&gt;I can live with that. &lt;/li&gt;&lt;li&gt;I dislike that. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The initial reaction of most people when posed with the functional/dysfunctional question think “won’t the questions offset each other?” As it turns out most often they don’t. &lt;/p&gt;&lt;p&gt;An excellent example that I’ve heard in the past is with a milk carton that has a thermometer on the outside so the customer can see what temperature the milk is. One may select answer 1 &lt;em&gt;&lt;u&gt;I would like that&lt;/u&gt;&lt;/em&gt; as the functional answer but select answer 4 &lt;em&gt;&lt;u&gt;I can live with that&lt;/u&gt;&lt;/em&gt; for the dysfunctional question.&lt;/p&gt;&lt;p&gt;The answers are then compared to a matrix below to arrive at the classification. The letters in the middle of the matrix represent each of the classifications via its first letter, e.g. A=Attractive. To take our earlier example of the thermometer on the milk carton, the functional was &lt;em&gt;Like&lt;/em&gt; and the Dysfunctional was &lt;em&gt;Live With&lt;/em&gt; thus the matrix indicates that the classification is &lt;em&gt;A=Attractive&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;table style="WIDTH: 270pt; BORDER-COLLAPSE: collapse" border="0" cellspacing="0" cellpadding="0" width="538"&gt;&lt;colgroup&gt;&lt;col style="WIDTH: 86pt; mso-width-source: userset; mso-width-alt: 4169" width="114"&gt;&lt;col style="WIDTH: 53pt; mso-width-source: userset; mso-width-alt: 2596" width="71"&gt;&lt;col style="WIDTH: 51pt; mso-width-source: userset; mso-width-alt: 2486" width="68"&gt;&lt;col style="WIDTH: 53pt; mso-width-source: userset; mso-width-alt: 2560" width="70"&gt;&lt;col style="WIDTH: 60pt; mso-width-source: userset; mso-width-alt: 2925" width="80"&gt;&lt;col style="WIDTH: 53pt; mso-width-source: userset; mso-width-alt: 2596" width="71"&gt;&lt;col style="WIDTH: 48pt" width="64"&gt;&lt;/colgroup&gt;&lt;tbody&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="WIDTH: 86pt; HEIGHT: 15pt" height="20" width="114"&gt;&lt;/td&gt;&lt;td style="WIDTH: 218pt" class="xl66" width="424" colspan="6"&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:78%;color:#008000;"&gt;Dysfunctional&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="HEIGHT: 15pt" height="20"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Like&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Expect&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Neutral&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Live With&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Dislike&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="HEIGHT: 75pt" class="xl65" height="100" rowspan="5"&gt;&lt;strong&gt;&lt;span style="font-size:78%;color:#008000;"&gt;Functional&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;a name="RANGE!D5:D9"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Like&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;Q&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;A&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;A&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;A&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;O&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="HEIGHT: 15pt" class="xl65" height="20"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Expect&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;M&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="HEIGHT: 15pt" class="xl65" height="20"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Neutral&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;M&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="HEIGHT: 15pt" class="xl65" height="20"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Live With&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;I&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;M&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr style="HEIGHT: 15pt" height="20"&gt;&lt;td style="HEIGHT: 15pt" class="xl65" height="20"&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Dislike&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;R&lt;/span&gt;&lt;/td&gt;&lt;td class="xl65"&gt;&lt;span style="font-size:78%;"&gt;Q&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;With the Kano Model, one is able to ask the customer two short and concise questions and ultimately gather critical data regarding the importance of the feature to the product. As a result, a development team can easily discern what’s mandatory, what’s nice to have, and where the land-mines are. &lt;/p&gt;&lt;p&gt;There are additional techniques that can be used in combination with the Kano Model to further prioritize requirements like weighting features but alas that will have to &lt;em&gt;weight&lt;/em&gt; for another day.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-3251485828222757803?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/3251485828222757803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/09/kano-model-for-prioritizing-user.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/3251485828222757803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/3251485828222757803'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/09/kano-model-for-prioritizing-user.html' title='Kano Model for Prioritizing User Stories/Requirements'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-4493461159401396185</id><published>2009-08-25T04:40:00.001-07:00</published><updated>2009-08-26T04:15:48.100-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='software estimation'/><title type='text'>Estimating Defect Production</title><content type='html'>&lt;p&gt;Estimating the number of defects a project should expect to produce and remove is one of the least talked about subjects in software development. In this article I'll provide some industry statistics to help with that estimation process and hopefully convince you of why Agile will likely reduce the level of effort associated with defect fixing.&lt;/p&gt;&lt;p&gt;There have been studies performed to estimate the number of defects that a software development effort will likely encounter during its life cycle. Obviously the larger the project the greater number of defects one should expect to encounter. If you follow this blog, you’ll know Steve McConnell’s book "Software Estimation: De-mystifying the Black Art” is one of my favorites and is always by my side. One of the chapters discusses estimating defects. In his book, McConnell references a Capers Jones (2000) study that indicates a reasonable expectation is to have 50 defects per 1000 lines of code (LOC).&lt;/p&gt;&lt;p&gt;However, a more granular look will show that smaller projects will experience fewer defects than larger ones; for example a project with fewer than 2K LOC will likely have 0-25 defects per 1K LOC where a project with over 512K LOC will likely have 4-100 defects per 1K LOC. Keep in mind that factors such as your programming language and other technologies will effect this estimate. It’s always more accurate to use historical data to estimate effort but in lieu of that, these data are better than nothing at all.&lt;/p&gt;&lt;p&gt;Here are a few more factors to consider:&lt;/p&gt;&lt;p&gt;- Defects occur at all points during development e.g. requirements, architecture, development, documentation, etc.&lt;/p&gt;&lt;p&gt;- There are best practices for defect removal such as design reviews, code reviews, prototyping, unit testing, system testing, and various levels of beta-testing – each of which have different removal rates. The highest removal rates come from formal code reviews (45-70%), prototyping (35-80%), and high volume beta testing (60-85%). Surprisingly (at least to me) one of the lowest removal ratings comes from regression testing (15-30%).&lt;/p&gt;&lt;p&gt;Here is where I transition from conveying data to providing my opinion on why Agile allows a development team to reduce the effort associated with defect removal when compared to Waterfall. &lt;/p&gt;&lt;p&gt;With Waterfall, the life cycle stages occur in a sequential manner,i.e. requirements, design, development, and test. Although it could be reasonably argued that the number of defects may not significantly change between Waterfall and Agile I think it is unreasonable to assume that the effort to remove them will remain the same. Defects introduced during the requirements gathering and design stages that are not found until development or even later have a snow ball affect because they pile up on one another. &lt;/p&gt;&lt;p&gt;Because of it’s iterative nature, Agile allows for requirements, design, and development defects to show themselves virtually immediately after they have been introduced. Dealing with defects introduced over a single two week sprint is a lot easier to manage than untangling a slew of defects that occurred over several months. We’ve all been on Waterfall projects where our integration testing revealed flaws that have required rewriting methods and even entire components. I contend that those types of wholesale defect removal efforts are mitigated substantially through continuous integration, daily stand-ups, two week sprints with customer tests immediately thereafter, as well as the other feedback loops inherent in Agile.&lt;/p&gt;&lt;p&gt;I’m interested in your thoughts.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-4493461159401396185?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/4493461159401396185/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/08/estimating-defect-production.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4493461159401396185'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4493461159401396185'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/08/estimating-defect-production.html' title='Estimating Defect Production'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-5728890369255079057</id><published>2009-08-04T07:32:00.000-07:00</published><updated>2009-08-04T15:54:30.844-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>The Balance Between Talent and Team</title><content type='html'>&lt;p&gt;I came across an old Joel on Software (Joel Spolsky) article from 2005 called &lt;a href="http://www.joelonsoftware.com/articles/HighNotes.html"&gt;Hitting the High Notes&lt;/a&gt; that I thought was particularly thought provoking. One of the premises of the article is that a single brilliant developer is more valuable for innovation and invention than an army of mediocre ones. His reasoning is that the brilliant developer is capable of thinking things and creating things that are virtually impossible for mediocre developers. The best line that captures the essence of the article is "Five Antonio Salierie's won't produce Mozart's Requiem. Ever. Not if they work 100 years."&lt;/p&gt;&lt;p&gt;But how often does the average organization require the elegance and brilliance of Mozart to compose the software equivalent of his Requiem? When viewed from the context of what the overwhelming majority of software engineers do every day, the answer is “almost never”. &lt;/p&gt;&lt;p&gt;Like Joel Spolsky, I’m a big fan of greatness. Real life accomplishments can often be better than fiction. However, software is as prolific and ubiquitous as there are people and it is because it doesn’t require Mozarts to create useful software to serve an organization and save tons of time and money and provide insight into business and industry trends.In fact, the effect of hiring purely on programming talent is at best problematic.&lt;/p&gt;&lt;p&gt;Let’s agree that software engineering is intellectually demanding. You can't be a dolt and do this job effectively. Technologies and subject matter change too quickly so having intellectual horsepower is a must. It’s also my opinion that for those same reasons one needs to understand that being a software engineer is not a 9-5 job. &lt;/p&gt;&lt;p&gt;As an organization, having intelligent and committed individuals is still not enough. The New York Yankees proved that by trying to buy World Series championships year after year through the assembly of the most talented players alone and failed miserably (As a Red Sox fan I consider that a success story). &lt;/p&gt;&lt;p&gt;That talent-alone strategy doesn’t work in software engineering either. The whole doesn’t necessarily have to be more than the sum its parts to be effective but in those cases one should expect mediocrity and not a whole lotta fun for those involved.&lt;/p&gt;&lt;p&gt;To accomplish cool things, if not world changing things, and have fun doing it there has to be synergy. Included with talent, intellect, and commitment, everyone should respect one another as people and professionals, understand what each other needs to be effective, compliment each others talents, and together fill all pieces of the engineering pie. If you think getting all these pieces to fit together properly sounds really, really, hard - I'm in full agreement!&lt;/p&gt;&lt;p&gt;Accomplishing the assembly of the aforementioned team is certainly a non-trivial task. As with everything in life, it requires compromise and balance. In this case, the compromise and balance is between the individual and team attributes needed, weighting them accordingly, and then hoping you’re right when hiring your next engineer.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-5728890369255079057?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/5728890369255079057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/05/balance-between-talent-and-team.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5728890369255079057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/5728890369255079057'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/05/balance-between-talent-and-team.html' title='The Balance Between Talent and Team'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-6964058098804266290</id><published>2009-07-27T06:24:00.001-07:00</published><updated>2009-08-01T07:31:34.235-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>It's Winter in July</title><content type='html'>&lt;p&gt;Aesop's fable of the ant and the grasshopper still holds true – you better prepare for winter or you’re screwed. In case you haven’t noticed we are in an economic winter, my friends, and either you have prepared for it or you have not. It's really that simple.&lt;/p&gt;&lt;p&gt;These are difficult times - no doubt. With the economy the way it is, people will often feel fear and insecurity about their positions. If they've been laid off they may be concerned about when, or even if, they'll find another position.&lt;/p&gt;&lt;p&gt;Admittedly, sometimes being in the wrong place at the wrong time can result in losing one’s job. However, more often than not, the security we have at our current employer, and even the difference between having a job and not, is based on our present value-add to the organization. Your entire career has culminated to this point in time and the perception of your relative importance to the success of a team and organization is essentially set. It was built over the course of years both at this current position and every one before it.&lt;/p&gt;&lt;p&gt;I’ve been a solid ant for a number of years now. Unfortunately, I’ve had to learn hard lessons as a result of embracing my inner grasshopper. The repercussions of being cavalier about an important matter as the care and feeding of one’s career will eventually result in pain. Those grasshopper times, however painful, turned out OK for me and if you are experiencing a harsh winter it will likely be OK for you too. The trick is to constantly reflect on whether you are thinking like a grasshopper or an ant – and know and accept the consequences!&lt;/p&gt;&lt;p&gt;Over the course of a bunch of years I’ve come to realize that no one is entitled to anything. Everything you have and is dear to you is on the table. So have a vision, be pragmatic, take risks, and most certainly, be assertive with your career. If you do those things well you will not only best protect that which is now yours but you will grow as a person too.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-6964058098804266290?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/6964058098804266290/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/07/it-end-of-july-2009-and-we-are-in.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6964058098804266290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/6964058098804266290'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/07/it-end-of-july-2009-and-we-are-in.html' title='It&apos;s Winter in July'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-4539752595575867130</id><published>2009-06-24T04:11:00.001-07:00</published><updated>2009-06-24T04:58:11.837-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='management'/><category scheme='http://www.blogger.com/atom/ns#' term='leadership'/><title type='text'>Natural Leaders</title><content type='html'>Did I intend for this space to be used for discussions about leadership? No. However, the natural risks and pace of change that are inherent with software engineering makes leadership incredibly vital and high quality leadership hard to come by. When I came across an article written by Gary Hamel called &lt;a href="http://blogs.wsj.com/management/2009/05/06/how-to-tell-if-youre-a-natural-leader/"&gt;How to Tell If You're a Natural Leader&lt;/a&gt; I immediately thought that it was important to share it here.&lt;br /&gt;&lt;br /&gt;What made it most thought provoking are these paragraphs:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Think about your role at work. Now assume for a moment that you no longer have any positional authority—you’re not a project leader, a department head or vice president. There’s no title on your business card and you have no direct reports. Assume further that you have no way of penalizing those who refuse to do your bidding—you can’t fire them or cut their pay. Given this, how much could you get done in your organization? How much of a leader would you be if you no longer held even a tiny, tarnished scepter of bureaucratic power?".&lt;/li&gt;&lt;li&gt;"... how much of your power comes from &lt;em&gt;what &lt;/em&gt;you are (the VP for HR, for example), and how much comes from &lt;em&gt;who &lt;/em&gt;you are ..."&lt;/li&gt;&lt;/ul&gt;In my mind, that's powerful stuff. Of course leadership is enhanced by title and power - perceived or otherwise. Who isn't going to follow someone, at least temporarily, who can dump your ass into the cold winter of this recession.&lt;br /&gt;&lt;br /&gt;Yeah, Gary Hamel's article could be useful as an exercise in self-examination by existing leaders but I think a lot of that internal dialog has already happened. At most, this discussion could be a catalyst for calibrating oneself or possibly  a reminder of some of those leadership principles. That's not what I find most interesting about this article.&lt;br /&gt;&lt;br /&gt;I think this article is most useful for those that are not currently in an officially sanctioned leadership role. It's for self-examination of whether one is acting like the leader one thinks they are, or thinks they want to be, or possibly reluctant to be, or even in denial of being.&lt;br /&gt;&lt;br /&gt;Another valuable aspect is to identify the natural leaders on your team and within your organization. Who is being followed without a title? Who on your team and organization tends to be at the center of things? Who do people go to for questions and advice? Those are the people that will build the teams for the future who are entrepreneurial, innovative, and mission oriented. You will need them because today's workforce is transient - and this is especially true in software engineering.&lt;br /&gt;&lt;br /&gt;I recommend reading Gary Hamel's article &lt;a href="http://blogs.wsj.com/management/2009/05/06/how-to-tell-if-youre-a-natural-leader/"&gt;How to Tell If You're a Natural Leader&lt;/a&gt; as well as subscribing to his &lt;a href="http://blogs.wsj.com/management/"&gt;Management 2.0&lt;/a&gt; blog.&lt;br /&gt;&lt;br /&gt;I'm interested in your thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-4539752595575867130?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/4539752595575867130/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/06/natural-leaders.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4539752595575867130'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/4539752595575867130'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/06/natural-leaders.html' title='Natural Leaders'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-2286732107205807256</id><published>2009-06-10T04:24:00.000-07:00</published><updated>2009-06-11T10:57:59.573-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='kanban'/><title type='text'>Kanban Development Methodology</title><content type='html'>I was introduced this week to a development methodology called Kanban. For those of you who don't know the origin of the word Kanban, it's manifestation is as a physical card as part of the Toyota Production System (TPS) that signals the moving and production of parts in a "pull" system; a system where parts are made available as others are pulled into use downstream. The objective in a manufacturing setting is to control inventory based on the speed of production. The concept is applied to software development through controlling the development of tasks. In Agile, tasks could be user stories (the parts) which are subsequently developed into software features (downstream production).&lt;br /&gt;&lt;br /&gt;The control of requirements, design, and development inventory is important to maximize project efficiency. A main focus of Agile is to gather requirements, design solutions, develop objects, and test working code at the moment they are needed. If any of these areas are far ahead or behind the others then a critical principle of Agile is being violated. Implementing Kanban helps to keep production of objects at each stage of the project at the appropriate levels.&lt;br /&gt;&lt;br /&gt;Here is how it works. The team has a board that looks very similar to a Scrum board. It has columns for stages of &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_-9FPYnfwXqs/SjE963lnvyI/AAAAAAAAACE/Xeq4FKnzhRM/s1600-h/KanbanBoard1.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 258px;" src="http://2.bp.blogspot.com/_-9FPYnfwXqs/SjE963lnvyI/AAAAAAAAACE/Xeq4FKnzhRM/s400/KanbanBoard1.jpg" alt="" id="BLOGGER_PHOTO_ID_5346122314228940578" border="0" /&gt;&lt;/a&gt;development. The stages can look quite different. The images contained in this article are a few examples courtesy of InfoQ. Some look eerily like Scrum boards, don't they?&lt;br /&gt;&lt;br /&gt;Regardless of the column names, cards start out in the far left column and move their way to the far right column. The inventory of cards at any one category is controled by open slots within a category. For example, using the image with the multi-colored postIts, when a card is pulled from the To Do column and placed in the Doing column, it leaves an open slot in the To Do column thus a need for more To Do items to work on.  Unlike Agile, Kanban does not bundle work into sprints. The flow is constant.&lt;br /&gt;&lt;br /&gt;In my opinion, where Kanban is most effective is on larger projects where there are teams that make up "columns" of work.  The i&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_-9FPYnfwXqs/SjE-bdcKdlI/AAAAAAAAACM/JDgg2vvFQfE/s1600-h/kanbanBaord2.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 378px; height: 284px;" src="http://3.bp.blogspot.com/_-9FPYnfwXqs/SjE-bdcKdlI/AAAAAAAAACM/JDgg2vvFQfE/s400/kanbanBaord2.jpg" alt="" id="BLOGGER_PHOTO_ID_5346122874145633874" border="0" /&gt;&lt;/a&gt;mage with the Waterfall style stages illustrates this best. A large project will likely have teams that make up Basic Design, Detailed Design, Development, and Validation. With Kanban, each team can set their capacity of work by the number of slots they make available. If the Basic Design team has 10 slots available then they are saying they can work on 10 basic designs at one time. Detailed Design may have only 7 slots, thus their capacity is 7 Detailed Designs at a time.&lt;br /&gt;&lt;br /&gt;It isn't hard to imagine Agile teams using Kanban techniques to control the flow of work. A simplistic view is to wrap Kanban into iterations and you now have Kanban Agile. There are additional difference between Agile and Kanban and I provided a couple of links at the bottom of the page if you are interested in learning more.&lt;br /&gt;&lt;br /&gt;In a previous article, &lt;a href="http://applicationengineering.blogspot.com/2009/05/convergence-of-continuous-integration.html"&gt;The Convergence of Continuous Integration and Continuous Release&lt;/a&gt;, I discuss the merits of deploying to production immediately after code is checked in and all test are run and are successful. Kanban would work exceptionally well in this type of environment.&lt;br /&gt;&lt;br /&gt;Whether it's Agile based on Kanban or another style of Agile, there is a consistent attribute of Agile teams; the Agile team needs to be composed of multi-faceted team members who are adaptive. As production velocity shifts across any or all categories of the project, team members should be able to shift into different roles accordingly, i.e. gathering requirements, designing solutions, developing software, and/or testing working code (or coding automated tests). Personally, I think this makes being a software development professional more interesting but it isn't for everyone.&lt;br /&gt;&lt;br /&gt;Click &lt;a href="http://www.infoq.com/articles/hiranabe-lean-agile-kanban"&gt;here&lt;/a&gt; and &lt;a href="http://www.agilejournal.com/articles/17-articles/1737"&gt;here&lt;/a&gt; to read two good articles on Kanban as it relates to Agile software development.&lt;br /&gt;&lt;br /&gt;I'm interested in your thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-2286732107205807256?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/2286732107205807256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/06/kanban-agile.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2286732107205807256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2286732107205807256'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/06/kanban-agile.html' title='Kanban Development Methodology'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_-9FPYnfwXqs/SjE963lnvyI/AAAAAAAAACE/Xeq4FKnzhRM/s72-c/KanbanBoard1.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-7961207953494976976</id><published>2009-06-04T15:50:00.001-07:00</published><updated>2009-06-06T10:30:55.479-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social computing'/><title type='text'>The Emergence of Enterprise Social Computing</title><content type='html'>&lt;p&gt;It’s exciting to think that true social computing at the enterprise level is right around the corner. That in the near future, the pretense of living intranet sites will be replaced by open, transparent, and constantly evolving intranet sites that grow organically through the contributions of the organizations workforce.&lt;/p&gt;  &lt;p&gt;Picture, if you will, an environment where organizational leaders blog to their workforce on a regular basis and readers comment freely. Where those same organizational leaders query their workforce and their answers shape the company’s roadmap.&lt;/p&gt;  &lt;p&gt;Add to that the ability of each member of the workforce having the ability to customize their own corporate page; blog on their respective expertise; create communities of like-minded people with whom they work regardless of proximity; search the organization for specific skills, work product, like-projects, structured and unstructured data; where they search for people with specific past experiences related to companies, industries, and expertise. All this with the ability for spontaneous contact through IM, email, VoIP, and web conferencing.&lt;/p&gt;  &lt;p&gt;Lastly, this environment is shaped via email postings, blog articles, project and organizational processes, discussion boards, forums, wikis, profiles, and virtually any other type of medium where information is shared.&lt;/p&gt;  &lt;p&gt;Today I attended a seminar at Microsoft in Waltham, MA where my colleague, &lt;a href="http://blogs.officezealot.com/mauro/"&gt;Mauro Cardarelli&lt;/a&gt;, as well as other professionals in the SharePoint world, demonstrated real-life implementations of the environment described above. It was clear evidence that this type of environment is ready for prime-time and available to any organization with the vision and discipline to implement it.&lt;/p&gt;  &lt;p&gt;The organization that is looking for a fully quantifiable ROI will be late adopters. But I’m certain they will be adopters. There are many aspects of this that are quantifiable but there are many more benefits that are not. One has to &lt;em&gt;&lt;u&gt;know&lt;/u&gt;&lt;/em&gt; that a fully collaborative organization is a fundamentally more productive one.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-7961207953494976976?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/7961207953494976976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/06/emergence-of-enterprise-social.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7961207953494976976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7961207953494976976'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/06/emergence-of-enterprise-social.html' title='The Emergence of Enterprise Social Computing'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-1386040702904160568</id><published>2009-05-16T05:11:00.000-07:00</published><updated>2009-05-16T08:15:52.709-07:00</updated><title type='text'>The Convergence of Continuous Integration and Continous Release</title><content type='html'>There is an emerging paradigm with continuous release that may result in a convergence between it and continuous integration.&lt;br /&gt;&lt;br /&gt;The concept of continuous release is not new. However, in most instances where the term is used it refers to deploying and testing the application on a periodic basis - usually nightly - and deploying the entire application. With the latest paradigm, continuous release becomes more like continuous integration - when changes to a component are checked into the version control system, not only does it result in an immediate action of building the component but is extended to include testing and releasing it.&lt;br /&gt;&lt;br /&gt;With this paradigm, which I'll call &lt;span style="font-style: italic;"&gt;true continuous release&lt;/span&gt;, the benefits are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;In true Agile fashion it provides immediate user feedback thus adding another layer to the Agile feedback loop.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Safety with assuming the risk of integrating smaller and more efficient releases as opposed to a much larger releases of whole applications or large subsets of it.&lt;/li&gt;&lt;li&gt;Users are provided the flexibility to  elect which features they want to upgrade/install.&lt;/li&gt;&lt;/ul&gt;A few of the requirements for true continuous release are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Strong feature coverage with automated testing.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Tight process with recording component versions.&lt;/li&gt;&lt;li&gt;Significant complexity related to the recursive nature of component dependencies.&lt;/li&gt;&lt;/ul&gt;I highly recommend a white paper on this emerging release methodology that you can find &lt;a href="http://old-www.cwi.nl/themes/sen1/twiki/pub/Deliver/Publications/TVDSSCM12CRUCBS.pdf"&gt;&lt;span style="text-decoration: underline;"&gt;here&lt;/span&gt;&lt;/a&gt;. It contains valuable information of its benefits as well as implementation difficulties.&lt;br /&gt;&lt;br /&gt;Is this the next efficiency model? Is its value limited to companies such as online gaming companies that are structured based on frequent and noticeable changes?  Are its complexities too significant that most organizations will pass on implementing it?&lt;br /&gt;&lt;br /&gt;I'm interested in your thoughts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-1386040702904160568?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/1386040702904160568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/05/convergence-of-continuous-integration.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/1386040702904160568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/1386040702904160568'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/05/convergence-of-continuous-integration.html' title='The Convergence of Continuous Integration and Continous Release'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-78032481896075384</id><published>2009-05-02T09:50:00.001-07:00</published><updated>2009-09-01T17:30:55.852-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>People, Processes, and Protection</title><content type='html'>&lt;p&gt;I'm going to drift a bit from my typical subject matter and talk about the importance of managing people and processes for the protection of all involved.&lt;/p&gt;&lt;p&gt;You may wonder in what context the word &lt;em&gt;protection&lt;/em&gt; applies. Protection is the obligation of managers to protect their direct reports, direct reports obligation to protect their manager, and everyone protecting their customers and organization. The glue that holds all of the various protections together is a codified set of processes. I know codification is optional, but to be great instead of mediocre, the processes need to be as well understood and unambiguous as possible thus documentation is required.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Example&lt;/strong&gt;:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;: A consulting company has a custom software development effort with their best client. The project is highly visible and the client's financial investment makes it high risk as well. Each two week development cycle has a scoped set of features that the development team commits to and at the end of which results in a demo of the working code to the customer.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Manager Protecting Direct Reports&lt;/strong&gt;: The development manager works with the development team to scope the features to be developed during the current cycle. Each team member commits to one or more deliverables and provides their estimated level of effort. The development manager is doing his/her best to set up his/her reports to succeed by involving them in the scoping, assignment, and estimation processes.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Direct Reports Protecting the Manager:&lt;/strong&gt; As the cycle progresses, each developer is cognizant of the commitments to the client and all of them know that no one likes surprises. When a feature is bigger than expected or unforeseen obstacles arise that threaten the ability to deliver the scoped feature(s), the development manager is notified as early as possible to allow him/her to manage expectations with those outside of the team.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;All Protecting the Customer and Organization&lt;/strong&gt;: Because the development team does a good job with making the manager aware of the risks as they become known, the manager can notify the customer as early in the cycle as possible. Once the risks are known they are managed throughout the cycle. This allows the customer contact to manage expectations at their end. A byproduct of being disciplined with this process of protecting the customer results in successful projects and enhancing the reputation of the development team and organization as a whole.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Team Value System&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Protection and process is all great but those items don't define what is being protected and why were the processes developed. Before processes can be designed and implemented there needs to be a team value system. The value system consists of the things the team views as important principles that are required to be successful.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There are several steps required to crystallize the team's focus of its value system as well as defining who the team is, where it's going, and how it's going to get there. Each of the steps should align with the organization, cost center, department, team, and individual.&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/p&gt;&lt;em&gt;1. Vision and Mission Statements&lt;/em&gt;: The team needs to know unambiguously why it exists and where it is going. If you don't have them, then write them. You'll be surprised at how much thinking you'll need to do.&lt;em&gt;&lt;/em&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;br /&gt;2. Team Value System&lt;/em&gt;: A team's value system is essentially the rules of engagement at the individual level. Here is a small example: &lt;ol&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Team First&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;We constantly strive for balance of skills throughout the team.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;There is redundancy within the team, e.g. primary/secondary client contacts.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Choosing the right resource for a particular task/project is dependent on: &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Task/Project Context&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Required Skills&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Desired career path of team members&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Communication&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;We err on the side of over-communication&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;We are collaborative with solving problems&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Conversation is more accurate than written correspondence&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Customer&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Everyone is everyone’s customer&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Super-pleasing is the standard level of service&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;em&gt;3. Team Composition&lt;/em&gt;: This is the act of documenting how your team should be assembled; essentially what is the strategy with regard to the the required skills within the team and how that manifests itself into the &lt;span style="FONT-STYLE: italic"&gt;types &lt;/span&gt;or &lt;span style="FONT-STYLE: italic"&gt;categories &lt;/span&gt;of people needed to most effectively perform day to day activities. I'd suggest categorizing your current team members into each of the types that you identify to see if you are aligned properly.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Protection Through Process&lt;/span&gt;&lt;br /&gt;Once the three steps are complete it is time to create the processes that ensure the value system is efficiently implemented on a day to day basis - without significant dependency on human oversight. Heavy involvement by people to ensure the plan is executed daily is inefficient because of the transient nature of people, the periodic unavailability of people, the expense of human oversight, as well as a host of other reasons. Processes need to be developed in a way where, for the most part, the team runs itself. This paradigm is scalable. When specific people leave the organization or become unavailable for periods of time, the processes don't fall apart. It also leaves people more time for innovations that make the processes stronger.&lt;br /&gt;&lt;p&gt;Teams and its members have good intentions that sometimes go awry. In most cases when things don't go as well as expected it is because the team/individuals don't have a clear idea of their value system and/or poor processes that don't protect them. The idea is to consistently put people in a position to win. In my experience, implementing the tools described here help teams be the best that they can be.&lt;/p&gt;&lt;p&gt;I'm interested in you thoughts.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-78032481896075384?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/78032481896075384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/05/people-processes-and-protection_02.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/78032481896075384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/78032481896075384'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/05/people-processes-and-protection_02.html' title='People, Processes, and Protection'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-8019451486229438439</id><published>2009-04-22T03:38:00.001-07:00</published><updated>2009-04-22T03:53:12.982-07:00</updated><title type='text'>Estimating Probabilities for Delivery (&lt; 10 Tasks)</title><content type='html'>&lt;p&gt;Delivering an application on the date specified at the beginning of a project is rarely, if ever, achieved; especially if the delivery is expressed as a single date (commitment) instead of a range of dates (estimate). However, there are ways to estimate the probability of delivering on specific dates using relatively simple formulas in just two steps. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 1: Calculate the standard deviation for each task&lt;/strong&gt;    &lt;br /&gt;This isn't as scary as it sounds. Here is the formula:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;StandardDeviation = (SumOfWorstCaseEstimates - SumOfBestCaseEstimates)/6&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Your estimates are based on Worst, Best, and Expected cases, right? I hope so. The denominator (6) in the formula counts as one standard deviation. One standard deviation means that 99.7% of your estimates will fall within the Worst/Best range. Depending on the risks associated with the project or your skill with estimating you may want to decrease the denominator as a buffer. For example, using 2 as the denominator means that 68% of the actual effort per task will fall into the Worst/Best range. Steve McConnell's opinion in his book &lt;em&gt;Software Estimation: Demystifying the Black Art&lt;/em&gt; is that accomplishing a 68% accuracy is achievable &lt;u&gt;with practice&lt;/u&gt; so you might want to start out using a denominator of 2 or less until your historical data tells you otherwise.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Step 2: Calculate the probabilities for delivery     &lt;br /&gt;&lt;/strong&gt;The next step is to apply the standard deviation to calculate the likelihood of delivery. Below is a table with the probabilities:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="370" border="0"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="71"&gt;&lt;strong&gt;Percent Likely&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="297"&gt;&lt;strong&gt;Calculation&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;2%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (2 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;10%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (1.28 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;16%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (1 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;20%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (0.84 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;25%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (0.67 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;30%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (0.52 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;40%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case - (0.25 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;50%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;60%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case + (0.25 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;70%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case + (0.52 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;75%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case +(0.67 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;80%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case + (0.84x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;84%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case + (1 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;90%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case + (1.28 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="71"&gt;98%&lt;/td&gt;        &lt;td valign="top" width="297"&gt;Expected case +(2 x StandardDeviation)&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;There are more complex methods for calculating deliver dates for projects that have greater than 10 tasks. I’ll be writing about those in future articles.&lt;/p&gt;  &lt;p&gt;I have a variation of the above in the form of a spreadsheet that I use as a template for inputting tasks with their respective estimates. The spreadsheet will automatically calculate the standard deviation and percent likely delivery dates. If you would like me to send it to you feel free to email me at &lt;a href="mailto:jack@notarangelo.com"&gt;jack@notarangelo.com&lt;/a&gt; and I’ll send it along.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-8019451486229438439?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/8019451486229438439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/04/estimating-probabilities-for-delivery.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8019451486229438439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8019451486229438439'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/04/estimating-probabilities-for-delivery.html' title='Estimating Probabilities for Delivery (&amp;lt; 10 Tasks)'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-1834888180056012603</id><published>2009-04-16T04:02:00.001-07:00</published><updated>2009-04-17T04:09:09.817-07:00</updated><title type='text'>Workflow Patterns</title><content type='html'>A colleague of mine gave me good advice a while back about blogging. He recommended that I submit articles frequently and that they be short and concise. I'm not sure how proficient I am at writing short and concise articles but my guess is that this one will be the shortest and most concise of those that came before it or will be written after it.&lt;br /&gt;&lt;br /&gt;I stumbled across an excellent &lt;a href="http://www.workflowpatterns.com/patterns/index.php"&gt;web site for workflow patterns &lt;/a&gt;. The site contains research on workflow patterns conducted by various academicians and are sanctioned by the &lt;a href="http://www.wfmc.org/"&gt;Worflow Management Coalition&lt;/a&gt;. Below are links to the four papers that I think are a must read if you are working with or developing any kind of process-aware software. You can view the content on the web site directly or download a PDF file at the top of each link with all the patterns under that respective category.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.workflowpatterns.com/patterns/control/index.php"&gt;Control-Flow Perspective&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.workflowpatterns.com/patterns/data/index.php"&gt;Data Perspective&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.workflowpatterns.com/patterns/resource/index.php"&gt;Resources Perspective&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.workflowpatterns.com/patterns/exception/index.php"&gt;Exception Handling Perspective&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.workflowpatterns.com/patterns/exception/index.php"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://www.workflowpatterns.com/patterns/exception/index.php"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-1834888180056012603?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/1834888180056012603/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/04/workflow-patterns.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/1834888180056012603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/1834888180056012603'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/04/workflow-patterns.html' title='Workflow Patterns'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-8589308288746490107</id><published>2009-04-02T12:24:00.000-07:00</published><updated>2009-04-08T06:58:54.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Agile Feedback Loops</title><content type='html'>One of the most important aspects of Agile is the feedback loop contained in virtually every aspect of the methodology and the built-in efficiencies related to it. I know I'm being Master of the Obvious, but knowing about a problem immediately and thus fixing it immediately is so much easier and manageable than untangling many problems that were unknowingly compiled over the course of months and with a short amount of time to straighten everything out. Aggghh .. it's stressful just thinking about it. Below are the places in the Agile methodology (or at least the way I have implemented it) where we see feedback loops.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Continuous Integration&lt;/strong&gt; &lt;span style="font-weight: bold;"&gt;(CI)&lt;/span&gt;&lt;br /&gt;When code is checked in, the application will successfully build or it will not. On my team, we get automated emails after the CI process runs regardless of success or failure so feedback is received in both positive and negative outcomes. The rule is - don't leave for the day until your checked-in code successfully builds and the unit tests succeed. When the CI process fails, it is the top priority of the team to fix it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Nightly Build and Deploy&lt;/strong&gt;&lt;br /&gt;Every night the projects that make up the application are built and deployed to a distributed environment. During this process the compilation, automated unit tests and automated QA tests should succeed. If anyone of those processes has a failure, then, just like with the CI process, it is the top priority of the team to fix the failure.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Daily Stand-up&lt;/strong&gt;&lt;br /&gt;Every day the project team meets for 15 minutes where each member tells the their team members what they worked on yesterday, what they are working on today, and what obstacles they have. As a result, missteps in priorities is only a day away from being corrected and information about what someone else is working on that is pertinent to a developer is communicated every morning.&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Sprint Retrospective&lt;/strong&gt;&lt;br /&gt;At the end of every two week sprint, the team discusses what they think went well and what went not so well. This feedback provides the necessary information to tweak our processes accordingly. Little by little our processes gets stronger.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;End of Sprint Demo&lt;/strong&gt;&lt;br /&gt;This is where the rubber meets the road. At the end of every two week sprint we have an immovable demo to the client. What does our customer think about our work? Did we get it right or wrong or a combination? What insight is gained about the application as a whole as a result of this sprint's development and what is the effect on the priorities for future development?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;I was in a client demo yesterday for Sprint 12 - thus it was my 12th demo for this particular project with 4 more to go - when I had a somewhat out-of-body experience. As we were nearing the end of the demo where I was peppered with questions by a room of 10+ client stakeholders asking "will it do this? will it do that" of which my response was "well let's see" (and in virtually all cases the app performed well), I mentally became detached from the demo process and saw the entire project life cycle in my minds eye and was stunned.&lt;br /&gt;&lt;br /&gt;That's when I said to the group "Can you believe how well this is working? This is amazing." And, that's when they started making fun of me by asking me if I wanted to be carried around the room. By the way, having a demo every two weeks with your customer promotes a positive bonding experience (assuming the demos are successful).&lt;br /&gt;&lt;br /&gt;The reason for my impulsive utterance was that after developing software for the better part of the last 15 years (a lot of which was not using Agile), I'm still stunned how well Agile works. Of course you need high quality developers too but the constant feedback loops and addressing issues immediately instead of during UAT is directly related to successfully demo-ing an application 12 times with minimal glitches.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-8589308288746490107?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/8589308288746490107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/04/agile-feedback-loops.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8589308288746490107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/8589308288746490107'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/04/agile-feedback-loops.html' title='Agile Feedback Loops'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-2649391394423987590</id><published>2009-03-28T10:02:00.000-07:00</published><updated>2009-03-28T13:18:55.842-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software estimation'/><title type='text'>Why Is Software Estimation Always In the Backseat?</title><content type='html'>I don't understand why software estimation doesn't take a more prominent role in software development.&lt;br /&gt;&lt;br /&gt;Virtually everyone who's livelihood is related to software development has experienced projects where team members have worked a zillion hours, the project went over budget, had features ripped out to meet a date, was delivered with poor quality, etc.&lt;br /&gt;&lt;br /&gt;Here are some data to provide context into our experiences in relation to the software development space as a whole (thanks again to Steve McConnell's book "Software Estimation: Demystifying the Black Art"):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Many studies have concluded results that state 25% of projects will be canceled, 25% will be on time and within budget, and 50% will be late and/or over budget.&lt;/li&gt;&lt;li&gt;A project with 10,000 function points, which is a mid-sized project, has a 1% chance that it will be delivered early and a 20% chance that it will be canceled. As the number of function points goes up so does the failure rate.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On average, a late project is 120% late and an over budget project is 100% over budget.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;It is likely that the percentages for late/over-budget is only a piece of the picture and the actual experience is much worse. When a project is 120% late and/or 100% over budget, there is severe urgency to deliver. When that occurs functionality is often stripped out of the original scope and teams are forced into a death march to get the project done. Most teams do not pay overtime so whether a developer works 8 hours or 18 hours, the effect on the budget is the same. As a result, the overage stats do not reflect that what is delivered is likely less than what was scoped and the hours applied are far more than the budget overrun indicates. It is also reasonable to assume that in that environment design time suffers causing a more difficult application to maintain, extend, and scale.&lt;br /&gt;&lt;br /&gt;The moral of the story is that the our industry is &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;dysfunctionally&lt;/span&gt; addicted to under estimating our projects! One major reason for this, believe it or not, is expert judgment. There are a lot of smart people with loads of experience in our industry and many will estimate tasks, and thus projects, based on gut instinct instead of quantifiable data. This is by far the least reliable estimation technique.&lt;br /&gt;&lt;br /&gt;In the next article, I'll provide a few methodologies that you can use that are fairly easy to implement and will increase your likelihood of success.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-2649391394423987590?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/2649391394423987590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/why-is-software-estimation-always-in.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2649391394423987590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/2649391394423987590'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/why-is-software-estimation-always-in.html' title='Why Is Software Estimation Always In the Backseat?'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-3401584776313380181</id><published>2009-03-20T04:44:00.000-07:00</published><updated>2009-03-23T05:40:06.390-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software estimation'/><title type='text'>Software Estimation v.1</title><content type='html'>I recommend to everyone who is involved in any way with software development to read the book "Software Estimation: Demystifying the Black Art" by Steve McConnell. I laughed, I cried, it changed my life. Well maybe not the first two, but it did change the professional side of my life.&lt;br /&gt;&lt;br /&gt;There's so much to software estimation that one article cannot do it justice; especially if the objective of the article is to keep it short and concise. This first of probably many blog entries on software estimation will be dedicated to distinguishing between an estimate and a commitment. This is a vital point because the two are often used interchangeably.&lt;br /&gt;&lt;br /&gt;Estimating is an &lt;span style="font-weight: bold;"&gt;unbiased &lt;/span&gt;analytical process. With regards to software development, the objective is to approximate the amount of time and/or cost to develop software to solve a problem or satisfy a specific need. As an approximation, an estimate should be communicated as a range, e.g. "it is likely that this project will be delivered in 3-5 weeks".&lt;br /&gt;&lt;br /&gt;A commitment is much more definitive. It is an agreement to deliver specific functionality on a specific date for a specific cost, e.g. "the project will be delivered in 6 weeks."&lt;br /&gt;&lt;br /&gt;Related to a commitment is a target. A target is a &lt;span style="font-weight: bold;"&gt;biased &lt;/span&gt;process based on the goals of the business, e.g. "We need this software delivered by June 15 to demo at the premier industry convention!".&lt;br /&gt;&lt;br /&gt;In my experience, more often than not estimates are expressed as commitments which are influenced by the business driven target.&lt;br /&gt;&lt;br /&gt;Communicating estimates as a single point number vs as a range is misleading (in most cases unintentionally).  Every software development effort is, in actuality, an invention and an invention cannot be guaranteed to be completed on a certain day for a certain cost. As we all know, our estimates are not 100% accurate. However, if we communicate estimates as a single point number we are implying 100% accuracy.&lt;br /&gt;&lt;br /&gt;Developing high/low cost estimates is fairly common and as you can probably guess I recommend communicating both to your customers. There are many techniques to quantify, thus making credible, high/low estimates. Although estimation by intuition is one estimation technique - and is probably the most frequently used - it is the least reliable. I'll be writing about some of many techniques I garnered from Steve McConnell's book in future blog entries.&lt;br /&gt;&lt;br /&gt;On the other hand, dates are rarely communicated as high/low estimates. Typically they are communicated as commitments (single point date) which often result in very long days for developers, negotiating with the client to deliver at a later date, removing features from scope, providing a poor quality product, or a combination of some or all of those. I have a question for you, when was the last time you presented your delivery dates as probabilities, e.g. "there is a 25% probability of us delivering the software in 11 weeks and a 98% probability that we'll deliver it in 15 weeks."? The techniques for quantifying those probability statements will come in later articles too.&lt;br /&gt;&lt;br /&gt;I'm interested in hearing about your issues/resolutions to software estimation problems.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-3401584776313380181?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/3401584776313380181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/software-estimation-v-1.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/3401584776313380181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/3401584776313380181'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/software-estimation-v-1.html' title='Software Estimation v.1'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-369162587414547918</id><published>2009-03-14T10:56:00.001-07:00</published><updated>2009-09-01T17:31:34.152-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='management'/><title type='text'>Creating and Maintaining a Sense of Urgency</title><content type='html'>&lt;p&gt;A consistent sense of urgency is one of the separators of great teams from all of the others. Urgency promotes teamwork, focus, efficiency, collaboration, pragmatism, vision, and all the other important characteristics of a highly productive team and project.&lt;/p&gt;&lt;p&gt;I’ve been on projects where the management team wanted desperately for our team to have a sense of urgency but was unable to create it – never mind maintain it. Assuming a project team is made up of talented people who enjoy what they do for a living then the reason for the lack of urgency falls on management’s inability to provide a conducive atmosphere to instill it. &lt;/p&gt;&lt;p&gt;Knowing the ingredients that creates a sense of urgency is the hard part. Actually creating urgency is simple. All it takes is a disciplined approach to process by management.&lt;/p&gt;&lt;p&gt;The key ingredient are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Short and tightly focused goals that roll into medium term goals which roll into longer term goals. &lt;/li&gt;&lt;li&gt;Individual accountability.&lt;/li&gt;&lt;li&gt;Visibility into the goals of the team and it’s individual members.&lt;/li&gt;&lt;li&gt;Knowing the dependencies each member of the team has on one another.&lt;/li&gt;&lt;li&gt;Everyone’s involvement with process improvement.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Every project already knows the long-term goal – deliver the product that is mutually agreed upon between the developers and customer. &lt;/p&gt;&lt;p&gt;Agile does a great job of providing the short and mid-term goals via the daily stand-up and sprints, respectively. At the beginning of the sprint, the development team provides a scope for the sprint, which is usually between 2 and 4 weeks at the end of which is a demo to show what was accomplished. What rolls into the sprints are the daily stand-ups. Each member of the team provides an update on what was accomplished yesterday, what’s planned for today, and any obstacles they have. &lt;/p&gt;&lt;p&gt;For as far back as I can remember, my father has always emphasized that “if you take care of the little things then the big things will take care of themselves.” The daily stand-up epitomizes this philosophy. If we strive to consistently accomplish our goals on a daily basis, then it’s reasonable to assume that we should accomplish the goals for the sprint. The same holds true for the relationship between the sprints and the project as a whole. &lt;/p&gt;&lt;p&gt;The tightly focused goals that revolved around the daily stand-ups and the sprints creates an environment where creating and maintaining a sense of urgency is built-in. The best part is that it is self-maintaining. It doesn’t require constant reminders and direction from management. The best processes are those that work on auto-pilot where a manager’s job is to nurture it, make sure the team stays disciplined to it, and looks for ways to improve it.&lt;/p&gt;&lt;p&gt;That begs the question – as a manager, how should my sense of urgency be created and maintained? That’s a blog for another day.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-369162587414547918?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/369162587414547918/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/creating-and-maintaining-sense-of.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/369162587414547918'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/369162587414547918'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/creating-and-maintaining-sense-of.html' title='Creating and Maintaining a Sense of Urgency'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-7156790740492208566</id><published>2009-03-13T05:58:00.001-07:00</published><updated>2009-03-14T09:11:56.885-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile TDD'/><title type='text'>Test Driven Development (TDD) Tip</title><content type='html'>&lt;span xmlns=""&gt;&lt;p&gt;I'm a big fan of Test Driven Development (TDD). TDD is an Agile methodology where automated unit tests are developed before the feature is developed. By coding automated test before actually coding the feature, the developer is forced to think through how the feature should work. If you've ever developed manual test scenarios you know what I mean. Many questions come out of the wood works of one's mind when going through this process. Another advantage of TDD is that once the tests are developed the development mission become clear – code to the tests and once they all succeed you are done and ready to move on to the next item in the prioritized list of features.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;However, TDD requires a bit of procedure built into it – especially with regards to Continuous Integration (CI) and deploying working code on a nightly basis. Both processes are vital to the success of a project. I encourage my team to check in working code daily; ideally multiple times per day. With each check-in the CI server builds the project(s). If the project fails to compile or the unit tests fail then the build is considered failed. At that point, everyone on the team gets an email stating the failure and fixing it become the top priority. This also applies to the nightly deploy process which compiles the code, runs the tests, deploys the project into a distributed environment where automated QA scripts are run. A failure at any point results in top priority work for the team the next day.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;In case you haven't already deduced the problem, if a feature takes a week to develop and all the automated tests are written up front, then the CI and deployment processes will be in failure mode most of the time. Thus, there are three solutions:&lt;br /&gt;&lt;/p&gt;&lt;ol style="margin-left: 37pt;"&gt;&lt;li&gt;Iteratively develop the tests. For example, in a single day a developer may create a few classes, some properties, and a few methods. Tests should be written to accommodate what will be completed today not for the entire feature (this is my preference).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The developer could develop all the tests with an "ignore" flag so the tests don't run.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Use a methodology other than TDD.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;I'm interested in your thoughts and alternative approaches that you've seen.&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-7156790740492208566?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/7156790740492208566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/test-driven-development-tdd-tip.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7156790740492208566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7156790740492208566'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/03/test-driven-development-tdd-tip.html' title='Test Driven Development (TDD) Tip'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3595126709385852916.post-7646376027688210029</id><published>2009-01-17T07:00:00.000-08:00</published><updated>2009-08-31T06:02:55.506-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>The Miracle of Agile</title><content type='html'>I am a disciple of Agile as a software development methodology for the simple reason that it was brought to Engineering teams through divine intervention. That statement might contain a bit of hyperbole but only a bit. Agile has revolutionized the way in which software is being developed by many teams across many industries though it is still unknown or a mystery to many more.&lt;br /&gt;&lt;br /&gt;What is Agile? Agile is an iterative approach to software engineering who's precepts are: collaborative teams consisting of cross functional members; frequent validation of requirements, designs, and implementations; self organized teams; and, unambiguous individual accountability.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;How is Agile different?&lt;/span&gt;&lt;br /&gt;I'm sure everyone reading this has heard of processes such as requirements gathering, analysis and design, development, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;QA&lt;/span&gt;&lt;/span&gt; testing, and user acceptance testing. Agile as well as many of the tradition approaches, Waterfall being by far the most common, embrace these principles. The differences lie in the implementation of those principles. Where Waterfall will attempt to describe the the entire application upfront through documentation which is then followed by development, &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;QA&lt;/span&gt;&lt;/span&gt; testing, and user acceptance testing, Agile bundles those principles into iterative life cycles called "sprints". Sprints are of a fixed duration, commonly between 2-4 weeks, and repeated over and over again until all the features are developed, the project budget is exhausted, or time runs out.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Plan-Driven (Waterfall) vs Value-Driven (Agile) &lt;/span&gt;&lt;br /&gt;The way in which the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;princi&lt;/span&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-9FPYnfwXqs/SXIFyycZzSI/AAAAAAAAABQ/sIt7gGJPbng/s1600-h/waterfall-vs-agile.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5292298882206256418" style="FLOAT: left; MARGIN: 0pt 10px 10px 0pt; WIDTH: 320px; CURSOR: pointer; HEIGHT: 240px" alt="" src="http://1.bp.blogspot.com/_-9FPYnfwXqs/SXIFyycZzSI/AAAAAAAAABQ/sIt7gGJPbng/s320/waterfall-vs-agile.png" border="0" /&gt;&lt;/a&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ples&lt;/span&gt;&lt;/span&gt; are implemented is the manifestation of their difference in philosophy. Where waterfall is plan-driven, Agile is value-driven. A plan-driven methodology is heavy on documentation and strives to fully describe the application before developing it through requirements, analysis, and design. That process provides a framework to methodically develop what's been documented. Typically there is a gargantuan project plan that is associated with the effort and everyone marches to the plan with little regard for course corrections and re-evaluation.&lt;br /&gt;&lt;br /&gt;A value-driven methodology stresses an empirical engineering process using an inspect and adapt approach with frequent feedback loops, i.e. sprints. The reason for this is that Agile believes that requirements gathering, analysis, design, development and testing should happen together when the feature is ready to be implemented. This approach provides flexibility with project changes such as feature deprecation, adding new features, and changing the requirements of existing features. As these events occur in a Waterfall project the documentation becomes cumbersome to maintain. The most efficient time to write about it is when it's time to develop it. During an Agile project, it's easy to make course corrections such as changing requirements as a result of what's been developed previously or a reconfiguring development priorities because of extenuating circumstances.&lt;br /&gt;&lt;br /&gt;Although it's comforting to know that so much thought went into determining what the customer wants and how their requirements should be implemented, there are significant inefficiencies with the level of detail that goes into the upfront analysis. The reasons are simple, some of which are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Users aren't always clear in their own minds what they want and how they want it.&lt;/li&gt;&lt;li&gt;Large documents are not handled well by many people. They tend to be too abstract for people to fully grasp.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Things inevitably change in the minds of many users once they can see and feel their requirements implemented. &lt;/li&gt;&lt;li&gt;The business environment often changes and directly impacts the priorities of the project.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;In my mind, it makes perfect sense to get your customer to see and feel the application features as soon as possible. This doesn't mean abandoning requirements, analysis, and design. It just means that upfront planning should be limited to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;Project Initiation&lt;/span&gt;: Planning the sprints, project infrastructure, team members, communication matrix, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;Developing a Prioritized List of Features&lt;/span&gt;: This is a list of features, prioritized by importance, with user-stories on how the features will be used.&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;High Level Architecture&lt;/span&gt;: A high level architecture should be developed. This phase determines things like the application tiers, technologies employed, thick or thin client, etc.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Once those steps are taken then development should start. I prefer two week sprints at the end of which my team gets immediate feedback from the customer. Catching mistakes with interpreting the user requirements, or users realizing that their requirements need to change is far cheaper to address at this point in development than at the end of the project during user acceptance testing. The recurring customer demonstrations also builds user confidence because they see progress. From the developer perspective, sprints provide a clear mission and the immovable customer demo at the end provides a constant sense of urgency.&lt;br /&gt;&lt;br /&gt;&lt;span style="FONT-WEIGHT: bold"&gt;Why isn't everyone doing it?&lt;/span&gt;&lt;br /&gt;There isn't a single answer as to why everyone isn't using Agile but the most common is - you guessed it - resistance to change. Here are a few reasons for resistance:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;The Devil You Know&lt;/span&gt;: People are comfortable with what they know and uncomfortable with what they don't know. In my experience, once the change is made, most team members see more similarities to their previous approach than they thought were there otherwise. The apprehension of the change is greater than the actual change itself.&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;Personal Fear: &lt;/span&gt;&lt;span style="font-size:0;"&gt;Can I do this?&lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt; &lt;/span&gt;&lt;span style="font-size:0;"&gt;Will I like it? Will I learn it fast enough? Will I look foolish? How will my job be affected?&lt;/span&gt;&lt;span style="FONT-STYLE: italic"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;Risk Aversion:&lt;/span&gt; The chances of switching methodologies without feeling some amount of pain is low. It will take at least one, but probably several, projects to change behaviors where Agile processes are implemented and feel natural. The speed of the transition is dependent on the fervency and &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;commitment&lt;/span&gt;&lt;/span&gt; of the transition evangelist.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;Existing Team(s)&lt;/span&gt;: Agile is highly collaborative and tends to minimize attention on documentation, thus an inherent lack of detailed specifications. If your projects rely heavily on coding to specs, then the transition to Agile could be challenging. However, if your team is already working from prototypes, has close involvement by the customer, and is highly communicative, then you are already working in an Agile-like style and the transition will likely provide change in the form structure not in approach.&lt;/li&gt;&lt;li&gt;&lt;span style="FONT-STYLE: italic"&gt;The Iron Triangle&lt;/span&gt;: There is contention with each side of the iron triangle - features, cost, and schedule - and it is virtually impossible to fix commitments to all of them simultaneously. Agile makes clear that commitments can only be applied to a maximum of two of the sides. One side always needs to be fluid. For example, company x has a demo at a convention in 3 months where it must show y set of features, therefore the the schedule and scope are fixed so the cost needs to be variable. With Waterfall projects the commitments to date, scope, and budget are typically, and irrationally, fixed at the beginning of a project. This makes people feel comfortable. However, in reality one or more of those commitments will inevitably be violated because it is unlikely that enough is known to allow for committing to all three.&lt;/li&gt;&lt;/ul&gt;Although it is unlikely that Agile was brought to us through divine intervention, the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;genius&lt;/span&gt; in it's approach makes me wonder what took so long to get here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3595126709385852916-7646376027688210029?l=applicationengineering.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://applicationengineering.blogspot.com/feeds/7646376027688210029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://applicationengineering.blogspot.com/2009/01/miracle-of-agile.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7646376027688210029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3595126709385852916/posts/default/7646376027688210029'/><link rel='alternate' type='text/html' href='http://applicationengineering.blogspot.com/2009/01/miracle-of-agile.html' title='The Miracle of Agile'/><author><name>Jack Notarangelo</name><uri>http://www.blogger.com/profile/02360973272202203729</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://3.bp.blogspot.com/_-9FPYnfwXqs/TVHYQWCKBhI/AAAAAAAAAFU/3J6_x3W0HJw/s220/JackKitchen.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_-9FPYnfwXqs/SXIFyycZzSI/AAAAAAAAABQ/sIt7gGJPbng/s72-c/waterfall-vs-agile.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
