Principles of successful development projects
Leveraging a trusted development partner can help you expedite your product roadmap and adoption of new technologies, however, these projects take thoughtful planning and structure to execute successfully. This software development outsourcing checklist outlines many of the key practices that are critical to success and are built on the following key principles:
- Simplicity (KISS)
- Business value and alignment to priorities
- Quality throughout
- Leadership and team commitment and accountability
- Rapid and iterative delivery
- Collaboration and transparency
- Continuous improvement and waste elimination
To help clients prepare to work with a development partner, we created a checklist that details the principles for successful development projects along with scope and goals, Agile management, requirements and validation, quality and much more.
Project scope and goals
Defining clear objectives and scope of the project helps to focus on specific measurable deliverables that define its success, thus allowing for clear alignment of all stakeholders.
- Are the project scope, goals and business case documented with transparency to all team members, both internal and external? Example is a Wiki that is reviewed and refreshed at each milestone, etc.
- Are all epics / features identified and stack-ranked in order of importance for the project so the team has a clear sense of the key deliverables and priorities?
- Is each epic / feature defined, including target customer(s) and measurable customer criteria, so the team understands at a general level what is critical for each key deliverable?
- Is the technical architecture for the product defined, including key components and technologies that will be used, so the team has a high-level understanding of how the project will be built?
- Is the project schedule broken down into increments of no more than three months, and further broken down into individual iterations of no more than 2 weeks so that the project deliverables are scoped to manageable durations?
- Are standard and consistent estimate techniques used on each epic / feature to appropriately and consistently size key deliverables, with buffers added to account for unknown items and risks?
- Are epic / features scheduled for delivery in relative priority order so that the team focuses on the high priority or risk earlier in the project?
- Are acceptance criteria and non-functional requirements (performance, scale, availability etc.) defined for the project and are they reasonably measurable by the project team?
- Have project risks been identified and plans in place to mitigate potential risks and / or resolve risk early in the project?
- Are the project scope, goals and priorities commonly understood and agreed upon by all team members, including key stakeholders and the outsource development team?
- Did key leaders of the external-outsource team actively participate in the development of the project scope, goals, estimate, etc. while co-located with the internal team during this phase?
Delivery team
Being intentional about team design, roles and responsibilities is key to successful collaboration and accountability.
- Are all team members identified along with their respective roles and responsibilities so the entire team (both internal and external) know each other and understand how they will collaborate?
- For the internal teams, have these critical roles been identified and resourced appropriately?
- Product Manager — This person is responsible for the overall project direction, customer requirements and priorities for the development team. They are also responsible for the customer validation plan and coordination with project stakeholders.
- Architectural representative — This is the architectural contact for the outsourced team, and is responsible for consistent architecture across products and features.
- Stakeholder group — Leadership representatives responsible for overall project success.
- For the external (outsource team) have these critical roles been staffed?
- Technical leader — This person’s ultimate responsibility is for technical advice and programming of the outsource development team and partner with the client architect team to ensure architectural consistency.
- Product owner — This role is to partner with the client product management team and is responsible for breaking down and refining user stories and acceptance criteria and coordinating with the development team.
- Does the external development team have the right mix of resource / talent between product owner, developers and testers?
- Are the external teams co-located and broken down into individual teams no greater than seven people?
- Did the leaders of the internal and external team work together to determine and agree on roles and responsibilities for key product development deliverables?
Agile project management and delivery
Continuously adopting and adjusting with iterative sprint cadence allows the team to execute effectively, learn from mistakes and recover quickly.
- Are the key planning and sprint deliverables (requirements, sprint plans, daily stand-ups, definition of done, etc.) agreed upon by the team in advance of starting the first increment and sprint?
- Are clear roles and responsibilities, including points of collaboration, defined for each key deliverable to reinforce ownership, accountability and teamwork?
- Are project deliverables planned iteratively through the course of the project in no greater than three month increments? For example, What do we plan to accomplish in the next 3 months, epics, priorities, risk to resolve etc.
- Are the appropriate dashboards in place to measure progress on work, test execution, automation, code quality and defects throughout the increment?
- Are backlog items assigned to the increment and sprint and worked on in relative priority order to ensure the team is working on the highest priorities early in the project?
- Are sprints no greater than two weeks in duration, with a sprint plan and goals completed at the start of each sprint?
- Is there a clearly defined definition of done for each user story and sprint so there is a common understanding of completeness and transparency of progress?
- Are the aspects of defect lifecycle management, like definition of severity / priority, bug status transition, etc. clearly defined and unambiguous for all stakeholders?
- Does the team determine and have the necessary capacity or velocity to accomplish increment and sprint goals in the allotted time?
- Does the team hold a daily stand-up and review and update the team board daily to increase collaboration and project transparency?
- Does the team review epic / feature at the end of each sprint and provide feedback to the development team on fit for purpose?
- Is there a milestone checkpoint at the end of each increment with the core team and key stakeholder to review and align on project progress and issues and resolve open items?
- Does the team use a standard and shared set of development tools for collaboration, project management dashboards, source control, bug management, test management and test automation?
- Do all team members and stakeholders have full access to the project management tools and dashboards to drive for a mutual understanding of status and issue throughout the project?
- Does the team have a common understanding and agreement on source control management, configuration management (a.k.a. build) and deployment practices around branching, merging, executing product / component build(s) and deployment to pre-production?
- When estimating capacity, does the team allocate time for vacations, meetings and unplanned work such as customer escalations, resolving unknown items, managing risks etc.?
Detailed requirements and validation
Clarity on deliverables and what the team needs to work on is key to ensuring no waste and continuous roadmap alignment.
- Does the team use standard requirement breakdown structure (Epic > User Stories > Acceptance Criteria > Acceptance Tests) to drive alignment with project goals through implementation?
- Are requirements maintained in one product backlog that is stack-ranked based on project priority so there is a single version of the truth on project expectations and priorities?
- Does the team work collaboratively and iteratively to define and refine requirements in stack-rank priority order?
- Is there heavy use of story boards and mocks and regular (at least weekly) video or on-site grooming sessions with the team to drive a mutual understanding of customer expectations on the requirements?
- Does the entry criteria for each sprint planning session include full refined user stories, acceptance criteria and acceptance tests for the sprint, with a stretch goal of having user stories and acceptance criteria defined for the next 2 sprints?
- Are system reviews held with key customers or customer representatives through the duration of the project and typically at the end of each iteration?
- Best practice: the product owner or representative is on-site full time working with the development team on a day-to-day basis.
End-to-end quality
The traditional approach to testing, finding and fixing defects is very expensive and time intensive. It can easily end up eating over half your development time; however, building in quality to avoid defects or find them earlier has the added benefit of improving time to market and project predictability.
- Is there a test strategy and plan to ensure the project stays at high quality throughout its duration and includes measurable quality criteria?
- Is code written according to a well-defined team standard and is there automated measurement in place to validate the standards?
- Is code peer-reviewed by internal and external team members, before code commit, to ensure high quality and knowledge sharing?
- Is continuous integration and testing of code used to find potential defects and fix them early in the development cycle — when it is least costly?
- Are automation regression suites run at least nightly to find potential defects and integration issues early and fix them while in sprint?
- Are defects discovered during the sprint and regression pass resolved during the sprint to keep the backlog of defects in the project low and manageable?
- Is there review and feedback of work at the end of each sprint with customer representatives to ensure features are fit for purpose and potential issues are rapidly resolved?
- Does the team have a deployable product at the end of each sprint and clear definitions of done to reinforce high quality throughout the development cycle?
- Are the necessary non-functional tests defined, automated and run at least once in the increment to detect key non-functional issues?
- Does the team use customer representative test environments and data to ensure that test execution is done in a near-real-world setting?
Collaboration and communication
To be effective, collaboration and communication needs to be systematically built into the process, tools and development practices — it rarely just happens. Key practices to reinforce collaboration are:
- Is on-site time scheduled with the product owner and development team at each key planning and report-out event? The best practice is having the product owner with the team over 50% of the time and the development team coming to headquarters for scope planning and project kick off.
- Was the entire team co-located for the increment planning sessions and initial sprints and to ensure alignment, build relationship and effectively on-board the external team members?
- Was time planned into the initial sprints for building domain knowledge and learning curve for external team members?
- Are daily stand-ups attended by all team members, EVERY DAY, on-site or via video conferencing, with the team board updated daily during or before the stand-up meeting?
- Are requirement grooming sessions done with the entire team on-site or via video conferencing with heavy use of mock-ups and story boards to help communicate customer expectations?
- For customer / stakeholder reviews, is the entire team involved, with reviews held at the end of each sprint for customer representatives and at least quarterly for stakeholders?
- Are joint code reviews held after each commitment to ensure code meets standards and effective knowledge transfer and sharing?
- Is the team email alias not separated by internal and external team members to make board communication easier?
- Are the key dashboard metrics displayed in real time on monitors to illustrate development progress and potential bottlenecks?
- Do the roles and responsibilities for each development deliverable reinforce team collaboration? Is co-ownership for the project result reinforced by stakeholders and development partner leadership at EVERY stakeholder update?
- Is co-ownership of the project result reinforced by stakeholders and development partner leadership at EVERY stakeholder update?
When Crosslake helps a client determine the best path to success with their business initiatives, we take all options into consideration to deliver the right solution and structure for the customer. If you’d like to learn more about our software development services, contact us today.