EditProblem: Competitive Landscapes Necessitate Rapid Responsiveness from .NET Software Engineering Teams
Today's internet and ecommerce companies often face steep competition. Even if they do not currently face this competition, there are very low barriers to entry for ecommerce compared to traditional manufacturing or production companies. The reasons for this are fairly simple:
- Low-cost or no-cost of software tools (languages, IDEs, frameworks & libraries, tools)
- Low-cost of infrastructural components (relational DBs, file servers, network bandwidth)
- Rising maturity of engineering best-practices (design patterns, agile, scrum, XP, TDD)
Faced with these realities, software development shops are forced to reexamine the way they produce software. They are forced to take notice of the rapidly changing competitive landscape and adjust their practices. Failure to do this will result in:
- Stagnation in the market
- Decreased customer-value
- Diminishing ROI for existing products and services
- Lower revenue
- Shrinking developer and management morale
- Ultimately, obsolescence
However, companies that successfully navigate these waters and modernize themselves will position themselves to reap the opposite:
- Increased market-penetration
- Increased customer-value
- Continued accrual of ROI for both existing products and services and also new ones
- Increased revenue
- Healthy and increasing developer and management morale
- Sustained market dominance
EditGoal: Achieve Sustainable Market Dominance By Modernizing .NET Software Engineering Practices
We know that in order to achieve sustainable market dominance a software engineering team must achieve a level of engineering efficiency and responsiveness likely to be unrivaled by its competitors or potential competition. To do so requires careful planning and attention to detail. This effort must seek to improve the team in several crucial competencies:
- Increase frequency and reliability of software delivery by:
- Reducing time-to-market through frequent customer-value-added releases
- Increasing degree of actual customer involvement and feedback by enrolling them in alpha and beta testing programs
- Reducing time and effort spent eliminating defects by building quality into their software in the beginning and also improving quality-control measures
- Increase customer value and company ROI by:
- Incorporating customer-valued features more rapidly and regularly by using focused incremental release strategies
- Minimizing the potential for degradation of core technology by properly using risk management
- Increase responsiveness to changing market conditions, including the ability to:
- Rapidly thwart existing competition and new entrants to the market
- Rapidly address increased regulatory or security concerns
- Rapidly leverage advances in technology without incurring expensive or time-consuming research & development activities
EditSolution: Creating High-Performance .NET Software Engineering Teams Using Agile Techniques for Highly Competitive Markets
The good news is that this is not new territory. There is much research and empirical data that points to a clear path for implementing best practices to build a high performance team. The rest of this article will link to dozens of resources, including web sites, presentations, podcasts, software, and videos that will help you and your team become a high performance team. Since this is a collaborative wiki, please feel free to sign up and help edit this article.
If you have time to watch only one video, then take an hour and listen to or watch this video:
http://www.infoq.com/news/2008/07/Agile-Google-Jeff-SutherlandThis is Jeff Sutherland, the co-creator of Scrum for software development, presenting a retrospective at Google discussing how the AdWords team used Scrum to manage this multi-billion dollar project successfully. This video covers many key points about agile development and Scrum.
EditGeneral Resources
This being the internet age, there is far more material you can find on your own than I can give you! However, what I provided below represents resources I have used so far.
EditPrimary Sources
http://www.infoq.comOn InfoQ you will find hundreds of videos, interviews, articles, and presentations related to enterprise class software development for .NET, Java, Ruby, PHP, and other technologies. The topics cover Agile, Scrum, SaaS, REST, SOAP, refactoring, databases, and more. In my opinion, this is the best web site available for keeping yourself educated about modern techniques and practices.
For .NET and agile software, here are some specific sub-sections to check out are:
http://www.infoq.com/dotnethttp://www.infoq.com/architecturehttp://www.infoq.com/agilehttp://www.infoq.com/scrumEditSecondary Sources
http://www.codeproject.com/CodeProject is well known for having thousands of useful articles and tutorials. You will find many great resources here.
http://www.codeplex.comCodePlex is Microsoft's analog to SourceForge.net. Many open source projects are houses on CodePlex now, including the ASP.NET framework itself and the MVCContrib project.
http://www.se-radio.net/Software Engineering Radio is a great podcast that features interviews with key figures in enterprise software development. The content spans many languages, platforms, and tools.
http://www.dotnetrocks.com/Karl Franklin and Richard Campbell were two of the very first "podcasters" out there. Their .NET Rocks podcast is a great way to stay on top of the latest trends in .NET development. The content is not as balanced as what you'll find on InfoQ or Software Engineering Radio, naturally, since it's .NET specific.
http://polymorphicpodcast.com/The Polymorphic Podcast is Craig Shoemaker's podcast. This show gets better and better every time I visit the web site. The topics are usually technical in nature and help you with real-world practical issues.
http://www.pragprog.com/The Pragmatic Programmers, Dave Thomas and Andy Hunt, have a great web site that has information about their book titles and features podcasts and videos as well.
EditAgile Software Development Resources
These are currently loosely categorized, but will be categorized and commented on as time permits:
EditWeb Sites
EditPresentations & Videos
http://www.infoq.com/presentations/role-of-testing-in-agile-scott-amblerScott Ambler presents an overview of agile software development and then explains the crucial role of QA and Testing within agile development. Here is the overview:
Agile developers are "test infected", we do test-first development and treat acceptance tests as full-fledged requirements artifacts and work with our stakeholders to acceptance test throughout the dev lifecycle. The end result is significantly higher quality software, achieved with very little input from the testing community. So what is the role of testers and QA people on agile projects?
Critical: Ambler says that he has seven criteria for determining whether a team is really agile:
Seven criteria to put you on the path to agility Agile teams:
1. Can introduce you to their stakeholders, who actively participate on the project.
2. Can show-and run-their regression test suite.
3. Produce working software on a regular basis.
4. Write high-quality code that is maintained under CM control.
5. Welcome and respond to changing requirements.
6. Take responsibility for failures as well as successes.
7. Automate the drudgery out of their work.
Regarding the automate regression suite requirement, he says that if a team does not have that then he considers them code-and-fix
hackers.
More about this here: http://www.ddj.com/architect/184415445
EditScrum
Scrum as a software project management framework was formalized primarily by Jeff Sutherland and Ken Schwaber. Both are quick to state they are not the creators of it, however. Instead, they point out that it emerged naturally from research into Japanese companies and other highly successful and innovative companies in product development and manufacturing.
EditLinks
http://del.icio.us/search/?fr=del_icio_us&p=scrum&type=allThe most popular links tagged with Scrum on del.icio.us. This is bound to be a more fluid and complete and diverse list than what I have below.
EditWeb Sites
http://en.wikipedia.org/wiki/Scrum_(development)Good overview of Scrum with a clear breakdown of its basic operation and team roles
The New New Product Development Game1986 Harvard Business Review paper by Takeuchi and Nonaka about how manufacturing companies were utilizing a "scrum" based development methodology of overlapping phases. This paper formed the groundwork for Sutherland and Schwaber to develop Scrum for software development.
http://www.controlchaos.comKen Schwaber's Scrum information and training web site
http://www.MountainGoatSoftware.comMike Cohn's web site with hundreds of presentations and resources about Scrum and Agile
EditPresentations & Interviews
http://www.infoq.com/interviews/jeff-sutherland-scrum-rulesJeff Sutherland explains the basic rules of Scrum and describes the "Nokia Test", which his venture capital partners use to determine whether teams are truly doing Scrum.
http://www.infoq.com/presentations/The-Roots-of-ScrumJeff Sutherland presenting the history of Scrum. He covers Japanese manufacturing and the first Scrum at Easel Corporation.
http://www.infoq.com/news/2008/07/Agile-Google-Jeff-SutherlandJeff Sutherland presenting Agile Project Management Lessons Learned at Google. This provides an excellent experience report about how Mark Striebeck introduced Scrum into Google to manage the AdWords project. A key observation that Jeff makes is that Mark introduced Scrum in an incremental, agile way. He introduced one concept at a time and let the team lead itself forward.
http://www.infoq.com/presentations/AgileEnterpriseRealWorldExperienceJeff Sutherland describes real-world experience in helping lead companies to become Agile through adopting Scrum. He discusses Google, Yahoo, PatientKeeper, and many others companies.
http://video.google.com/videoplay?docid=-7230144396191025011Ken Schwaber discussing "Scrum, et al" at Google in 2006. Ken shares with Google engineers the research and findings of Scrum from both a theoretical and a practical perspective. He discusses ways to circumvent common issues people face when implementing Scrum.
http://www.infoq.com/news/2006/11/ken-schwaber-code-qualityKen Schwaber on Code Quality as a Corporate Asset. Ken discusses why teams should deliver, for example, 16 units at 100% quality rather than 20 units at 80% quality in order to maintain core functionality as a corporate asset. This is an excellent presentation that explains the corporate motivation for maximizing ROI through ensuring code quality.
http://video.google.com/videoplay?docid=8795214308797356840Jeff Sutherland presenting "Scrum Tuning: Lessons Learned at Google". In this talk, Sutherland covers the history of Scrum and some ideas gained from the implementation at Google. This is similar to his other presentations, but different in some areas.
http://www.infoq.com/presentations/Scrum-bbc-newmediaScrum Boosts Effectiveness at BBC. Andrew Scotland tells how BBC's New Media division, characterized by a lot of uncertainty and emergent software process, decided to use Scrum to more effectively deliver software amidst all that change and uncertainty.
EditLean Software Development
Tom and Mary Poppendieck have done a lot of research into the history of Lean Manufacturing and have applied those principles to software development. Here is a link to their web site and some excellent presentations by them:
http://www.poppendieck.com Consulting web site for Tom & Mary Poppendieck.
http://video.google.com/videoplay?docid=-5105910452864283694Mary Poppendieck on Competing on the Basis of Speed. This excellent presentation covers the need for automating tests and JIT principles.
http://www.infoq.com/presentations/poppendieck-agile-leadershipMary Poppendieck on the history of leadership and management and the role of leaders in software development.
http://www.infoq.com/interviews/poppendieck-lean-2007Tom and Marry Poppendieck on using Lean Software Development for a competitive advantage.
EditExtreme Programming (XP)