I’ve been working with a buddy of mine on a school project. We forecast it’ll take ~2 months, so it isn’t a small scale project at all. Communication and splitting the work effectively has been a NIGHTMARE though.
He doesn’t have a phone, which makes communicating outside of the one 1 hour class we have together difficult.
Basically what’s been happening is we end up working on the exact same thing, or we write code for components that doesn’t work with components the other person has written. Because of this, we spend about 20 or 30 minutes each day in class making both copies of our code work together, and figuring out what stays and what goes. It’s horrible for efficiency.
I looked into github but it looks so ridiculously overkill for this 2 man team. Also I was unable to find github tutorials for specifically what I’m looking to do (They’re all too technical for someone with 0 git expeience or tackle things unrelated to my needs).
How can we organize this project more effectively and efficiently?
7
There are a couple of things here that need to be addressed.
First, there is the two code bases. You’ve got your code. Your friend has his code. Wen you do a merge (somehow) you’re doing it without the ability to see the changes that did it before.
You don’t need github to do this. You could have a master git repo on a thumb drive, and then merge to and from that. Github makes it easier to do this (and harder to lose it). Working from the thumb drive though, you wouldn’t have as complete a set of tutorials on how to use it or the other things that github has that are quite nice.
Next, there are the issues. You don’t have a clear division of labor and tracking of this labor:
- Who is working on what?
- What changes fix what?
The github issue tracker within github allows you to assign who is working on a given issue and identify what state it is in. It also hooks up nicely if you tag the commits with the issue number, which then shows back in the issue tracker part of Github. This makes it clear when you later want to go back and see “what did I change to make issue #5 work?” – you can go to issue 5 and see the commits.
This doesn’t prevent anyone from actually working on anything though. You or your friend could disregard the issue tracker and work on whatever. Working with other people takes discipline – properly communicating what you are doing, taking tasks, finishing tasks, and saying that they are done and then moving the changes into a place where other people on the project can make use of them.
If you, or your coworker are not disciplined to do this you will have problems.
Git or any VCS will not fix the problem of “basically what’s been happening is we end up working on the exact same thing, or we write code for components that doesn’t work with components the other person has written” on its own. You could do that today – write out all the specs on paper and have a stack of index cards with all the things that need to be done. Divvy up the index cards and work on them according to the written spec. No git involved in that process at all. An online version control system makes it easier to do this, if you are willing to work with it. But, if you aren’t going to take the steps to actually be disciplined in your work habits in the first place, its just going to be extra tedious work.
As to overkill? Nope. Its not overkill. Its a very useful tool set that has a lot of features that you will use some day. There are simpler version control systems (I used RCS back in the day and it worked fine for my college projects with partners (drunken checkins are easier to revert than begging the lab staff for a restore from the nightly backup). Aside from the cloud and server nature of git, it had just a steep of a learning curve as RCS.
Note that many IDEs today have git support built in that make using it much easier. You’ve got this tagged with netbeans – consider reading Using Git Support in NetBeans IDE.
2
Your question is about code organization (as specified in the title) and many here seem to be talking about VCSs, that might not solve your problem at all. You do not seem to need version control, your problem seems to be something else.
Basically what’s been happening is we end up working on the exact same
thing, or we write code for components that doesn’t work with
components the other person has written.
If you got to talk to each other, you could decide what each of you will do, right? You are stepping on each other’s toes by, as you said, working on the exact same thing.
I looked into github but it looks so ridiculously overkill for this 2
man team. Also I was unable to find github tutorials for specifically
what I’m looking to do (They’re all too technical for someone with 0
git expeience or tackle things unrelated to my needs).
I mean no offence. But if you fail to find GH tutorials, you will fail to find tutorials for anything. Give a try to Pro Git (or any introductory Git book). It may be overkill, but, in the end, it stills kill it. Plus, you are likely going to have to learn at least one VCS someday.
How can we organize this project more effectively and efficiently?
What about organizing it? No VCS will be able to merge what you are doing if you two are doing the exact same thing every day.
As you said, it is not a small scale project, so two things must be clear:
- GitHub (or any VCS) is not overkill.
- You two are likely to have different things to implement / refactor / work on.
He does not have a phone? Does he have internet access? Can he create an e-mail account? Use any messaging service?