From the perspective of a student
Introduction
Hello, I want to talk about my thoughts on software development after finishing a semester of Software Engineering courses. The course focused on the concepts of Software Engineering and the phases of development; during which I learned how to get the Specifications for a project, define Requirements, Design the concept of the software, Develop the software, Test the software, and Deploy the software. For our class project, my group collectively chose to develop a standalone executable for Windows because it was a type of software that none, but one had previously worked on, so it would make a good learning experience. After a brief discussion, everyone agreed that because of the new environment, we would create a relatively simple program, our own version of Microsoft Paint. Today, I will talk about the development phase and the concept of performance related to team composition.
Development
Developing a project with fellow students was a strange and exciting experience. It was the most democratic thing I have ever participated in. During every scrum meeting of the team, yes, we were practicing Agile for the project, we actively collaborated on brainstorming ideas for the project, features to be delivered, organizing stories and epics, and other miscellaneous development tasks. The division of labor was nearly autonomic, everyone took the tools and tasks which they knew they could complete. I took the job of implementing shapes in the drawing tool and general GUI work. The development process was largely spent learning the new environment of .NET and WinForms which generally delayed development by almost a month for the three inexperienced members of the team. After this learning period filled with lots of “why” questions for the lead developer, our team began performing at an incredible level. We had the remainder of the version 1.0 code finished just one month later.
Team Composition
Team Composition could not possibly be more important, as you read above, the ability of developers to complete a task in a new environment with new software using new tools is entirely dependent on individual personal drive to succeed and competence. A fellow student with no drive is like a dead horse on a carriage with 4 horses hooked up to it, they are dead weight and prevent the team from accomplishing more than mediocrity (compared to a team with fully invested and active members). A fellow student with no competence cannot be helped regardless of the drive to succeed, particularly if the gap in competencies is large, say a semester’s worth of missing knowledge.
TL; DR
When starting on a project, make sure to gather high performing people to ensure your success. Select people who are active in the class on that first day, people who take the incentive to engage with the professor and ask insightful questions. Don’t allow your team to carry you up the mountain to a good grade, that’s embarrassing and debasing, value yourself and your future enough to put in as much effort as you can spare. Make sure that your development choices put pressure on you and your team to reach new heights without over-extending what your skill and time can support. Use a well-defined development pattern like Agile to ensure that your development progress stays on track and remains measurable and meaningful throughout the duration of the project.