As you develop your coding skills with Codecademy, you will eventually reach a point when you will want to take your new knowledge and use it to build a complex project. One way to create a fully-formed project is to assemble a team of collaborators to work on the project with you. We will walk you through the best practices on how to assemble and manage a team that will help make your project idea a reality.
When Am I Ready?
You may be wondering when you are “ready” to take the leap from learning code to creating a project with code. Rather than viewing a project as an “end” of your learning, we encourage you to think of projects as another step in your life-long coding journey.
Projects are opportunities to push yourself a little outside of your comfort zone and expand your skill set. So, as soon as you feel comfortable with the foundations of writing and executing code in your language of choice, we encourage you take the leap and follow through on your idea as way to push yourself to learn more!
“I think you can have a really successful project without knowing a lot of code and sometimes knowing a lot of code can be debilitating because you want to do really fancy things. You think, ‘Oh I know how to build this crazy architecture, I’m going to build the fanciest house ever.’ Whereas, if you only know how to build a log cabin, you just end up building a really nice log cabin.”
In other words, rather than obsessing over what you don’t know, you are perfectly capable of pursuing an interesting idea with a basic foundation.
Scoping Your Project
The first step in creating a new project is having an idea for a project! Before assembling your team members, it is necessary to define your project’s goals. In these early stages of ideation you should be able to define the problem or need that the project will address, the end-goal and use cases for the final project, and a deadline for when the project will be released.
You should be prepared to deliver a quick, catchy summary of your project idea called an elevator pitch. A successful elevator pitch will define your motivations for starting this project and your vision for a solution. This elevator pitch can be tailored to both convince stakeholders to support your project idea and to convince new recruits to join your team. One trope for start-ups’ elevator pitches is “Uber for X,” but feel free to get creative!
Once you have the project objectives and elevator pitch more clearly defined, you can move on to defining the resources needed to make your idea a reality, otherwise known as the project dependencies. These dependencies can range from having the proper dataset for your analysis, to having the proper web hosting services for your web app, to having proper funding to acquire these resources.
But, most importantly, it is crucial to define the proper areas of expertise you need represented by your team members. Once these team roles are well-defined, you can begin searching for collaborators based on the skill sets they will bring to the table.
Assembling a Team
The path to recruiting a team member will be different for every role. Sometimes, you will have worked with someone in the past and recall having a strong working relationship on a previous project. Other times, you will identify potential team members that have strong backgrounds in a skill set absent from your current team and need to reach out to them.
On other occasions, if you share your elevator pitch at local meet ups, conferences and online forums, individuals who gravitate to your mission will approach you and see how their skills can fit into your project. Using all these methods, you can build out your team one person at a time until every required skill set is represented.
If you live outside a major tech hub, there are still plenty of ways you can recruit programming talent for your project. First, I’d recommend checking to see if there are local tech-themed Meet-Ups, a Google Developers Chapter, or a civic hacking group in your area. Local programmers across the community like to gather at these events for knowledge sharing. If these groups don’t already exist in your area, we would encourage you to consider starting them yourself. You’ll be surprised by how many other programmers in your community were looking for a similar outlet!
Plus, you don’t have to limit your team’s geographic footprint to your town—building a remote team is also an option! One place you can find team members for your remote team is on public forums or Slack channels dedicated to your interest. Some Slack channels we can recommend are Codecademy Lifelong Learners, DevChat, or Data Viz Society for aspiring data visualisation specialists.
Once you have secured commitments from all your collaborators, you should set up an initial meeting to get everyone on the same page. In this initial meeting, you will restate your project objectives and possibly open up the floor for feedback from your collaborators.
You should also establish each individual member’s specific responsibilities and areas of ownership. Be sure to discuss the tools, languages and technologies that you will be collectively working with. We also recommend establishing regular meetings (daily, weekly, etc) for the whole team or subteams to reconvene, share what they have accomplished, and outline their next steps.
In this initial meeting, be certain to discuss how you can best accommodate your team members' interests and availability: actively ask each team member what they would like to accomplish in their role and how much time they can commit. By having these conversations upfront, you can ensure that a) you create a working environment that all team members feel invested in, and b) you create an open line of communication should a team member become dissatisfied with their role.
Now that your team is up and running, you want to make sure everyone is on the same page throughout the development process and as you move closer to your end goal. There are several different approaches used by project management teams to keep teams on track. Some of the most popular project management frameworks used in software development include: Lean, Agile, Scrum, and Kanban.
As we describe each of these frameworks, you’ll notice that there can be quite a bit of overlap between the principles of each framework. This goes to show that there is no one prescriptive framework that works for every project, rather your team’s particular management style can be a mix-and-match of elements these frameworks best suited for your team’s needs.
A Lean approach to business management is a set of principles that encourages continuous improvement. The seven principles of Lean management are:
- Optimize the whole
- Eliminate waste
- Build quality in
- Deliver fast
- Create knowledge
- Defer commitment
- Respect people
A Lean team works by clearly defining a process and then having individuals or subteams assume responsibility to improve a step in the process without navigating bureaucratic hurdles.
Agile is an iterative approach to software development rooted in a set of four philosophic priorities:
- Individuals and interactions over processes and tools.
- Working software over comprehensive documentation.
- Customer collaboration over contract negotiation.
- Responding to change over following a plan.
An Agile team works in short time spans where the team works to deliver the next iteration of working code as quickly as possible. They will then field user feedback of their newly released project to inform their next sprint.
Scrum is a specific implementation of an Agile framework where the next iteration of workable code is developed in a short time frame referred to a “sprint” (usually 2-4 weeks). At the beginning of the sprint, the team will agree upon “User Stories” to communicate the features and objectives to include in this sprint and add it to the “Sprint Backlog”.
Throughout this sprint, the team will host daily stand-up meetings (called “Scrums”) where each team member shares their accomplishments and setbacks. A sprint is complete when all User Stories are delivered and removed from the backlog.
At the end of a sprint, the project will be Reviewed or demoed by a team member who acts the “voice of the customer,” and then released to the public to garner user feedback. Following a sprint, the entire team will gather for a Retrospective to reflect went well and what didn’t in the previous sprint.
Kanban is another project management framework that relies on a visual aid called a Kanban board to organize task based on their level of completeness. A Kanban board is split into multiple columns beginning with “Unstarted” and ending in “Done”. Your team can decide on as many intermediate columns as you would like with descriptions relevant to your workflow.
Tasks are usually written on sticky notes or index cards and advance from one column to the next until all the index cards have migrated from one end of the board to another. All the intermediate columns will have a limit on the number of tasks that fall into that column, so if any one step in the process is stalling, the entire team’s collective brain power will swarm the delayed tasks and minimize the amount of Work-in-Progress items.
Kanban differs from a Scrum approach because it is a continuous method of development (no time frames dictating release), and the whole team is collectively responsible for the progression of tasks (not a scrum leader who sets priorities).
Collaboration Tools and Techniques
Aside from the overarching development strategies, there are other tools and practices your team can use to make sure you’re communicating and collaborating efficiently. Almost all modern software development teams use Git to version control and collaborate on code. It will also benefit your scrappy startup team to have a centralized repository for all your code hosted on Github, GitLab, BitBucket or another git management service.
Git’s version control is a useful tool because it allows you to return to previous states of your code. Although everyone enters a project with the best intentions, we are human and there will be times throughout your project when you and your team members will be scrambling to reach a deadline.
During this crunch periods, someone may make some careless mistakes and/or place a lower priority on creating well-organized code. Version control ensures that your previous work is never truly lost, and you can always return to an earlier working version of your code before an error was made.
Additionally, Git serves as an essential collaboration tool. In the past, code was maintained by individual coders, who would transfer or email their scripts back and forth to one another. However, a centralized git repository allows multiple users to edit or develop on the same code base simultaneously. These users “push” or upload their work to the same master git repository, which is constantly updated with everyone’s contributions and made accessible to all the collaborators.
If you need a refresher on git, Codecademy has a Git course to make sure all of your team members are familiar with how to incorporate git into their workflow.
It is also recommended that you leverage your git repository to hold regular code reviews where different programmers review one another’s code. Code reviews can serve as teaching moments for both the code writer and the code reviewer: both programmers are learning from one another’s coding style and will pick up on the tips, tricks and techniques the other uses.
Furthermore, code reviews are a great way to make sure each contributor’s code is readable and interpretable to other programmers. This is important because if responsibilities ever change on your team or if there is turn over in a position, you can be confident that your existing code will be easy for the next person to pick up.
Congratulations! You are ready to take the leap into creating your very own project. This is an exciting step in your maturation as a code developer, because it means you are shifting from learner to creator. As you take the steps to develop your own coding project, it is essential that you crystalize your idea into an elevator pitch, recruit collaborators who fill out your team’s skill set, and establish a management framework that encourages continual progress.
We at Codecademy are excited for you to form your own project teams because we think this is where some of the best learning can occur. You and your fellow team members will learn from each other as you share knowledge from your respective areas of expertise and you will also push yourself to develop new tools and techniques to meet your project requirements.
By starting a group project, you are taking an exciting step in your life long coding journey. When you’re ready to get started, feel free to explore Codecademy’s Forums and Lifelong Learner Slack community to find your collaborators!