Critical Skills for a Successful Software Project
What does it take to make a software project successful? This was the topic of a recent Let's Discuss Slack event from Dev Together Madison . The discussion was lively and members provided great insights into critical skill targets for developers in any vertical. A number of crucial themes quickly emerged.
Communication of some kind came up in just about every discussion. Developers can help a project become successful by practicing good communication - around requirements, timelines, and difficult topics to name a few. A project suffers missed deadlines, unexpected features, and slow progress when communication within the project is broken. Developers need to clearly communicate with their coworkers, team leads, Quality Assurance, project managers, and project stakeholders.
Successful developers negotiate requirements, time estimates, competing priorities, resource usage, architecture and design, testing levels, etc with people in a variety of roles. They even negotiate with themselves - evaluating options and making trade-offs to find the most appropriate solution to stakeholder goals. Negotiation is a crucial skill in a human-based software project.
Scope can be a touchy subject with stakeholders, but it's a crucial safety net that keeps the project under control. Stakeholders often hold a particular vision of the software in their head without fully explaining it to the development team or other stakeholders. When an important stakeholder makes a casual remark about Feature X she thought would be included, some developers rush to add it at the cost of expanding scope.
Managing scope relies on good communication between project participants. Successful developers call out when the project's scope changes so stakeholders know they can get Feature X, but it will add cost to the project. Agile approaches to software development help curb the impact of scope creep by keeping initial scope small and forcing a re-evaluation every sprint.
When a stakeholder declares a timeline ultimatum, the project turns into a death march. The developer team is forced to focus on stuffing features in before the deadline and start neglecting quality and testing just to check something off the to-do list.
Projects that have a must do by x date are doomed to have low quality. -Cristina Ruth
Successful developers communicate and negotiate with stakeholders to find a reasonable middle ground instead of slogging toward the project's death. In this scenario the stakeholder has declared the timeline to be the number-one concern. A successful developer helps them understand that the timeline exceeds the scope so scope must be reduced to fit the timeline. In addition, successful developers know how to prioritize their efforts so the most important things get done on time.
I think "under promise and over-deliver" might fit here -Steve
In order to be successful a developer must understand the work to be performed - and that requires listening. Too often developers miss critical details by declining to ask clarifying questions or drilling down to the root of the problem the stakeholder is trying to solve. Much of software development is about transferring information between people, and being a good listener makes that a lot easier.
Some good resources for learning better communication habits were suggested in the discussion:
- How to Win Friends and Influence People by Dale Carnegie (book) (audiobook)
- 7 Habits of Highly Effective People by Stephen R. Covey (book) (audiobook)
- Crucial Conversations by Patterson, Grenny, McMillan and Switzler (book) (audiobook)
- Simon Sinek (youtube)
Humans create bugs! A successful software project should have the fewest bugs possible. That means testing is a key to a successful project - and not just for the QA team - developers need to test their code before foisting it off on someone else. A good rule of thumb for developers is if you'd feel comfortable enough to deploy the code you just wrote into production during the busiest day of the year, it's ready for QA.
Always appreciate your testers, even when they find problems in your code. - rosslarson
Developers have to present things all the time - their opinion on design strategies, feature ideas, proposals, estimates, bad news - to people in a variety of roles. Regardless of who you have to present things to, being comfortable while speaking to an audience makes it easier to gain stakeholder support, persuade coworkers, lay out a plan to the boss - all things that help grease the project's wheels.
Even just webinar presenting is an art -Joe Warbington
A successful developer learns how to be a good public speaker so he can make his case effectively and persuasively. Even presenting over the phone requires a well thought-out approach and path. Presenting to an audience in person takes more practice, but the results are worth it.
Throughout Dev Together Madison's Let's Discuss event, many common themes were raised around building crucial developer skills. Thank you to everyone who participated!