Project Management

Non-Solo Development

From the Disciplined Agile Blog
by , , , , , ,
This blog contains details about various aspects of PMI's Disciplined Agile (DA) tool kit, including new and upcoming topics.

About this Blog

RSS

View Posts By:

Tatsiana Balshakova
Mark Lines
Mike Griffiths
James Trott
Bjorn Gustafsson
Curtis Hibbs
Scott Ambler

Past Contributors:

Joshua Barnes
Michael Richardson
Daniel Gagnon
Valentin Tudor Mocanu
Kashmir Birk
Glen Little
Klaus Boedker

Recent Posts

DA 5.6 is released

Disciplined Agile 5.5 Released

Choose Your WoW! Second Edition Is Now Available

Requisite Agility applied in Project Management

Disciplined Agile and PMBoK Guide 7th Edition

Categories

#ChoiceIsGood, #ChooseYourWoW, #ConsumableSolution, #ContinuousImprovement, #CoreAgilePractices, #experiment, #Experimentation, #GuidedContinuousImprovement, #Kaizen, #LifeCycles, #ProcessImprovement, #TealOrganizations, Adoption, agile, agile adoption, Agile Alliance, Agile Business Analyst, Agile certification, agile data, agile governance, agile lifecycle, agile metrics, agile principles, agile transformation, Agile2018, Agile2019, Agile20Reflect, AgileData, Analogy, announcement, Architecture, architecture, architecture owner, Articles and publications, Asset Management, Atari, Backlog, Barclays, being agile, benefits, bi, blades, book, Branching strategies, Browser, Business Agility, business intelligence, business operations, capex, Case Study, Certification, certification, charity, Choose your WoW, CMMI, cmmi, Coaching, Collaboration, Communications Management, Compliance, Compliancy, Conference, Construction, Construction phase, Context, Continuous Improvement, coordination, COVID-19, Culture, culture, Cutter, DA, DAD, DAD Book, DAD discussions, DAD press, DAD roles, DAD supporters, DAD webcast, DADay2019, Data Management, database, dependencies, Deployment, Development Strategies, DevOps, disaster, Discipline, discipline, Disciplined Agile, disciplined agile delivery, disciplined agile delivery blog, Disciplined Agile Enterprise, disciplined devops, Documentation, Domain complexity, dw, DW/BI, Energy Healing, Enterprise Agile, Enterprise Architecture, Enterprise Awareness, enterprise awareness, Essence, estimation, Evolving DA, Executive, Experiment, facilitation, FailureBow, feedback-cycle, finance, Financial, FLEX, Flow, foundation layer, Funding, GCI, GDD, Geographic Distribution, gladwell, global development, Goal-Driven, goal-driven, goals, Governance, GQM, Guideline, Hybrid, Improvement, inception, Inception phase, India, information technology, infosec, Introduction, iterations, Kanban, large teams, layer, lean, Lean Startup, learning, Legal Project Management, LeSS, Lifecycle, lifecycle, Manifesto, mark lines, marketing, MBI, Metaphor, Metrics, metrics, mindset, Miscellaneous, MVP, News, News and events, Non-Functional Requirements, non-functional requirements, Non-solo development, offshoring, Operations, opex, Organization, Outsourcing, outsourcing, paired programming, pairing, paper, People, People Management, phases, Philosophies, Planning, PMBoK, PMI, PMI and DA, PMI Chapter, Portfolio Management, post-format-quote, Practices, practices, Principle, Process, process improvement, process tailoring, Product Management, product owner, Product Owners, productivity, Program Management, Project Management, project-initiation, Promise, Quality, quality, rational unified process, Refactoring, Reiki, Release Management, release management, Remote Training, Remote Work, repeatability, requirements, Requirements Management, research&development, responsibilities, retrospectives, Reuse, Reuse Engineering, ride for heart, rights, Risk Management, Risk Management, Risk management, Roles, RUP, SAFe, sales, Scaling, scaling, scaling agile, Scheduled Workshops, SCM, scorecard, Scrum, ScrumMaster, SDLC, Security, security, self-organization, SEMAT, serial, skill, solutions software consumable shippable, Stakeholder Management, strategy, Support, Surveys, Teal organizations, team development, Team Lead, team lead, Teams, Technical Debt, Teleconferencing, Terminology, terraforming, test strategy, testing, time tracking, Tool kit, Toolkit, tools, traditional, Transformation, Transition iteration, transition phase, Uncategorized, Upmentors, Using PMI Standards, value stream, velocity, vendor management, Virtual Training, Workflow, workflow, workspaces

Date

linkedin twitter facebook Request to reuse this  


Last month I gave a presentation on DAD at the Innovate Comes to You conference in Long Beach.  During my review of the DAD practices, someone asked a question if non-solo development (aka pairing) was a cost-effective practice.  Which made me realize they had never tried it.  Having been a programmer now for 28 years, I’ve cut a lot of code.  During which, I’ve done a lot of solo-development and non-solo development, and I’d have to say that I would highly recommend non-solo development in most contexts.

Non-solo development produces higher quality code, code with fewer defects, and less technical debt.  Most all of us have seen the chart that shows the cost of a defect growing exponentially during the development lifecycle.  Fixing a bug in a maintenance mode requires someone (or a pair) to wrap their brain around often complex algorithms in order to understand the logic, make the repair, and not break something else.  This is far more costly later, rather than when the code is “fresh in your head”.  Having a second set of eyes present while code is being authored often catches these bugs before they happen.

Having two minds make design decisions in real-time during coding, greatly reduces future technical debt.  Furthermore, model storming with the team will improve overall architecture and design and result in less refactoring work and technical debt.  If you’ve ever been on a project that has suffered from the costs of technical debt then surely you can realize the benefits of preventing technical debt before it’s incurred.

Non-solo development usually increases productivity, motivation, and morale of developers.  From my own personal experience with pairing, I’ve found it increases productivity in most situations.  Left alone, I’m more prone to lose focus, surf the net, think about non-work things, etc.  When engaged with a partner I tend to be more driven, motivated, and focused on completing development tasks.  Team work and collaboration is often more rewarding then coding by one’s self.  Tag teaming the keyboard helps to keep the pace and reduce fatigue.

Many projects will find they need fewer code reviews with non-solo development, due to actual code reviews happening in real-time.  If you try non-solo development on your team, you’ll find that certain combinations of individuals have better chemistry and thus better throughput and quality.  In most situations you should try to keep these bands together jamming out great code, unless there is a need to grow the skills of more junior resources.

Non-solo development is an excellent way to grow development skills.  Matching up senior developers with junior developers is a great way to grow your talent pool.  In these situations, I prefer to have the junior developer do most of the “driving” with the senior developer in the “back seat”.  It’s a great way to bring new resources up to speed with architecture, design, and the state of the code.

It’s also highly effective during maintenance.  In these situations it’s good to group resources less familiar with code with resources more familiar with the code.  By fixing bugs and developing new code together, tacit knowledge and skills are transferred more readily.  Non-solo development is a key ingredient to growing skills and improving the capabilities of your personnel and your team.

Non-solo development by nature increases the “bus factor”.  If tacit knowledge gained by authoring code is not shared by more than one developer, if that developer is “hit by a bus” or leaves the project, that knowledge is lost.  Hopefully code is well commented, clearly written, and may even be externally documented (though I question the value of creating external code documentation in many cases).  However, even well described code can take time to understand how it works, especially to the level needed to make changes without introducing new bugs.

This is why non-solo development is effective in reducing this dependency on a single developer, on a single point of failure.  Knowledge redundancy achieved by sharing the tacit knowledge of how various code modules or sub-systems function, helps build a more collaborative, fault-tolerant environment.  Trying to capture this tacit knowledge in documentation and to keep it up to date increases costs and decreases productivity.

So is solo development always bad?  No, I’ve written a lot of great code all by myself.  There have been projects where I understood the business, knew what software it needed, grasped how to architect the solution, could see much of the design details in my head, and just coded like the wind.  No communication to slow me down, heck there were times where I coded 18-20 hours a day for a week at a time.  I was able to whip out tremendous value in a short period of time.  But that kind of pace is not sustainable over months. Nor is the single great developer scalable to large projects.  Plus, who will maintain all that code, once that developer moves on to the next project.

At some point, most projects take a team of people.  As mentioned above there are big benefits in combining team members and avoiding solo development.  Especially with respect to quality during green field development where considerable design decisions are being made as new code is developed.  The whole can be greater than the parts; the power of collaboration and non-solo development will improve quality and keep the velocity churning.  If you’ve never tried non-solo development on your team, you should.  You’ll never experience the benefits if you don’t give it a shot.


Posted by Mark Lines on: September 13, 2011 12:57 PM | Permalink

Comments (0)

Please login or join to subscribe to this item


Please Login/Register to leave a comment.

ADVERTISEMENTS

"In the real world, the right thing never happens in the right place and the right time. It is the job of journalists and historians to make it appear that it has."

- Mark Twain

ADVERTISEMENT

Sponsors