Working on your final year project

Your final year project is perhaps the most important thing you'll be doing in college. This blogpost is meant to help Computer Science students work better on their final year project.

The project topic

The project you're going to be working on should be fun to do and should be something you really want to do. Working on a project alongside regular college activities for more than 3 months requires a lot of self motivation - a good GPA might not be a sufficient incentive for everyone.

Should I work in a group or not?

If you've worked on long projects before with at least one other person, go with your gut. If this is your first project of this kind, I'd suggest that you work in a team of 2 - 3 members (depending on your project), even if you're sure you can do the project all by yourself. Working with someone has a lot of advantages:

  • Code reviews become possible which will in turn increase the quality of the code.
  • Testing becomes easier
  • It's easier to meet deadlines
  • You get another perspective
  • You get someone to share the expenses with

As long as your partner is as interested in the project as you are, it should be fine. (They don't necessarily need to be as smart/dumb as you are).

Planning

System processes

Every system has certain processes. Applications, for example, could have an approval process. The different processes in the system needs to be identified and fool-proofed before any line of code is written. Create a spec if possible and get it approved by your project guide.

Feasibility study, technology & tools

As far as possible, use the tools you're already proficient with. For example, if you know C# better than Java, give more preference to C#. Try to reduce the amount of stuff you'll have to learn during the project. Also, make sure what you're trying to achieve is feasible considering the chosen technology, tools, time available and other constraints.

Timeline

College projects have tight time constraints and the odds are that you might just not be able to finish your project in time. It's important that you create a timeline for your project before you start work, and keep it updated during the course of the project. This will help you predict if your project will finish in time, and you can make decisions accordingly.

Divide your work into sprints of 1 - 2 weeks as appropriate. Every sprint must have certain tasks for each group member. At the end of each sprint you make a minor release. Make sure you show these releases to your guide. Schedule about 2 - 3 major releases for a 3 month project. Accompany these releases with a short report. You don't need to do a very detailed timeline, but ensure the major release dates are fixed.

Be a little relaxed with the minor release dates. But don't miss the major releases. If something's taking more time than expected, know when to move on. (But don't let technical debt build up.) Don't be afraid to make changes to your timeline during the course of the project.

Allot enough time for each module. Something you think will take 2 days might end up taking a week. You never know. It's okay if you finish something before time, but not if you need more time.

Use the right tools

There are a lot of tools out there that can increase productivity. Use them.

Version Control

Do you email code? Do you have copies of files such as struts-old.xml, struts2.xml, etc? Do you comment code? You won't have to do any of these anymore. VCS can change the way you work. Completely.

A Version Control System (VCS) is a software that helps you maintain versions of your source code, which means you can easily revert your changes without ending up with broken code. Oh and you don't have to worry about backups. You will never lose code.

There are a lot of Version Control Systems out there. Commonly used ones are GIT, Mercurial, SVN and TFS. If you've used one before and you're comfortable with it, stick to it - else I'd recommend GIT. GIT is supported by most IDEs and code editors out of the box including Android Studio, Visual Studio, VS Code, Atom, etc.

To work in a team, you'll also need a code hosting service like GitHub, Bitbucket, VS Team Services, etc. that the team members can push changes to or fetch the latest version of the code from. Use a code hosting service even if you're not on a team. That way, even if your hard drive fails, you know your code is safe and retrievable.

BTW, GIT reminded me of this video:

If you don't understand sarcasm, this video isn't for you.

Github Student Pack

Students can use a good number of services for free or at a discount through the Github Education Program. Some of the services include:

  • Hosting - AWS Cloud, Digital Ocean, Azure, Bitnami
  • Free private GitHub repos
  • Send 15k emails a month using SendGrid
  • Continuous Integration using Travis

More on this at the GitHub Education site here.

Tracking your project progress

  • Trello - You can use this to assign tasks to team members and track progress. You can also use it as a kanban board.
  • Issue tracker - It's a good idea to use a issue tracker to prioritize and track the status of each issue/bug you find. Most code hosting solutions provide an issue tracker. And try to fix bugs as and when you find one.

A quick recap

  1. Choose someone who is as interested in doing the project as you are. Everyone's contribution towards the project should ideally be equal.
  2. Consider working in a team.
  3. Take exams and other college activities into consideration while working on your timeline.
  4. Work in sprints and update your guide at the end of every sprint.
  5. Don't skip Version Control. Trust me with this one. Not sure what to choose? Choose GIT.
  6. Track progress and bugs.

Conclusion

If you plan your project well and use the right tools, your project will be successful. All the best :D

Oh, and don't forget to share this post with your classmates. If you'd like to be updated of new posts, subscribe to the mailing list.