I was working as a freelance php developer for a while, and handled all programming aspects alone. Although I worked with a graphic desinger, all coding was done by me.
These days I get a job with a team to program some project.
So, I’m afraid of this new development. How to manage a team and divide the work, track the change.
I’ll look for complete solutions.
This is a good question; I’m sure it’s one that many people face as they transition from freelancer back into a team environment.
First of all, don’t be scared! Your peers will make you a better programmer just by exposure to their unique ways of doing things. And, you’ll now have great resources to fall back on when you just can’t seem to find that typo that’s had you puzzled for hours.
Working together on the same project doesn’t have to be hard. Break it down into modular chunks. Start by setting up an outline, define the I/O between different functions / methods / code segments, and then give each person a “black box” to fill in with code.
As you learn eachothers’ strengths & weaknesses, you can delegate tasks to people based on their strengths to meet important milestones, or based on their weaknesses to help them develop their skills.
Adopt version control as soon as possible, and invest as much as it takes in learning how to use it well. Make sure you understand how to create, use, and merge branches. Any versioning control system will work… I recommend either SVN (Subversion) or CVS. I prefer Subversion.
Develop a system for bug tracking, and for keeping track of to-do lists for new features. It doesn’t have to be fancy to work. If you’re a new, small operation, you can do this in something as simple as a shared google doc spreadsheet. If you’ve got cash to spend, Atlassian JIRA and FogBugz are both great issue tracking systems.
Most importantly, listen and respect what your new peers have to say, even if they’re dead wrong. Never forget that they are allies and not adversaries.
Have fun! And, good luck.
The Joel Test serves as a decent outline of team management best practices
- Use source control
- Use a task tracking system
- Maintain a schedule
- Document your design
An important part of team-based PHP development is breaking the functionality into multiple files. Most PHP developers fall into two camps; Web Developers who needed to learn a server-side language, and Software Engineers who are moving to web development. The former tend to write all their code in monstrous twisted files, and the latter use PHP to write clean-looking code but often fail to master layout without tables.
In order to do great work with PHP, it’s important to do both right. Team development requires separating out different parts of the functionality and UI into different files, either by includes or by using a framework. Notice, though, that both the software side and the web side have the same solution; separation of model from controller from view, separation of content from layout.
One more thing: The typical trunk/branch version control directory structure doesn’t work as well with web work. What I typically do is have a devel and a live directory structure. Your developers work in the devel branch, and then when you want to apply the changes to the live site, you just need to tell your version control software to apply the same changes there (Subversion is very good at this).
Best of luck.
I began using Trac when I began working with another developer on an application. Its a great way to assign tasks, track bugs and features, versions, etc. I am using along with Subversion. Like many others have mentioned, you need a way to assign jobs, track bugs, and of course version control, which is critical.
Communication is paramount! Email, upcoming Google Wave, a free IRC server, something that is readily accessible and your peers will use. Everyone needs to be on the same page, nothing worse than working on a feature or block of code to find out that someone else has been addressing the same issue.
Good luck! It is quite an different atmosphere when you are leading and managing. Be open to suggestions from the team.
I recommend reading some books on successful team management. Here’s a good starting point:
Disclaimer: I’ve never read this book. I don’t even know if it is good. Others in the same category may help you though.
You’ll definitely need to start using a version control system, if you aren’t already – some good options are git (exceptionally fast and full featured, http://git-scm.com/ ) or bzr (much slower, but easier to use, http://bazaar-vcs.org/ )
I’ll look for complete solutions.
Well, your only complete solution is to hire a professional software development manager.
If you still hope to cope yourself, then you will have to forget about writing code yourself. You will have to concentrate on managing tasks, source code and quality of the software (testing). There are tools, of course, but tools are not complete solutions (no matter how good this tools are). Here is a metaphor for: If you have a a good hammer it does not necessarily means all you nails will go smooth and never bend.
Thus, managing the software development team requires knowledge and experience, not just tools. It is very different from writing application on your own.
And be brave!
One interesting idea I’ve heard regarding this topic is to use Test Driven Development (TDD) where you write the tests using PHPUnit or SimpleTest and then hand that off to the development team. When the tests pass the task is considered done.