Slashdot Mirror


Guide For Small Team Programming?

dm writes "I run a small design shop and have been doing more and more web development, including fairly involved back-end programming of what's now essentially become our own CMS. Up to now I've been doing all the programming myself. Now we are working with a second programmer for the first time. I already use version control (SVN) and an issue-tracking system, and I guess we are both decent at what we do — although self-taught, but we both lack experience programming in a team context. Is there a useful guide for this? Most of the tutorials I have seen for Subversion are surprisingly organized from a single coder's perspective. Where else should I look?"

220 comments

  1. Experiment by Joebert · · Score: 3, Informative

    Nothing beats getting together with team mates and toying with things in your spare time.

    Past that, I suppose just add new people to the mix slowly.

    --
    Wanna fight ? Bend over, stick your head up your ass, and fight for air.
    1. Re:Experiment by Anonymous Coward · · Score: 0

      That's what she said.

  2. My guide by Anonymous Coward · · Score: 0

    If you've got two people, here's how it works: One codes, one swings the whip. Trust me, it gets results.

    1. Re:My guide by Anonymous Coward · · Score: 1, Funny

      Mom?

  3. Staggered shifts FTW! by BladeMelbourne · · Score: 4, Funny

    I assume you're the boss, so you could work 9am-5pm and he could work 5.30pm-1.30am.

    That way you can still code naked.

    1. Re:Staggered shifts FTW! by Anonymous Coward · · Score: 1, Funny

      #!/usr/bin/perl
      print "Naked\n";

    2. Re:Staggered shifts FTW! by nkkdprgrmmr · · Score: 2, Funny

      this hits fairly close to home here...

      --
      I see Windows, I see Mac. I see Linux on the rack.
    3. Re:Staggered shifts FTW! by chunkyq · · Score: 1

      #include
      int main(int argc, char** argv) {
      printf("Naked\n");
      return(0);
      }

    4. Re:Staggered shifts FTW! by Schus459 · · Score: 1

      this hits fairly close to home here...

      What? The hours part or the coding naked part?

  4. Two obvious ones by Bogtha · · Score: 5, Informative

    Both excellent books for this situation, in my opinion.

    --
    Bogtha Bogtha Bogtha
    1. Re:Two obvious ones by zybak · · Score: 3, Informative

      The Seven Habits of Highly Effective People Very good book..... ----- Drayton

    2. Re:Two obvious ones by TheRaven64 · · Score: 2, Informative

      My mod points expired yesterday, but there should probably be an automatic +5 for any post recommending Peopleware. No matter how big or small the team you are managing, there is no better book to serve as a foundation for managing technical people.

      --
      I am TheRaven on Soylent News
  5. For the love of god - DON'T! by Andreas(R) · · Score: 4, Funny

    The optimal programmer team size is 1.

    1. Re:For the love of god - DON'T! by Anonymous Coward · · Score: 5, Interesting

      That answer depends on the goals for the team.

      Studies and statistics have shown that 3 is actually the best number of programmers on a project. I can't find the reference now, but for a 5M line group of programs where I worked previously, we captured stats on all sorts of things. 3 was definitely the best optimization for productivity, quality, and simplicity. A team produces something better than the sum of the parts.

      1 works if you are an expert on everything (or think you are) or working on a fairly trivial program or have lots of time to finish. Best of all, there's nobody else to point out your mistakes.

    2. Re:For the love of god - DON'T! by Ross+D+Anderson · · Score: 1

      Whoosh!

    3. Re:For the love of god - DON'T! by hattig · · Score: 5, Insightful

      Only if you're some freaky self-motivated person.

      Otherwise you'll surf the web all day after getting up at 1pm and watching Daytime TV for a few hours.

      Two people will motivate each other. Three people might even get the time to do other business essential things, like the accounts! Also nicer for pub lunches, two people is a bit one-on-one.

      More than three and I think that you start getting communications issues, unless you are all working on very different projects rather than the same codebase. Once you're in the meeting room, with the projector, and the Wii, you'll end up playing Mario Kart, which kills productivity. Also there's enough people to not have the focus on your own work, so you'll surf the web unless you're self-motivated enough or have a deadline.

    4. Re:For the love of god - DON'T! by Anonymous Coward · · Score: 1, Insightful

      Productivity/person ration in a one man team is 0.4.

    5. Re:For the love of god - DON'T! by emjay88 · · Score: 4, Funny

      A team produces something better than the sum of the parts.

      +1 Avoided buzzword "Synergy"

      --
      1178161 is prime...
    6. Re:For the love of god - DON'T! by wellingj · · Score: 3, Interesting

      I agree with the 3 man team idea. It's the same idea as the surgical team from the Mythical Man Month. However, as is proposed here the original idea of the surgical team has changed. The best way to make a surgical team these days is to follow OOP and section of your product in manageable packages with everyone knowing what vaguely goes on in each package, but have a designated person that is known as an 'owner' or 'maintainer'. At least that's what works best for our group at work. I work on an embedded system at John Deere. We have 3 Programmers (one EE, one CE, and one CS), a Control Theory/MechE/Systems (Group Lead), and one Testing Technician (functional hardware testing). This works out really well for us. YMMV

    7. Re:For the love of god - DON'T! by Gr8Apes · · Score: 1

      I'd say 5-7.

      Then again, my particular circumstances cover multiple different areas, several of which I'm loathe to claim.

      It all depends upon project, scope, and capability of the programmers. Some things are simply too big for 1 or 2 programmers. Others cover too many areas.

      --
      The cesspool just got a check and balance.
    8. Re:For the love of god - DON'T! by Nicolay77 · · Score: 1

      In this case, I prefer to read that information than the joke.

      I know of /. official policy about jokes, but no useful informacion should be sacrificed because of that.

      --
      We are Turing O-Machines. The Oracle is out there.
    9. Re:For the love of god - DON'T! by Nicolay77 · · Score: 1

      I mean, information.

      --
      We are Turing O-Machines. The Oracle is out there.
    10. Re:For the love of god - DON'T! by TheRaven64 · · Score: 1

      Three sounds about right. I definitely work faster when I'm working by myself, but having someone else review my code does wonders for the quality. At first it's irritating, because it slows you down a lot, but if you know that at least one person is going to be reading the code you write in detail then you are a lot more likely to avoid ugly hacks (or, at the very least, document them well). I'm not sure why a third person is more efficient than just two, but I'm not entirely surprised.

      --
      I am TheRaven on Soylent News
    11. Re:For the love of god - DON'T! by marcosdumay · · Score: 1

      Now I disagree. 2-3 is the optimal size for a team of peers. If you want the sirurgical team of the Mithical Man Month, you'll need more people.

      Also, take in mind that computers replaced lots of the roles of the cirurgical team.

    12. Re:For the love of god - DON'T! by Peganthyrus · · Score: 1

      Three means you always have a tiebreaker opinion available, for one thing.

      --
      egypt urnash minimal art.
    13. Re:For the love of god - DON'T! by Anonymous Coward · · Score: 0

      Insightful? I can't even work out what it's supposed to mean!

    14. Re:For the love of god - DON'T! by wellingj · · Score: 1

      I see you read the article I posted... uhh high five?

  6. Talk to each other by erikharrison · · Score: 4, Insightful

    There are lots of things I could throw out, sure, but most of them came from principle numero uno - talk to each other. Learn each other's strengths and weaknesses, learn how each other works, learn when a process isn't working for one of you, and learn to evaluate each other's code. Process is really about leveraging communication to improve the product. So start building that communication.

    1. Re:Talk to each other by zappepcs · · Score: 4, Insightful

      Wow, there are probably a few posts going to be about some program that a user loves, but this one is perfect. I've worked the last 8 years in an environment with two coders and 5 managers. What worked for us is exactly what this guy suggested and we did that in spite of what the managers wanted. We developed a perl/cgi template that all the code worked under and it worked so that either of us could look at any of the code and work with it, sharing routines and snippets. Now I'm in charge of maintaining all of it, and it's more or less like I wrote it originally. No matter what programs or coding styles are sold to you, the ONLY thing that will work is what works for the two of you and that will probably not fit into some white paper. Just find what works for you by talking and analyzing what each of you are good at. When you find it, write a paper and go on the talk circuit.

    2. Re:Talk to each other by Jester99 · · Score: 5, Interesting

      There are lots of things I could throw out, sure, but most of them came from principle numero uno - talk to each other.

      I second that. And don't just "talk to each other." There's a lot of different ways you can communicate with one another. For instance:

      Do you both work independently and then regularly schedule periodic code reviews 2x a week? Or do you do code reviews on a more demand-driven basis when someone feels they have a particular milestone to show the other? Or do you sit next to one another and work in a pair-programming team?

      Do you put documents in a shared place that define the design of things? When you discuss designs together face-to-face, do you take notes?

      One of these answers isn't inherently better than any other, but what you should probably be striving for is to take a step back and analyze the process of developing and communicating with your partner itself, and adapt that as you, your project, etc evolve as well. So always try to communicate better this month than you did last month, where defining "better" is specific to you two. Then when the third programmer comes along, you'll have a framework to work with him in as well.

      One concrete suggestion though: For your design docs and instructions on how to build and test things, start a wiki. You might be in charge of 3--5 people before you know it, and the "tacit knowledge" of how to operate your system will be continually harder to pass on without something like this.

  7. partner learning by can.you.feel.my.808 · · Score: 4, Interesting

    when i was taking a class on java programming our teach had us do the following and it was really helpful: the two people would come up with a design draft and then we would take turns where one person would type code while the other partner watched and scanned the code to catch any typos or bad code. we would switch off maybe every 20 minutes or so. this way no one person gets tired and burned out from typing or error checking. this process worked very well for me. it was very helpful to have someone there to catch any mistakes or make any on the fly suggestions they have that might make the programming better or more sleek.

    1. Re:partner learning by Torvaun · · Score: 3, Informative

      Sounds like an excellent way to keep anyone from getting into the flow.

      --
      I see your informative link, and raise you a pithy comment.
    2. Re:partner learning by StrawberryFrog · · Score: 2, Interesting

      You mean pair programming.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    3. Re:partner learning by Joebert · · Score: 2, Interesting

      Pair programming is a software development technique in which two programmers work together at one keyboard. One types in code while the other reviews each line of code as it's typed in. The person typing is called the driver. The person reviewing the code is called the observer[1] or navigator. The two programmers switch roles frequently.

      With the exception of that last sentence, that sounds like something I would tell someone to get out of doing any actual work.

      --
      Wanna fight ? Bend over, stick your head up your ass, and fight for air.
    4. Re:partner learning by Anonymous Coward · · Score: 0

      Pair programming is also a part of Extreme programming or XP.

    5. Re:partner learning by StrawberryFrog · · Score: 2, Insightful

      With the exception of that last sentence, that sounds like something I would tell someone to get out of doing any actual work.

      Pairing does sound like taking it easy at first, but I suggest reading the whole Wikipedia article before saying that.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    6. Re:partner learning by easyTree · · Score: 1

      Not necessarily. I've worked like this occasionally. It's possible for you to both get into the flow together. I don't necessarily agree with the 20-minutes handover though. Hand over when it's appropriate to.

    7. Re:partner learning by Anonymous+Brave+Guy · · Score: 3, Informative

      You should read the actual studies before trusting everything you see on Wikipedia. Almost all remotely scientific studies of pair programming effectiveness to date have been conducted with rather non-representative samples of the programming population, e.g., college students. They also tend to compare full time pair programming with no collaboration at all, which is unrealistic because most programmers will naturally seek a second opinion from a colleague at the times when it is most useful anyway. There is precious little research to date comparing the efficiency of two skilled and experienced programmers doing full-time pair programming with what they produce working alone except when they feel the need to collaborate in real time, and what there is isn't nearly as favourable.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    8. Re:partner learning by Frostalicious · · Score: 1

      we would switch off maybe every 20 minutes or so. this way no one person gets tired and burned out from typing or error checking.

      Bah. A real programmer should be able to go 12 hours easily for sufficiently large values of doritos and mountain dew.

    9. Re:partner learning by dubl-u · · Score: 1

      [...] that sounds like something I would tell someone to get out of doing any actual work.

      It's actually incredibly productive. As one pal of mine put it, "You get third-draft code in first-draft time." Pairing is really just a special case of "two heads are better than one."

      Although I've done a lot of pair programming, right now I'm working solo, and I really miss having a pair. I know there are problems with my code right now, but I won't be able to spot them myself until I come back a month later with a fresh perspective. Having a pair also saves me a lot of time in avoiding ratholes and yak shaving. And a pair is great at finding things to test that I miss because I'm too close to the code I'm writing.

      Maybe it's not for everybody, but I love it like candy.

    10. Re:partner learning by wmbetts · · Score: 1

      I've heard of people working in that type on environment, but personally I think that would drive me crazy. I use to have people (project manager) constantly look over my shoulder and it just made me nervous and fidgety.

      --
      "Ubuntu" -- an African word, meaning "Slackware is too hard for me". - stolen from Dan C alt.os.linux.slackware
    11. Re:partner learning by Anonymous Coward · · Score: 0

      BAD idea with only 2 people. After 3 months you will hate each other-even if both of you are decent people.

      Less if someone doesn't bath every morning.

      You need at least 5 people in the team to make pair programming a positive thing-less then that and you...well...after 3 months of the guy next to you cracking his knuckles you will chop them off with a sword. If its only a once a week thing its tolerable.

    12. Re:partner learning by jfenwick · · Score: 1

      I agree that pair programming sounds like a make work scheme, but it really isn't. Some of my best code has been written through pair programming. When you work with someone who is just as familiar with the system and the design as you are, they can catch lots of error before you even hit the compile/debug process, saving you a lot of time.

    13. Re:partner learning by johannesg · · Score: 1

      It has been observed that I'm a fairly fast and competent programmer. Now I'm sure pair programming is great for, and I'm trying very hard not to sound arrogant here, not so incredibly highly skilled brethren, but for someone who already knows what he is doing it is unbelievably painful to have someone sitting there, constantly interrupting his train of thought, adding pointless detail like "Ooh, you missed a semi-colon!", and requiring constant explanation of every character typed.

      It is bad because it means I have to focus on interacting with another *person*, while I should be focusing on what I'm doing.

      It is bad because when I'm not coding I'm just being annoyed by the other persons' horrifically bad coding. Or, when it is a competent programmer instead, just wasting my time because he already knows what he is doing and needs my input about as badly as I need his (which is, "not at all").

      And it is bad because it produces constant pressure to code, code, code, code, even though my working day, in order to be efficient, requires moments where I stare out the window and order my thoughts.

      But I still very strongly suspect this last bit is the point: when you are pair programming there is no opportunity to read slashdot for a few minutes, or otherwise goof off, because there is always your "keeper" ready to push you back into action.

    14. Re:partner learning by dubl-u · · Score: 1

      I've heard of people working in that type on environment, but personally I think that would drive me crazy. I use to have people (project manager) constantly look over my shoulder and it just made me nervous and fidgety.

      Pair programming is different. You should be changing who's in control every 5-15 minutes. At first it feels weird, but it pretty quickly gets where it's just two people collaborating, and doesn't feel nervewracking at all.

    15. Re:partner learning by dubl-u · · Score: 1

      Have you actually done pair programming? Maybe you did it with a dolt, or maybe you did something that I wouldn't call pair programming, like "coding with a jerk" or "having a guy looking over your shoulder while you code". But my experience is pretty different.

      When coding with a junior guy, I tend to talk more about what I'm doing, so they're included. And with somebody new to pair programming, I'll explain to them that they should only interrupt for things I won't catch, and that counting to 5 or 10 is a good way to see. It can be a bit of work, but it's a great way to share knowledge, and it's much better than letting some newbie code for hours, leaving me messes to clean up.

      Pairing with another expert, though, is fantastic. I learn vastly more, and produce much better stuff when I'm coding with somebody who can work at my level.

      As to your feelings of a constant pressure to code, that's all about you. If you need to stop and think, stop and think. Better, stop and discuss, as your pair can be a great help getting past whatever has slowed you down.

      And yes, when pairing, take breaks. There's no rule against it!

    16. Re:partner learning by offlerthecrocgod · · Score: 2, Interesting

      Pair programming is probably the best knowledge transfer tool there is for programmers.

      --
      Shin: a device for finding furniture in the dark.
    17. Re:partner learning by Malvolio · · Score: 4, Informative

      There is precious little research to date comparing the efficiency of two skilled and experienced programmers doing full-time pair programming with what they produce working alone except when they feel the need to collaborate in real time, and what there is isn't nearly as favourable.

      One interesting data point is the study Evaluating Pair Programming with Respect to System Complexity and Programmer Expertise by Erik Arisholm et al. from Simula Research Laboratory, published in the February 2007 issue of Transactions on Software Engineering. There's a good summary on the Catenary blog.

      This study is more realistic in that the research subjects were professional Java consultants, rather than college students. However, it appears the study did not allow the subjects to collaborate with anyone outside the pair (or at all, for the solo subjects).

      The abstract of the study:
      A total of 295 junior, intermediate, and senior professional Java consultants (99 individuals and 98 pairs) from 29 international consultancy companies in Norway, Sweden, and the UK were hired for one day to participate in a controlled experiment on pair programming. The subjects used professional Java tools to perform several change tasks on two alternative Java systems with different degrees of complexity. The results of this experiment do not support the hypotheses that pair programming in general reduces the time required to solve the tasks correctly or increases the proportion of correct solutions. On the other hand, there is a significant 84 percent increase in effort to perform the tasks correctly. However, on the more complex system, the pair programmers had a 48 percent increase in the proportion of correct solutions but no significant differences in the time taken to solve the tasks correctly. For the simpler system, there was a 20 percent decrease in time taken but no significant differences in correctness. However, the moderating effect of system complexity depends on the programmer expertise of the subjects. The observed benefits of pair programming in terms of correctness on the complex system apply mainly to juniors, whereas the reductions in duration to perform the tasks correctly on the simple system apply mainly to intermediates and seniors. It is possible that the benefits of pair programming will exceed the results obtained in this experiment for larger, more complex tasks and if the pair programmers have a chance to work together over a longer period of time.

    18. Re:partner learning by TheRaven64 · · Score: 1

      It is bad because it means I have to focus on interacting with another *person*, while I should be focusing on what I'm doing.

      If you write good code, then you are interacting with another person. The person that will maintain your code. For any nontrivial project, vastly more effort will be spent maintaining the code than writing it in the first place. If you are not able to communicate with someone next to you via your code, then I would seriously doubt your ability to communicate with someone sitting at a different desk a year in the future via your code, which is what good code needs to do.

      --
      I am TheRaven on Soylent News
    19. Re:partner learning by KlaymenDK · · Score: 1

      I understand all these posts that are sceptic towards pair programming. To be sure, you get half as many 'effective programmer hours' than if you gave them a workstation each.

      However, I know from personal experience that pair programming yields far superior code. Zero typo bugs, less logic bugs, and far improved overall quality, because two brains and four eyes were on it from start to finish.

      So even though the 'effective programmer hours' are half, the actual quality is better - but it *is* more expensive on an up-front hour-by-hour basis (which, sadly, is the only perspective usually observed; nevermind you get it all back in less maintenance hours, that's a different quarter...).
      Oh, and don't say "yeah but I can just hire one good instead of two bad coders and get the same improvement that way"; pair programming "works" no matter what your level is.

      Having said all this ... I would very much like to object to the "twenty minutes" (or "frequently"), exactly because programmers need to get into a flow. Rather, I would recommend switching no more than every 8 or 4 hours (say, after lunch).
      I suppose the 20-minute rule was due to the class environment; classes are short and everybody needs/wants to have a turn at the weel to feel some ownership.

    20. Re:partner learning by johannesg · · Score: 1

      If I want any future maintainer to be aware of something I'll be sure to write a comment, and I will do so at the appropriate time, which is typically not when I'm still working it out myself. I'll make sure I use clear names, simple functions (where possible), sufficient and sufficiently clear comments, and I'll try to remove all surprises and trickery.

      However, I will not INTERACT with anyone while doing so. _I_ will be the judge of what gets written when, and how. _I_ will make the decisions on naming, algorithms, structure, and everything else that pertains to the program. Because, you know, that is MY job.

      And I will happily communicate anything and everything to anyone my boss cares to appoint for that purpose, _at the appropriate time_. And that is not when I'm doing the actual work.

      I guess you must have never experienced flow. I feel sorry for you.

    21. Re:partner learning by JoeMerchant · · Score: 2, Interesting

      True... the existing pair-programming studies are sparse and flawed. I made a direct effort at doing pair programming and I found the "conflicts with basic personality type" effect in a big way (3 out of 4 programmers in my shop) - funny thing was, the more resistant to pair work a programmer was, generally, the more useless they were as a programmer overall, even when left to work "alone." And, by resistant, I don't mean what they said during their hiring interview, it was better revealed in their attitude 2 months after hire.

      I find "burst pair work" to be the best, where you do your own things for 90% of the time, and work together for 3-4 hours every week or so. Longer intervals tend to lead to more divergence, and too much time together tends to slow things down.

      Having everything documented in a wiki is very helpful- even if only one person does 90% of the wiki work. I keep wishing that others would pick up and help maintain the docs, but even when they don't, my work is easier having the docs in place, rather than having to correct other people's work that wasn't done to spec (because the specs were weak), or worse still, attempting to evolve the spec to use the mish-mash of stuff that gets produced when the team members are all working to their own idea of the design direction.

    22. Re:partner learning by I8TheWorm · · Score: 1

      I have a team of 7 developers now, and we pick pieces of methodologies that suit our environment. For instance, we have a scrum every morning to make sure all are on the same page, or issues can be brought up to be worked out.

      We've joked about pair programming, and of course the punch line is this... experienced developers will pair automatically when necessary. A ballpark estimate is that they're pairing about 20% of the time.

      --
      Saying Android is a family of phones is akin to saying Linux is a family of PCs.
    23. Re:partner learning by turbidostato · · Score: 1

      "for someone who already knows what he is doing it is unbelievably painful to have someone sitting there, constantly interrupting his train of thought, adding pointless detail like "Ooh, you missed a semi-colon!", and requiring constant explanation of every character typed."

      You have not done "pair programming".

      "Pair programming" is not simply "two guys programming with just one computer"; it is a complete paradigm. And it states that if the two of the pair are of significatly different seniority it is the "junior" the one that will type and the senior the one that will direct, so it is impossible that your pair will stop you with the "you missed a semicolon" since you won't be typing. All in all having different level of expertise is only advocated on training or patronage sessions, it's not for the day-to-day bussiness (some exceptions can be made, like two seniors with different background, say a database expert or a bussiness code expert and a UI one on an XP environment. But then, the UI expert will be typing the "functional" code and the bussiness one the presentation layer). If you are really so above your average mates, then you would only be pairing, say, 10% of your time, not for the coding but for spreading experience. The rest of the time you should be co-working with somebody on your same level or left alone if you are the only "rock-star" programmer.

      "It is bad because when I'm not coding I'm just being annoyed by the other persons' horrifically bad coding."

      You have not practised "pair programming" and you have a personality problem too: I will concede code from that people is really horrid; still it's up to you being annoyed or being glad for the opportunity to share your knowledge and build a stronger team both on your interest and your company's.

      Apart from this, I'm with you: pair programming is of interest mainly for juniors (either junior to junior or from time to time, senior to junior) or seniors but that only when they are sailing unknown waters (so they become "juniors by context").

    24. Re:partner learning by Hognoxious · · Score: 1

      Pairing does sound like taking it easy at first, but I suggest reading the whole Wikipedia article before saying that.

      If it's on Wikipedia it must be true!

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
  8. Move to CVS by ztransform · · Score: 0

    SVN is more complicated than CVS, and less functional (depending on how you view things).

    Many will disagree with me, of course, but I've been developing for years and I've yet to see a compelling reason to move to SVN.

    CVS has a simpler back end. Keeping things simple when involving several people is key.

    Set up an internal website with little scripts that automate functions, such as setting up a new CVS account, or running CVSweb, or other management type functions.

    As your team grows in size having automated tools that generate templates and such will make administration much easier.

    Just my thoughts (you'll have to find your own way in this, of course).

    1. Re:Move to CVS by QuantumG · · Score: 1

      Oh dear.

      I don't know if you're aware of it, but you've just made an extraordinary claim.

      Extraordinary claims require extraordinary evidence.

      So let's hear it.

      --
      How we know is more important than what we know.
    2. Re:Move to CVS by convolvatron · · Score: 2, Informative

      i agree w/ you about svn. we started 3 person team on svn under the assumption that it would be 'cvs but better'. after several disasterous merges we changed to hg. now we have 10 developers and everything is still working beautifully.

    3. Re:Move to CVS by ztransform · · Score: 2, Interesting

      I don't know if you're aware of it, but you've just made an extraordinary claim.

      I've also tried to point out that it was a personal opinion. Plenty have written about the SVN vs CVS debate, I'm just offering my opinion based on years of experience.

    4. Re:Move to CVS by Joebert · · Score: 4, Funny

      Google Code uses SVN.


      Subversion wins, fatality.

      --
      Wanna fight ? Bend over, stick your head up your ass, and fight for air.
    5. Re:Move to CVS by StrawberryFrog · · Score: 4, Insightful

      For the love of Dog, please don't move from SVN to CVS.

      SVN was designed as a "compelling replacement" for CVS. And it succeeds.

      I've yet to see a compelling reason to move to SVN.

      That doesn't mean that there's a reason to move back. If you don't see the benefits of atomic commits, keeping version history over file moves an renames, and rapid branching then by all means, stay with your CVS. Just don't drag other people back down with you.

      If nothing else, CVS is pretty much a dead end. The next version of CVS is SVN. SVN has a development roadmap, CVS has migration-to-svn utilities.

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    6. Re:Move to CVS by StrawberryFrog · · Score: 2, Interesting

      By Hg do you mean Mercurial?

      What is there about it that makes developers better or worse at merging?

      I'm assuming that you're not agreeing that CVS would solve this particular problem, since it merges much like SVN does?

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    7. Re:Move to CVS by ztransform · · Score: 1, Interesting

      Oh, whoops, someone just cut-and-paste details of their bank account into some code and committed without realising it.

      "Administrator," you say, "can you please make that commit disappear completely out of the repository? I can't have anyone look through the history of that file and see my bank account details!"

      Two scenarios: the first, the administrator uses CVS.. he types cvs admin -o 1.3 and revision 1.3 is gone! Phew! The second, the administrator uses SVN.. he says "uh, I'll get back to you on that in a few days.."

      Because of this one point of difference I still don't believe SVN is a mature product.

    8. Re:Move to CVS by Jack9 · · Score: 1

      SVN is more complicated than CVS, and less functional (depending on how you view things).

      In what world is it more complicated? It's less functional (from both a tool maturity and as a side effect of being LESS complicated), but I still dont understand your first "claim".

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    9. Re:Move to CVS by StrawberryFrog · · Score: 3, Insightful

      Because of this one point of difference I still don't believe SVN is a mature product.

      I don't think it's because the SVN team are incompetent or haven't finished the basic feature set yet and their product is "immature".

      It's about priorities - Oddly enough, the SVN developer team and community don't seem to have prioritised the feature of a revision-tracking system totally losing track of a revision. Priorities, as in "that's very far down on most people's list of priorities".

      --

      My Karma: ran over your Dogma
      StrawberryFrog

    10. Re:Move to CVS by smallfries · · Score: 2, Informative

      Just because you don't know how to use doesn't make it immature. I've had to do this: not quite this scenario, but somebody dumped a couple of gigs of pdfs into a common repository that gets checked out into quota'd space. The dumpfile human readable format for svn is a joy, and the tools support filtering repositories according to paths for inclusion and exclusion. Rather than just killing revisions, you can do fine-grained edits over the entire history i.e all revisions intact but one particular file erased from the history.

      Out of interest, you said originally that svn wasn't as functional as cvs. What do you think is missing?

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    11. Re:Move to CVS by Rayban · · Score: 4, Informative

      svnadmin dump

      (edit dump file)

      svnadmin restore

      A repository is a consistent history. If you want to change the history, you need reconstruct it.

      I've been working with CVS and SVN for ~a decade and have never needed to delete one revision. The closest I've had to come to this is extracting a new repository from a subset of an old one. "svnadmin dump" let me do this without any trouble.

      What's the stop the admin from reading the confidential info just before doing cvs admin, anyways?

      --
      æeee!
    12. Re:Move to CVS by ztransform · · Score: 2, Interesting

      Priorities, as in "that's very far down on most people's list of priorities".

      That's fine. To me the ability to back out a bad commit is one of the highest priorities. I like a clean repository. An essential feature I've had to use, on occasion, throughout my development years.

      Plus I'm very fond of RCS style diff tracking. Understanding the storage back-end is most helpful.

      People have different approaches to version control. Some see it as a means of easily tracking code changes. Others see it as a managed temporary storage area and are not too concerned with the cleanliness of the history. They are valid views although I have formed my own over the course of time.

    13. Re:Move to CVS by belmolis · · Score: 1

      Well, anyday now I guess I'm going to move up from RCS.

    14. Re:Move to CVS by Cyberax · · Score: 3, Insightful

      There's svndumpfilter - it can completely obliterate selected files. A complete dump/load cycle requires a bit of time, though.

      See: http://subversion.tigris.org/issues/show_bug.cgi?id=516

      Frankly, that's a pretty stupid reason to chose CVS over SVN.

    15. Re:Move to CVS by Jack9 · · Score: 2, Insightful

      To borrow from a concurrent thread, your comparison*

      http://www.pushok.com/soft_svn_vscvs.php

      The basis of SVN is a relational database (BerkleyDB) either set of binary files (FS_FS).

      As a matter of fact, you can use any db you like if you have experience with databases and SVN. This doesn't really speak to the weakness that you are trying to describe. Transparency of data storage. This is only accurate insofar as you would say that the average SVN user thinks there is no transparency in data storage of CVS. A lack of understanding often causes a user to claim something that isn't true. The entire history of SVN commit diffs is accessible through svndump. However, this has a LEGITIMATE weakness. svn move is a problem as svn can no longer reliably import dumps that have had an svn move executed (any # of times) in the history. Some of SVN's binaries are simply immature and do not work together seamlessly. For a substitute to svndump, see svnsync.

      That is, both tag creation and branch creation are substituted for copying within the repository. From the SVN developers' viewpoint, this is very elegant decision, which simplifies one's life. However, we think that there is nothing to be proud of.

      See *

      However, we suppose you will not deny that it is not very convenient to store a four- digit number instead of a symbolic tag.

      How many digits are your tags? 5.10? This is not an argument. See *

      *A number of assertions that are just opinion based on SVN isn't like CVS.

      Other people have problems with CVS that aren't in that list like
      --CVS lacks directory versioning. It keeps track of only files, not directories.
      --CVS has weak support for the copy, rename, and delete operations on files, a result of the lack of directory versioning. (similar to svn!)
      --CVS lacks atomic commits

      From your years of "CVS" experience, you might have run into these (I did when I used CVS)

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    16. Re:Move to CVS by rk · · Score: 1

      Wow, that's a pretty contrived example, don't you think? Honestly, someone doing something that galactically stupid should have their account info left there... anyone else who would find that information and used it would almost certainly use those resources better than a person that blatantly idiotic. And what if your CVS repository is on a file system that supports snapshots? What if it's been backed up in the meantime? What if someone else has already checked that code out before it gets deleted? Suddenly, it doesn't matter what code control system you're using... that data has been propagated and scrubbing it from everywhere is well-nigh impossible.

    17. Re:Move to CVS by DiegoBravo · · Score: 2, Informative

      Your bank account details were commited??? WTF??? Sure they're also in some hacker hard disk since a long time ago!

      Ok, somebody commited on CVS a directory with a confusing name (happens frecuently!), what's the CVS command to rename it? ...mmm... force everyone to commit, do a full copy and delete, and force everyone to checkout again? of course this is "mature" in a sense of "obsolete".

    18. Re:Move to CVS by Anonymous Coward · · Score: 1, Insightful

      Oh, whoops, someone just cut-and-paste details of their bank account into some code and committed without realising it.

      Hands up everybody this has happened to.

      Exactly. You don't optimise for incredibly rare situations. Especially when doing so means you can't have features that would be used each and every day.

    19. Re:Move to CVS by Jack9 · · Score: 2, Informative

      a single svn move (Rename) from the middle of a directory tree can corrupt an svndump so that svn wont import it. use svnsync now.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    20. Re:Move to CVS by ztransform · · Score: 1

      You don't optimise for incredibly rare situations.

      What proportion of your time is spent reversing in your car? Of all the miles/kilometres you travel, what percentage?

      Is there value in having a reverse gear on a car? One could argue "no" as it is only infrequently used. How about fog lights? Even less frequently used (depending on where you live). Anyone carry a spare tyre in their car? I've personally never needed a spare tyre in all the years I've been driving, yet I still carry one. I've taken the wheel off once, so having the jack has proved useful. There's a fine line between rare and never.

    21. Re:Move to CVS by sw155kn1f3 · · Score: 0, Troll

      you must be kidding.. cvs is inferior compared to svn.. no deleting,renaming on rep level makes any cvs tree a fuckup in any real project... just don't do that... period

      --
      - Arwen, I'm your father, Agent Smith.
      - Well, you're just Smith, but my father is Aerosmith!
    22. Re:Move to CVS by sw155kn1f3 · · Score: 1

      maybe you should have read svn book first, eh?

      --
      - Arwen, I'm your father, Agent Smith.
      - Well, you're just Smith, but my father is Aerosmith!
    23. Re:Move to CVS by larry+bagina · · Score: 1

      How about the backing storage? If shit happens, I'd rather try to recover from text files than binary chunks

      --
      Do you even lift?

      These aren't the 'roids you're looking for.

    24. Re:Move to CVS by hoppo · · Score: 1

      Well, that certainly is an opinion you have there. The ability to absolutely remove a revision from a source control repository is not really a positive. If a revision can be conveniently deleted, that means no truths can be gleaned from a code audit.

      You can accidentally paste your bank account number on a discussion forum, and there is no technology to make people unremember it. Guess you shouldn't use Slashdot anymore then, huh?

    25. Re:Move to CVS by Firehed · · Score: 2, Funny

      To: coders@example.com
      Subject: Working on main.c, leave it the frig alone until further notice. EOM.

      Problem solved :D

      --
      How are sites slashdotted when nobody reads TFAs?
    26. Re:Move to CVS by Anonymous Coward · · Score: 0

      Oh, whoops, someone just cut-and-paste details of their bank account into some code and committed without realising it.

      "Administrator," you say, "can you please make that commit disappear completely out of the repository? I can't have anyone look through the history of that file and see my bank account details!"

      Two scenarios: the first, the administrator uses CVS.. he types cvs admin -o 1.3 and revision 1.3 is gone! Phew! The second, the administrator uses SVN.. he says "uh, I'll get back to you on that in a few days.."

      Because of this one point of difference I still don't believe SVN is a mature product.

      That is the most ridiculous scenario I've ever heard as a reason against SVN.

    27. Re:Move to CVS by sw155kn1f3 · · Score: 1

      yeah.. mods on crack.. please do use svn and cvs in real projects before modding me troll, idiots

      --
      - Arwen, I'm your father, Agent Smith.
      - Well, you're just Smith, but my father is Aerosmith!
    28. Re:Move to CVS by Anonymous Coward · · Score: 1, Funny

      There is an even finer line between good and bad analogies.

    29. Re:Move to CVS by Count+Fenring · · Score: 1

      Except that he didn't say "You don't optimize for situations that take small amounts of time." He said "You don't optimise for incredibly rare situations."

      This is more like, for instance, lowering the top of a convertible: It's done, but it's such a small part of operating the car that it doesn't matter that it's slow. Except since this is a rather low-importance (In terms of the program's purpose: to the programmer with the bank account, of course it matters a great deal) operation that will occur only rarely, it doesn't matter as much as, say, atomic commits, which is directly tied to the core function of the software, and potentially affects every single commit.

      To speak directly to your analogy, although I only drive my car in reverse 5% of the time (Arbitrary small number), I use reverse drive every time I exit a parking lot, or twice per drive. If reverse drive didn't work, my car would not be functionally parkable except in the rare case where I could drive through in forward. In your additional examples: Yes, you have fog lights, a spare tire, a jack. And these are indeed important. But does changing a tire need to be as easy as reversing a car? No. It just needs to be possible, which it is in both CVS and SVN (Reference comments above for proof).

    30. Re:Move to CVS by thegrassyknowl · · Score: 1

      You are ugly and stupid,

      Love from Linus

      http://www.youtube.com/watch?v=4XpnKHJAok8

      --
      I drink to make other people interesting!
    31. Re:Move to CVS by Jack9 · · Score: 3, Insightful

      How about the backing storage? If shit happens, I'd rather try to recover from text files than binary chunks

      You are correct that a text-storage would make recovery easier, although I have doubts that it's at all possible to recover from the Berkley DB in most cases. My question is what kind of failure partially damages a repository that you want to recover whatever part of it you can? I assume a hardware failure. SVN stores text files, binary files, directories. A text recovery for these things would never really be possible anyways. The only way to recover such data would be from a backup regardless of the version control method. SVN is backed up by simply zipping the directory and putting a copy somewhere. I do this daily & weekly. This is how recovery is usually done which is indifferent to filetype. This same approach is done with CVS but causes some serious issues when trying to get everyone back on a restored copy.

      Why would we want granular access to text files in storage? If 'recovery' is high enough on the list to warrant "the primary reason", your revision control needs to have access to the backend storage, the system must have a high failure rate and I would tag it unreliable. I don't know of a reason to want access to the backend storage directly. If SVN were somehow aberrant in this regard, I would admit it, but there are lots of utilities that do not have flatfile backends and it only seems to be an issue with revision control. Sourcesafe, GIT/Bazaar with its hashed key/values or god forbid its crypto hashes, means you can't access their files directly either. Is it really assumed to be a good thing?

      I believe the point of version control is to track all changes, regardless of intent (bad commits count). This does not speak to anything else including recoverability method. I find it mildly disturbing that you can or would alter the history in CVS. In SVN you basically have to dump the entire repository history to make a change to the history. The number of times I've had to restore an SVN backup is 1. That was to do a test of the integrity of the zipped repository over the last 3 years, 12 repositories and near 10000 commits. SVN is stable enough for me.

      In the case where you want or need the peace of mind to be able to alter the "backend storage", I hope you have a long and prosperous career with CVS. We just have different goals.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    32. Re:Move to CVS by enoz · · Score: 1

      A reverse gear is very often used, and thus the mechanics to use said gear is very convenient and easy.

      Many people here would argue that SVN is easy to drive on a daily basis.

      Changing a tyre is considered a very rare occurrence. The mechanics for changing a tyre are relatively difficult and time consuming compared to driving in reverse.

      Here your argument appeared to be that an important feature of CVS is being able to change a tyre (delete a revision) with the flick of a switch.

      If your roads are made of nails this is an excellent feature to have.

    33. Re:Move to CVS by thegrassyknowl · · Score: 1

      To debunk your bad analogy

      What proportion of your time is spent reversing in your car? Of all the miles/kilometres you travel, what percentage?

      I reverse at least twice a day: out of the driveway and into the road on the way to work. And then after work out of the car park and onto the road. Interesting. It's only a small percentage of distance but it is still a daily thing.

      How about fog lights?

      Less value, and I experience 'frequent' fog (about once a fortnight during winter) and I don't have fog lights. Why lug around the extra weight when you can either stop driving during fog or drive extra carefully with the regular lights.

      Anyone carry a spare tyre in their car?

      You'll find that it's mandated by law. I have used the spare several times in my many years of driving. In fact, without it I would have been stuck in the middle of nowhere at least twice at around midnight. Tyres are fragile things and are quite easy to blow out - hence the reason for the spare.

      It's very easy to not be fragile with your source code. Be mindful of what you commit to the repository. '$SCM diff' before you commit is an excellent way to verify that you're not committing something that is totally stupid (your codes to arm all the nuclear weapons in the world, for example).

      Aren't you reviewing your changes before you commit them anyway? I would have thought that with SVN/CVS where branching/merging are a PITA that you'd be working on trunk most of the time so changes would require proper review before they were committed anyway.

      --
      I drink to make other people interesting!
    34. Re:Move to CVS by muszek · · Score: 3, Funny

      You just have do draw a line somewhere. I for one always have some garlic, a crucifix and a wooden stake in the glove compartment, even though it's quite possible I'll never need them.

      You don't and I'm not gonna hold it against you. I'm not even going to say your car isn't properly equipped.

    35. Re:Move to CVS by skeeto · · Score: 1

      SVN is more complicated than CVS, and less functional

      Can I have some of what you are smoking?

      Not that Subversion is the greatest VCS ever, but CVS is, in my opinion, a HUGE pain to use. The only reason to use it is for some sort of legacy system.

    36. Re:Move to CVS by css-hack · · Score: 0, Offtopic

      Git solves this problem in two ways.

      First, it doesn't automatically upload every commit. (In my experience, this also promotes developer review of their own patches before submission, but at the very least, it gives you time to say "oh crap!")

      Second, it's very easy to rearrange your commits (easy branching and whatnot) when you realise you've made the mistake.

      Upstream needs never know! ;)

    37. Re:Move to CVS by Anonymous Coward · · Score: 0

      It tracks merges, which SVN now does starting with version 1.5. However, Mercurial does not handle binary files if I remember correctly... It's also distributed like GIT instead of central like SVN.

      comparison of lots of revision control software

    38. Re:Move to CVS by Gr8Apes · · Score: 1

      Okay, CVS sucks. SVN sucks just a little less. (Yes, SVN still sucks.)

      That said, I'm not sure that I can offer a better solution than either of those for all cases. Clear Case is far superior if you're into branching. SVN blows big hairy balls when it comes to branching, although it is still better than CVS, which really only has the single claim to fame of being better than Source Safe. That's like poking yourself in the eye repeatedly. CC sucks on administration though.

      All the others I'm familiar fail in such unimportant areas such as atomic commits. I personally love it when my SCM tells me I've committed a piece of code, the logs agree, but the builds break because the actual code is missing - MKS/Starteam I'm specfically talking about you!.

      Basically, SCM is much like CMS (Content Management Systems) they all suck, it's just a question of which one sucks less for your particular needs. Just don't be fooled that it's actually "good".

      --
      The cesspool just got a check and balance.
    39. Re:Move to CVS by Gr8Apes · · Score: 1

      This actually comes up more often than you'd care to admit to. The fact that you can't delete a version, nor revert to a previous version in the tree and make it current are both reasons SVN fails miserably in the SCM world.

      They're both minor though. Branching is SVN's major failure.

      --
      The cesspool just got a check and balance.
    40. Re:Move to CVS by Nicolay77 · · Score: 1

      You have a very valid point.

      This should be easier in SVN.

      However, I have done it, and it doesn't take more than a couple of minutes.

      It just requires some command-line fu.

      --
      We are Turing O-Machines. The Oracle is out there.
    41. Re:Move to CVS by Nicolay77 · · Score: 2, Insightful

      That's the hard way dude.

      svnadmin dump -r 0:500
      (asumming 501 is the bad and last revision)

      --
      We are Turing O-Machines. The Oracle is out there.
    42. Re:Move to CVS by remmelt · · Score: 2, Insightful

      I've also read that article. It's written by someone who hasn't worked with SVN yet. From that standpoint, CVS will compare favorably.

      From any other standpoint, not so much. I have experience (actual, hands on experience, not "I read it on the web" experience) administrating and using both systems. SVN wins hands down. It is more robust, it's more user friendly (no more CVS login), it has functions that CVS lacks (svn move).

      SVN's creators wanted to make the next, better CVS. They succeeded. If he's already using SVN, downgrading is a bad move.

    43. Re:Move to CVS by Anonymous Coward · · Score: 0

      We have had some problems moving from CVS to SVN. When using svn+ssh check-in method you have to play around with all sorts of group permissions and sticky flags to allow multiple people to work on the same files (but to have each change logged against the user-id of the person making the change).

      CVS seemed to be structured to allow a team of people to all work on the same codebase more easily. SVN seems to be designed around dividing up the codebase amongst the programmers. SVN does not have a proper client-server architecture and that makes it hard to do some jobs from the client (you may not want all version-control users to have logins to the server for example).

      I am not saying these things are impossible in SVN, its just that CVS worked better for us for those kind of things.

      I think in the end we will end up moving to a third system, maybe GIT.

    44. Re:Move to CVS by Ihlosi · · Score: 1
      Is there value in having a reverse gear on a car?

      Yes. And that's not optimization, it's a necessary feature. Optimization would be having seven reverse gears in your car to get optimal gas mileage in reverse.

    45. Re:Move to CVS by TheRaven64 · · Score: 1
      Interesting article. Let's tackle the points where svn loses in their eyes:
      • Repository format: If you have to know anything about your repository format, then your revision control system is broken. I've used SVN with both BDB and file back ends, and never had to treat the repository as anything other than a black box. I don't know the inode structure of my filesystem either.
      • No tags / branches. Subversion has constant-time copying. Tags are just snapshots - they are semantically equivalent to copies of a specific version, but with some metadata indicating that they are tags. A copy into /tags is equivalent. Branches are dynamic snapshots. A copy is exactly equivalent to these. You can merge between copies with Subversion (easily with 1.5, less easily with earlier versions). Since tags are just copies, you can also merge changes back into them, for example allowing you to apply security updates to a release tag.
      • Rollback. Actually this is possible with svn (I've done it), but it's nontrivial. Rollback in svn is nowhere near as frequently needed as with cvs, because commits are atomic. This means that it is much, much harder to get your repository into an undefined state. With cvs, two people can commit conflicting changes at the same time and have some files go in. Trunk then no longer builds. The only thing to do is revert. With svn, one will go in and one will not go in. Trunk still builds and the second person to commit has to merge their changes before they can proceed.
      • CVS is better supported. Possibly true when they wrote the article. I've not found any lack of svn tool support, but maybe you have some tool that only works with cvs? The existence of libsvn (on which the command-line tools are based) makes adding svn support to new tools easier than cvs.

      None of these 'disadvantages' comes close to making up for the lack of atomic commits. Being able to commit some subset of your changes and break the build for everyone else dramatically reduces the usefulness of svn. The fact that there is a single version for the repository also reduces a lot of their other complaints. You need tags in CVS because you need to get a consistent snapshot of the whole tree. In svn, every commit creates a new tag, and you can make these easier to find by copying a specific version.

      --
      I am TheRaven on Soylent News
    46. Re:Move to CVS by tomhudson · · Score: 1

      Honestly, someone doing something that galactically stupid should have their account info left there...

      How many times have you seen people write a little script to do something, and it includes their password ... and they commit it ... and then EVERYONE has their password.

      People do stupid things all the time. Its a universal constant.

    47. Re:Move to CVS by lpontiac · · Score: 1

      Optimization would be having seven reverse gears in your car to get optimal gas mileage in reverse.

      Can't argue with Italian craftsmanship!

    48. Re:Move to CVS by manifoldronin · · Score: 1

      Being able to commit some subset of your changes and break the build for everyone else dramatically reduces the usefulness of CVS.

      Surely that's what you meant?

      --
      Tyranny isn't the worst enemy of a democracy. Cynicism is.
    49. Re:Move to CVS by turbidostato · · Score: 1

      "Two scenarios: the first, the administrator uses CVS.. he types cvs admin -o 1.3 and revision 1.3 is gone! Phew! The second, the administrator uses SVN.. he says "uh, I'll get back to you on that in a few days..""

      I can do that in about ten minutes... by hand; just seconds if scripted (I have done it so rarely I just didn't find the pressure to script it). On the other hand, it will take me about half an hour to do the same with CVS on a lucky day (sorry but no: it's not as simple as "cvs admin -o 1.3": that will delete a revision for *ONE* file. For the general case that you need to delete a whole revision made up of a bunch of files you will have to search *by hand* which files did got into that check in -and you will need to be careful: cvs ci not being atomic there's the chance for a different checkin to be intermingled with the one of your interest, look for their revisions and delete their history at such revisions one by one).

      "Because of this one point of difference I still don't believe SVN is a mature product."

      Because I don't know how to use the tool, I don't want to believe the tool is a mature product. Quite an intelligent argument.

    50. Re:Move to CVS by turbidostato · · Score: 1

      "When using svn+ssh check-in method you have to play around with all sorts of group permissions and sticky flags"

      Just don't use it. Use Apache/webdav instead.

      On the other hand, when you use ext method with ssh on CVS (you are not using pserver except -maybe, for anonymous check outs, do you?) you end up with exactly the same gaming about group permissions and sticky flags so, again, I still don't see your point except that you don't know how to work with subversion (and you knowledge about CVS doesn't seem to be so deep either).

    51. Re:Move to CVS by Anonymous Coward · · Score: 0

      SVN and CVS both suck. Google doesn't use SVN internally for its main codebase (it uses Perforce).

      Life on the Edge: Monitoring and Running a Very Large Perforce Installation - by Dan Bloch, Google

    52. Re:Move to CVS by rk · · Score: 1

      Yeah, that is certainly true... but passwords are relatively easily changed. He specifically said "details of their bank account". I am really hard pressed to imagine a scenario where I or anyone else would inadvertently C&P my bank account and routing number or a CC number into a source file, and then save it, and then commit it.

    53. Re:Move to CVS by Joebert · · Score: 1

      SVN and CVS both suck. Google doesn't use SVN internally for its main codebase (it uses Perforce).

      Which was put into use first ?

      From what I see, that whitepaper details Google hitting the limits of what Perforce can do.

      --
      Wanna fight ? Bend over, stick your head up your ass, and fight for air.
    54. Re:Move to CVS by Hognoxious · · Score: 1

      being able to change a tyre (delete a revision) with the flick of a switch. If your roads are made of nails this is an excellent feature to have.

      Even in that unlikely case, self-sealing (or even solid) tyres would be a better one.

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    55. Re:Move to CVS by Hognoxious · · Score: 1

      You'll find that it's mandated by law

      Really? Like, everywhere in the world?

      --
      Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    56. Re:Move to CVS by thegrassyknowl · · Score: 1

      Really? Like, everywhere in the world

      I wouldn't be surprised!

      --
      I drink to make other people interesting!
  9. Communicate with your coworker. by burni · · Score: 5, Informative

    Sorry it's not about the perfect solution for your problem, but keeping
    things in mind about the new context can improve things.

    These are the lessons I learned from jobs and life either.

    a.) be precise what you are talking about
    - missunderstandings tend to poison the atmosphere at work

    b.) clear missunderstandings as early as you can

    c.) keep in mind that you now have a coworker
    - trust him, he can do things on his own

    d.) keep in touch with him
    - this means you also report to him what you are doing
    "primus inter pares" first within a group of similars,
    you are the leader? dont behave like "the Führer"

    e.) if you recognize anger, missunderstandings etc.. talk about

    f.) keep in mind two programers are two human beings

    g.) give him all the information you have
    - if information is being held away, he would feel "pissed off".

    h.)
    - "smile"
    - behave
    - use "please" and "thankyou"
    - commendation (wisely used)

    g.)
    let him bring some of his ideas in, discuss ideads,
    if commendation comes from your boss, be modest and inform your boss if it was
    your coworkers idea.

    Communicate! The basic need for team work is comminication.

    These are aspects I learned, when followed, it is allready team work, you don't need
    a special conception for team work.

    1. Re:Communicate with your coworker. by Anonymous Coward · · Score: 0

      I'll probably be in the same situation "Small Team Programming" later this year, so I'll safe your counsels.

      Thank you very much.

    2. Re:Communicate with your coworker. by houghi · · Score: 1

      Another very important lesson in life is: There is no champagne in the chanpagne-room

      --
      Don't fight for your country, if your country does not fight for you.
    3. Re:Communicate with your coworker. by nesstopher · · Score: 1

      I couldn't help but read your post along to this... sunscreen. http://www.youtube.com/watch?v=I5NAPZp2w-o

  10. Divide and conquer by MagicM · · Score: 2, Insightful

    For any enhancements you wish/are asked to make, break up the work into smaller sub-tasks and document these tasks somewhere. Then just have a free-for-all on the available work. Mark tasks as "in progress" and "done".

    If you want to learn from/about each other, review each other's work. If you want to live dangerously, don't.

    The best part of having a team is that you'll have multiple opinions on how to do something.
    The worst part of having a team is that you'll have multiple opinions on how to do something.

    1. Re:Divide and conquer by Anonymous Coward · · Score: 0

      The best part of having a team is that you'll have multiple opinions on how to do something.
      The worst part of having a team is that you'll have multiple opinions on how to do something.

      Nice. That's very true. It's also worth the hassle in my opinion.

  11. Git and Getting Real by Anonymous Coward · · Score: 4, Informative

    A couple of things -

    1. I've had a lot of luck with git, as opposed to SVN. The ease with which it allows you to branch is a huge boon, and might save you some headaches as you work with other guys on your team. You might check it out.

    2. I think the 37signals guys have a lot of good stuff to say on this in their book "Getting Real", which you can read for free on their web site(http://gettingreal.37signals.com/toc.php).

    1. Re:Git and Getting Real by Drinking+Bleach · · Score: 0, Offtopic

      I agree, I've found git to be an absolute joy for any project I can use it on. In fact, it's so easy to setup a repository (mkdir project && cd project && git init), the excuse I used to use for one-man jobs not being maintained in Subversion ("Too much work to setup a repository") effectively disappeared. This even makes it trivial for other people to join latter on, as you don't need to worry about setting up a repository filled with files that apparently were created from magic (aka, not version controlled in the past). Hell, the lack of centralisation even eliminates the question I, and probably others, had with Subversion, on whether I should put the server on my laptop (expecting only me to use it, latter causing moving issues when others need a repo), or on a more permanent computer (cutting me off from my own repo when I'm on a plane/bus). There's no question to ask, just create it, and have others clone when needed, and they have the full history to play with as well.

      Though perhaps the biggest advantage I've found with git, is that branching+merging is a breeze and feels natural. It's so quick, users of CVS/SVN might even wonder if git did anything at all (I did at first). Indeed it did, and has none of the CVS or SVN merging headaches.

    2. Re:Git and Getting Real by Gr8Apes · · Score: 1

      All righty then, let's run out and test git immediately. :)

      Although I've heard of other issues, I'll give it a test run. SVN/CVS/CC/MKS/StarTeam/SS have all sucked rocks so far.

      --
      The cesspool just got a check and balance.
    3. Re:Git and Getting Real by Anonymous Coward · · Score: 0

      If you think they all suck then it's more than likely you that sucks.

    4. Re:Git and Getting Real by Drinking+Bleach · · Score: 1

      No, really, all of the SCMs he listed really do suck. To be far, SVN and CVS are probably the two that suck the least, but that doesn't say much, it just means the others are worse.

  12. Go out and get a beer by Ngarrang · · Score: 1

    Being a team begins with being on the same page, and can't be on the same page until you know each other. If you want to be a good coding team, you to get to know each other, hobbies, interests, favorite soda, etc. Geting to know HOW the other person thinks will reduce future problems that are usually the result of misunderstanding.

    --
    Bearded Dragon
  13. Mix, trust, evaluate by Peter+(Professor)+Fo · · Score: 1
    Try to make yourself redundant!

    If you want to hand over responsibility then you have to delegate trust. Do this in small parts to start with and reward anything that isn't awful, encourage where there's difficulty or dogma. Start with lots of small, well defined tasks. Don't be afraid to ask them for suggestions, advice and criticism - but again start with small matters. If you end up on the same wavelength then not only are you working efficiently, but you are not afraid to 'cooperatively go off at creative tangents' or sharing out some of 'that other stuff' ie the business tasks that pay the wages.

    If you're not used to dealing with people then it might be worth while skimming a book that lists different personality types. (They all do it differently.) For example some people are good at detail, some good at starting, some bad at finishing - through losing interest and some bad at finishing because they must have absolute perfection. Being aware of these quirks will make you a better manager.

    Finally, agree on standards such as file names and test procedures. Hunting through acres of baroque or haphazard code will be a miserable millstone.

    1. Re:Mix, trust, evaluate by easyTree · · Score: 1

      If you're not used to dealing with people then it might be worth while skimming a book that lists different personality types. (They all do it differently.) For example some people are good at detail, some good at starting, some bad at finishing - through losing interest and some bad at finishing because they must have absolute perfection. Being aware of these quirks will make you a better manager.

      Good suggestion. Would you recommend one please? :)

  14. communicate by Anonymous Coward · · Score: 0

    communicate, communicate, communicate

    may sound boring, but it is the best way.

    yes, your going to have new challenges when working in team>1, but work together to solve the problems.

    Your new guy wants to be great at his job, involve him and work together.

  15. Be pragmatic by IQGQNAU · · Score: 2, Informative

    The original Pragmatic Programmer book is excellent I think.
    http://pragprog.com/the-pragmatic-programmer
    And since I also think an "agile" approach to managing software development projects is essential for most companies (certainly for any web-oriented development), I'm planning to check out their Practices of an Agile Developer book.
    http://www.pragprog.com/titles/pad/practices-of-an-agile-developer
    Jim

  16. Extreme programming and Joel Spolsky by farrishj · · Score: 1

    Think extreme programming and agile programming for programming constructs used in small to medium groups:

    Of course, there's also different types of development models, such as object-oriented, aspect-oriented, et al. ad nauseum. Find a comfortable programming environment for your skill level (expression engine might be a good fit if you're a designer by nature), and keep it simple. Stay away from complicated constructs.

    Also, read Joel on Software:

    Get the book, he's a good, entertaining writer.

  17. My tips by dubl-u · · Score: 4, Insightful

    Here's what I'd suggest:

    • Work together - Sit near one another, within easy conversational distance.
    • Integrate frequently - Update and check in every few hours.
    • Write tests - Good nit and acceptance tests are documentation that a computer can verify. Make the computer do the work of making sure the other guy hasn't broken anything.
    • Use a continuous integration server - A CI server will wake up on every checkin and run all the tests. That way you discover problems early, when they're easiest to fix.
    • Work out common standards - Every time you notice a difference in style, have a nice chat about it. Eventually you shouldn't be able to tell who wrote what.
    • Release early and often - The best way to do something well is to do it often. Even if it's an internal or beta release, the more often you guys ship, the smoother working together will be.

    I hope that helps!

    1. Re:My tips by dubl-u · · Score: 4, Funny

      Oops. That should be "unit tests", not "nit tests". I definitely don't recommend checking your fellow programmer for louse eggs. Unless you're both chimpanzees. Then it would be fine.

    2. Re:My tips by Anonymous Coward · · Score: 1, Funny

      Bathe frequently.
      Floss, Brush & Mouthwash.
      Wash hands after bathroom use.

    3. Re:My tips by mfnickster · · Score: 1

      > Unless you're both chimpanzees. Then it would be fine.

      Have you gone berzerk? Can't you see that this man is a NIT??

      --
      "Slow down, Cowboy! It has been 3 years, 7 months and 26 days since you last successfully posted a comment."
    4. Re:My tips by thegrassyknowl · · Score: 1

      Unless you're both chimpanzees.

      Some of the programmers I have worked with may as well have been. There are some really shit programmers out there who learn a bunch of buzzwords, write a shitty GUI in Visual BASIC and convince dumb-ass HR n00bs that they are actually talented.

      --
      I drink to make other people interesting!
    5. Re:My tips by Anonymous Coward · · Score: 0

      Good thing we're code monkeys, not code chimpanzees. Nobody with Cheeto-stained fingers is touching my hair.

    6. Re:My tips by Anonymous Coward · · Score: 0

      All excellent points, to which I would add two more details:

      NORMALIZE YOUR CODE. Solve a problem once, then refer to the function/class/include everywhere else. Often, you'll discover something that you hadn't previously thought of as a common function, such as controlling output, and you'll have to spend precious resources backporting the change.

      But, (for example) as soon as you normalize the control of your output, you suddenly discover interesting abilities, such as the ability to run a process to email rather than to the user's browser, or the ability to log output for developers/debuggers.

      As another example, running all database queries through a controlling class or set of functions make replicating your database(s) for high availability a snap.

      These newfound abilities provide opportunities that would otherwise be impossible, often in surprisingly profitable ways.

      STANDARDIZE EVERYTHING. Anywhere you can, create standards for how code should be written, all the way down to standardized variable names and your favorite indent format.

      I work with two other programmers (soon to be three) and we pretty much do everything parent does along with my suggestions.

      We've been able to do some pretty neat tricks (for example) because we've used the same variable format for referring to tables/fields, such as dynamic type-checking of input for database queries, etc.

    7. Re:My tips by jgrahn · · Score: 1

      Here's what I'd suggest: [...]

      Use a continuous integration server - A CI server will wake up on every checkin and run all the tests. That way you discover problems early, when they're easiest to fix.

      I never understood these. What's wrong with typing 'make test' frequently? But yeah, "don't check in broken stuff into mainline" is good advice.

      Work out common standards - Every time you notice a difference in style, have a nice chat about it. Eventually you shouldn't be able to tell who wrote what.

      I agree that there shouldn't be some blocks of code indented by 3 and others by 4, drastically different function naming, and stuff like that. But I don't think one should have removal of individuality in general as a goal. Different people will solve a problem in different ways, and as long as the resulting code is clear and readable, why would there be a problem? (Of course, I'd expect people to learn from each other, so they write more similar code over time.)

      Maybe it's more important to have a common understanding of the goal and the architecture of the code, in some wide sense. Things like: Should this code be portable? Who should sanity-check interfaces -- the caller or the callee? Should we spend time making the code general, or be satisfied when it works in this application? Is performance important? And so on.

    8. Re:My tips by Anonymous Coward · · Score: 0

      "Work out common standards - Every time you notice a difference in style, have a nice chat about it. Eventually you shouldn't be able to tell who wrote what."

      And this is how to make inventive minds despise you and your workplace.

      As long as code is readable, and there are not conflicts in differing methods, trying to make every code code the same ignores the fact the every coder is different. This is just one of the reasons I'm so glad I didn't get a place at Google (realy)

    9. Re:My tips by Anonymous Coward · · Score: 0

      1000 chimps on a 1000 computers could write an OS better then Vista a lot sooner then you would expect.

    10. Re:My tips by dubl-u · · Score: 1

      As long as code is readable, and there are not conflicts in differing methods, trying to make every code code the same ignores the fact the every coder is different.

      Nobody is ignoring that. That's why we talk to come up with a common standard. But it is a fact of life that coders move on, and in many contexts a team approach delivers much more value than a bunch of single-coder silos.

      Letting every single developer impose their personal stylistic preferences on every bit of code they touch is a waste of time over the long haul. You end up with a) endless rewrites as people move around, or b) a hopeless mishmash of styles, making code harder to read and understand.

      The brace and indent style I favor is obviously the one intended by God and used by all His angels. But if the team I'm working with favors another one, that's fine with me. I want to make stuff, not bicker endlessly about cuddled elses.

    11. Re:My tips by dubl-u · · Score: 1

      I never understood these. What's wrong with typing 'make test' frequently? But yeah, "don't check in broken stuff into mainline" is good advice.

      It's not one or the other; you do both. A CI server saves you from the people who forget to do that. And it saves you from screwing things up for other people when you forget to check in a file or have some weird environment difference on your own machine.

      Without a CI server, either the fussiest person becomes the bad cop, yelling at the less careful and ending up resented. Or things just stay broken forever until the final push. With a CI server, the machine does the grumbling instantly, freeing the fussiest person to do real work. As somebody who is frequently the team fussbudget, I love not having to prod people all the time. And I love that the machine makes me live up to my own high standards.

      Of course, I'd expect people to learn from each other, so they write more similar code over time.

      We're on the same page here. The best teams I see definitely do end up evolving a common style and own the code collectively, so you really can't tell.

      I phrased it the way I did, in terms of nice chats and eventual convergence, because the rock I'm trying to steer him around is the clash you get when people believe their personal stylistic preferences are inviolable laws of nature. Indulge that and you end up with code silos, mutual irritation, and lower productivity.

      To work together as an effective team, they will need enough of a shared style that they are comfortable working in each other's code. Solving the points of difference now will make it much easier to add a third or fourth developer, and it will also ease the transition when one of them decides to move on.

  18. You need someone with this experience by bokmann · · Score: 2, Interesting

    First, a disclaimer - My consulting company specializes in consulting on this topic, so you might consider me biased. On the other hand, I started this company because I had the experience, and saw the need.

    Second, so this won't seem like a commercial, let me say I'm not answering this for any consulting opportunity... I answer slashdot questions all the time without looking for monetary gain; I'm just speaking from experience here.

    There are a ton of great references for working together as a team - Any or the books from the Extreme Programming Explained series, a book on Scrum, Bob Martin's book on Agile Project Management, a dramatic reading of 'The Pragmatic Programmer', the book 'Practices of an Agile Developer' (in which several of my stories are published), or the book 'The Productive Programmer', recently published by OReilly (for which I wrote the forward), etc. But reading a book and putting it into practice are very different things. I strongly believe that teams should have mentors. (Thus the name of my company, CodeSherpas - as in we are guides to the terrain, but again, not a plug, just a reference for the kind of thing you need).

    You have a fantastic opportunity here - to create a team culture where there are values like continual education, the team not afraid to learn from mistakes, peer reviews and retrospectives, iterative development, proper estimation techniques, and so on. Don't squander it. Find a good book that talks about the 'way things should be' - there are probably a zillion references here on slashdot already, but once you have that, make sure you get someone who has done it before... Even if it is just for a week of consulting/training, and then an occasional 'tune up'. And don't get a talking head... you want "visiting professor", not "ivory tower". A little bit of experience brought into your team now will mean that by this time next year, a group of ~3 awesome people who really know how to work as a team could be out-performing a team of ~7 people who just 'get it' enough to 'get by'.

    -db

    1. Re:You need someone with this experience by Anonymous Coward · · Score: 1, Insightful

      I hate seeing Agile hype mentioned. I've been programming for 20 years, and the biggest changes any company can see by embracing Agile development or more so with extreme programming, is convincing good programmers to leave or demanding raises to put up with all the BS.

      I've been using Agile and Extreme methods for much longer than they had names, but misapplication of the techniques or thinking they're silver bullets to use in ALL situations will hurt your company.

    2. Re:You need someone with this experience by wmbetts · · Score: 1

      I worked at a company a while back that had some guy come in and try to explain it to us, he was the bosses friend. He failed miserably at actually explaining anything. The only thing we got out of it was book recommendations. After reading the books I can see certain things that I should put into practice almost all the time. One of the big things is unit tests. I do agree with you though I think people hear the term agile development and go "zomg if we bring in some high paid consultant suddenly everyone will gain 100% efficiency". Any how that's what my boss seemed to expect.

      --
      "Ubuntu" -- an African word, meaning "Slackware is too hard for me". - stolen from Dan C alt.os.linux.slackware
    3. Re:You need someone with this experience by agibson57 · · Score: 1

      Maybe Agile and Scrum works for some, but mostly I've seen it do nothing but enrich the pockets of consultants who leech off of dumb PHBs. That, and the fact that the creators of "Agile Manifesto" based it on a massively failed project. They are all frauds as far as I'm concerned. If I want Amway, I'll buy Amway.

  19. You'll need to decide for yourself.. by Anonymous Coward · · Score: 0

    But you already have the two most important bits in place; an RCS and an issue tracker.

    The first thing to do, if you haven't done so already, is setup a post-checkin hook in svn to email you both diffs whenever anything is checked in to the repo. This encourages peer review and helps keep everyone up to speed.

    In our shop, I've set up the svn accounts to mirror developer email addresses, so the team can reply directly to the svn generated email to send a response to the developer that did the check-in.

    At the core of any system (or no system!) is trust. If you don't trust your team to do the right thing, you're just setting yourselves up for headaches. "Trust, but verify" is the mantra here as elsewhere.

    If you don't have any formal coding standards, get them in place now if there is any friction at all between the two of you when it comes to stuff like that. We based ours on the Java coding standards guide from Sun; it's not perfect and we modified it quite a bit, but we are all trying our best to adopt it.

    It can be a pain to structure you loops this way, name your variables that way, etc., but it's a bigger pain if you two get into a passive-aggressive pissing match constantly reformatting each others code during simple updates.

  20. Multiple Personalities by cloneofsnake · · Score: 0

    Up to now I've been doing all the programming myself. Now we are working with a second programmer for the first time.

    The most important thing is communication. If you were able to communicate fine with the "We" within you, then what's adding one or two real people to you? Wait, that "second programmer"... is his name Tyler?

  21. break it down by djhertz · · Score: 5, Interesting

    I run a small dev team for a company of 12 people. 2 of us are 'senior' dev guys, 1 is a graphics guy in marketing, and the 4th is a guy still in school. The rest are professional services or customer reps. My company does web crawling (lots of SQL, perl, automation) and then some web stuff to display the results and various reports. Pretty much I meet with the owner once a week and we make sure we are on the same page as to what the big projects we are working on (more news coverage, some cool new chart system, etc.) then we have a really quick tech huddle every morning at 9:00. Pretty much roll your chair over and we all look at the whiteboard, what did you do yesterday, what are we working on today. Are we on track to get X done for Monday? And y done for next Monday? Every piece of every project is on the board assigned to somebody. We use source control and have a ticket system, here's a good example of how we worked on a recent project together.

    We needed to write a new mail system. We mail out a few thousand reports a day to clients but our old one was prone to errors and failures. I work mostly with SQL, perl, and architecture, I suck at web/interface stuff. I know enough about it to throw a table up but it is ugly. The other senior guy is great at interface stuff, slick javascripty boxes and he's OK with backend stuff but it's never optimized and will bog down. We know what each other is good at and we like it that way! So I sat down in a conference room with my senior guy and we mapped out how to do this. A queue system, this talks to this, we need a template here, this should be stored in a db, this should be in the code, etc. Broke it all down into pieces. I took on the details loading up of the queue system, the other guy took on the reading out of the queue to send the mails. With that he gave the graphics guy the task of "Write up all the CSS to make 4 templates of daily reports, make them look cool". He would then take that CSS and dump it into the mailing code he had written. I had our Jr. guy write internal reporting of the queuing system to track when mails go out and an internal dashboard of it.

    Once it was decided what we were doing nobody had to waste time in meetings or anything, just needed to talk once in a while, "Hey, I'm going to put this flag in the queue tell you which template to use, how do you want to receive it on your end?" Each piece of the project is compartmentalized, I don't even need to think, "gee, I hope the graphics line up" or "Oh man, I'll need to write an internal report for this", it's all been delegated. I just do my part, everybody does there's and when it's all done we test and I just make sure the end product is solid. "Ok, reports going out now? I'll reboot the mail server, let's see if we lose any repots, the queue handles that right?" Not having to worry about all the details makes doing my part much easier. I worried about the details when we designed it, so now it's just getting it done. In the end I'm the director and it's up to me to make sure it's done but I act a lot more like a peer as I do as much work as the other guys, but I also handle all the meetings with the other groups. My team can focus on code and banging that project out while I deal with any BS that would just slow the team down. I've found this is a huge help on moral, how bad is it when the marketing guy wants his cake and eat it too and then the whole dev team just goes back to there desk and bitches about it. Instead I just go to the meeting 1 on 1 and will say, "I think you just wanted to cake here, no eating." That way he doesn't look silly and I can go back to my team and say, "Ok, we are baking a cake." and there is no confusion. I'd say half of being a good dev leader is understand wtf the people really want (not what they ask for) and then translating that to the rest of the dev guys, "Hey, let's be solution providers, not coders."

    I've found using a ticket system is helpful for people outside my department for putting requests in, for

    --
    Modest doubt is called the beacon of the wise - William Shakespeare
    1. Re:break it down by Anonymous Coward · · Score: 0

      You think you got your point across? Jesus

    2. Re:break it down by Aladrin · · Score: 1

      Damn, are you hiring? j/k

      I enjoy working for the company I'm with, but organization has been left to the programmers because it has worked so far. We're growing rapidly, though, and I can see it getting out of hand soon.

      Hopefully things will naturally gravitate towards the setup you have, but I've already been shot down on the ticketing system. They claim that it's out job to take the input however anyone (!) wants to send it... Phone, email, IM, whatever. I think it wastes a lot of time for everyone and some bug reports get put off or lost altogether.

      Anyhow, I always enjoy reading about how well-organized shops run, so thanks for that post.

      --
      "If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
    3. Re:break it down by djhertz · · Score: 1

      Glad you liked it! The ticket system has been a HUGE help for us. I'll go to a meeting and be asked, "Did you guys fix that spreadsheet bug we talked about last week?" "Oh, man, I'm sorry I forgot. Can you put that in as a ticket for us?" It's not that I want to be a dick about stuff but we really depend on stuff getting into the ticket system for tracking. If they can't put the effort in to make a ticket I certainly can't be bothered to work on it. That way they also know when we've done the request. I also write a weekly report for my boss with a quick 1 liner for each open ticket in the system/any ticket that has been closed in the last week. It's become so that anybody working here knows if they have something they really want to get attention, make it a ticket. It will be reviewed for certain. Sure, you can send us a mail and we might do it but hey, we have a ticket system so if you feel strongly about getting something worked on put it in there.

      Internally for our group we only make tickets for each other if it's something we want to document. "Andy, please fix the blown up script on server 5 again" That way when he does and closes the ticket he'll tie it to source control and write what he did to fix it, that way anybody here can fix server 5 when perl blows up on it if he's on vacation. Having good docs like that only save us time down the road. No more, "Remember when we had this problem last year? uh.. remember how that took 2 days to figure out.. what did we do again? Did Bill fix it?" Just do a quick search through the tickets and boom. It's like you get self building docs.

      --
      Modest doubt is called the beacon of the wise - William Shakespeare
  22. Consistency by Mutatis+Mutandis · · Score: 1

    The first thing to strive for, I think, is ensuring that code on which two people work still has structural consistency. Programming can be very personal, and aside from emotional aspects such as indentation and formatting, individual programmers sometimes have very individual approaches to problems. Chaos can ensue if, for example, two people on the same project have very different approaches towards exception handling.

    One way to ensure consistency is to regularly review each other's code, at least initially. Discuss solutions that are clearly different, and agree on the best one. Alternatively you can buy a book that describes a good standard approach and a set of accepted design patterns for the technology that you use, and agree that you will both stick to that. For some platforms there are also software tools to enforce basic rules.

    Now is also the time, if you haven't already done so, to put some effort in design documentation, as opposed to code documentation. What is the architecture of your system, and why? What are the underlying concepts, what design choices did your already make? What is the general principle according to which your code is organized? Those issues tend to matter little as long as you work alone, because you just keep them in your head, but that changes in a team. There you have to make them visible in some way, so that all people can work from the same baseline concepts.

    Another thing that should be carefully managed from the start are internal and external dependencies. Many programmers have their own favourite libraries and technologies which they like to use for specific purposes, and they may even be emotionally attached to them, but in a team effort somebody needs to manage the dependencies. You need to keep track of the impact of changes, and prevent the frivolous introduction of additional external dependencies.

  23. Visual Sourceunsafe by MrSteveSD · · Score: 1

    At the company I used to work for there were about 5 developers and we used Microsoft Visual SourceSafe, which didn't actually seem to be that safe. The main nightmare was when we needed to have several versions on the go, e.g. one release version that was just for bug fixes etc and another version that was for development. It was annoying because bug fixes in the release version had to be copied over to the development version (and sometimes vice versa). There are obviously better ways to do things and we were quite conscious that this kind of source code management was our dumbest area.

    One day we were at a conference with our competitors and we were sure they were smarter and more professional than us, so after a few drinks we started talking about the nightmare of managing source code. I said "How do you deal with managing the code and versioning etc, do you use sourcesafe or something better". To which he responded "Oh, I just keep my source code on my machine and he keeps his on his laptop." These were the two directors of the company, and obviously the developers as well!

    1. Re:Visual Sourceunsafe by Shados · · Score: 1

      SourceSafe 2005 isn't SO bad... but its still bad (its just decent because its well integrated). Team Foundation Server 2008 (2005 had some rough edges) is quite good, but that can be too expensive for some...

      Because of that (I actually have TFS, but that requires a box with Windows Server and crap, and I don't have the hardware), for personal projects, I've grown very, very fond of Visual SVN... it is a commercial plugin, but the server is free (its just SVN + Tomcat wrapped in a nice friendly installer, and integrated in the windows management console, so its a snap to configure and install), and the client plugin itself is very very cheap... Its a Visual Studio plugin that integrates with Tortoise SVN and stuff... it works amazingly well.

      There really isn't any reason to use SourceSafe anymore. (And I know you said "At the company I -used- to work for... i just figured it was as good a place to mention it as any =P )

    2. Re:Visual Sourceunsafe by WuphonsReach · · Score: 1

      At the company I used to work for there were about 5 developers and we used Microsoft Visual SourceSafe, which didn't actually seem to be that safe.

      (Laughs at the story... unfortunately, source code control systems seem to be rare. I think, mostly because they were expensive or difficult to use until things like Mercurial / SVN / GIT hit the scene. It feels, to me, like SCC system usage is a lot more common then it used to be.)

      We used VSS at our location for 5 developers for quite a few years. In our case, we made it a lot safer by purchasing SourceOffSite and using that to interact with the VSS database. (Basically, nobody used VSS.) It seemed to keep corruption to an absolute minimum because it was the only program mucking around with the VSS storage files.

      (We've since moved to Subversion a few years back and have been very happy.)

      --
      Wolde you bothe eate your cake, and have your cake?
  24. From 25 years of team programming... by Organic+Brain+Damage · · Score: 5, Interesting

    1. Keep the team small. 2-4 people is best.
    2. Ignore heavyweight Methodologies and Methodists.
    3. You need a specification, a small document in the language of the customer, that describes what the customer hopes to accomplish with the software you're writing. If the customer cannot understand the spec, you're doing it wrong.
    4. You need some white boards.
    5. You need to get good with a pretty-printer so you don't have to waste hundreds of hours arguing about coding styles.
    6. If you have documents that describe the programs and they are constantly getting out of sync with the code, write clear code with decent names and throw the documents away. On 99% of the projects I've seen (mostly Fortune 500 co's), the documentation outside the code quickly becomes actually misleading and slows people down if they read it first in their attempt to understand the code.
    7. 1 talented, motivated, socially adept programmer is worth 1,000 mid-range unmotivated socially inept programmers.

    Peopleware is pretty good. Mythical Man Month is better.

    Good luck.

    1. Re:From 25 years of team programming... by Shados · · Score: 2, Insightful

      I hear you on #6. I do enjoy automated documentation (like class diagram generators, API documentation tools, etc), but stuff that is done manually gets...ugh...fast...

      Having a Wiki for the big stuff is a good idea, but beyond that? I'm currently working on some very very small apps (a lot of them, on a 2-3 weeks cycle per app), and when the QA or the customer points out a change request, I get scared to death.

      Not because of the change itself... development tools have grown over the years, and even a significant change doesn't take me much time at all... But the documentation...oh god the documentation...

      First you have to update the class diagrams and stick them somewhere on the network, then update the API doc (ok, those 2 are automated), then update the design document, then get it approved (I code during that time even though I'm not supposed to...if it gets rejected, I'll just roll it back, ugh...), then update the SRS because the analyst is too busy, get that approved too, then update the model diagram, then the screen prototypes, then....

      Seriously, adding one textbox on a form requires the update of about 10 documents, approval of 2, syncing some with the others, THEN changing the code... The overhead is just crazy.

      I feel a few automated tools (in the build system if possible), and a good Wiki is all you should need. If you need more than that (for the customer themselves for example), you hire technical writers who go back after the fact and document it...else you just get lost in the paperwork.

    2. Re:From 25 years of team programming... by anomalous+cohort · · Score: 1

      I agree. Curiously, I just blogged on this topic just last week.

    3. Re:From 25 years of team programming... by wmbetts · · Score: 1

      2. Ignore heavyweight Methodologies and Methodists.

      What would you prefer Catholics?!

      --
      "Ubuntu" -- an African word, meaning "Slackware is too hard for me". - stolen from Dan C alt.os.linux.slackware
    4. Re:From 25 years of team programming... by excalibur2000 · · Score: 1

      This sounds a lot like Crystal Clear. Its a good book esp. for small teams of 4 to 10 developers.

    5. Re:From 25 years of team programming... by Anonymous Coward · · Score: 0

      class diagram generators

      What are these good for cept for takin' up pages of monthly reports for foolin' upper management?

    6. Re:From 25 years of team programming... by terryducks · · Score: 1

      #6 - hrm, 25 years ? Do you really know what those documents are supposed to do ? Ass paper. It's just ass paper to cover your ass when the client says thats not what they wanted. Actually, if you can get away with a small diagram / requirements spec to cover the high level stuff - you're doing good. It's just for planning what's going to happen. Remember, it's WHY not HOW.

    7. Re:From 25 years of team programming... by Organic+Brain+Damage · · Score: 1

      >> It's just ass paper to cover your ass when the client says thats not what they wanted.

      I understand, but I find that if I don't write the ass paper and the client says "that's not what I wanted" I have the time to change it into what they wanted and they're much happier if I do that than if I show them a "gotcha" piece of ass paper.

  25. What I require for my team by Jack9 · · Score: 2, Informative

    Whenever I have a project at work or at home, I expect some basic things.

    1. Standardized IDE. Everyone use the same thing and you will be able to do builds, deployments, and fix bugs quicker. Eclipse/Zend/VC++ whatever.
    2. Communication channels. Email addresses of everyone. A group email that goes out to all teammembers is helpful. IM of everyone - Trillian, GAIM, I don't care.
    3. Version control. SVN for me.
    4. Project/Task/Issue/Bug tracking. I use SVN integrated with Trac at home. It's not very good compared to commercial offerings, but it works.
    5. Standardized build and deployment. ANT/Bash scripts/whatever
    6. Basic development practices (test/commit often), QA methodology/granularity. The more experience you have, the better you get at this.

    I like to have 2-4 deployments. Production, QA - daily build via cron, Dev - build of latest commit via svn hook, and LocalDev - complete build on each developer's machine(s) pre-commit. When QA+Product Owner(s) sign off, move from QA to production as a release. This is "best case" and often you have to compromise based on necessity or need. This means up to 4 different builds and deployments, although QA and Production should be near-identical.

    --

    Often wrong but never in doubt.
    I am Jack9.
    Everyone knows me.
    1. Re:What I require for my team by thegrassyknowl · · Score: 4, Insightful

      1. Standardized IDE. Everyone use the same thing and you will be able to do builds, deployments, and fix bugs quicker. Eclipse/Zend/VC++ whatever.

      That is the dumbest thing I have ever heard. Horses for courses. I was an Emacs guy until recently when I switched to Vim. We have a couple of other Vim people and an Eclipse guy here. Everyone gets by using whatever 'IDE' that they want. The IDE does nothing except provide them an editor. Forcing the same IDE on everyone is asking for reduced productivity.

      Standardized build and deployment. ANT/Bash scripts/whatever

      With this you don't need an IDE preference. We have Makefiles and Ruby scripts that do everything we need. SCM actions are mangled into scripts so branching, merging, etc are all handled and the right comments (according to our policy) are inserted into the repository. Releasing to production and staging servers is handled and everything works neatly.

      If you get this part right you won't have the headache of forcing a GUI guy to edit code on the console and you won't have the loss of productivity when you get a console guy to try and use a graphical (read: crap) IDE.

      --
      I drink to make other people interesting!
    2. Re:What I require for my team by Jack9 · · Score: 1

      Everyone gets by using whatever 'IDE' that they want. The IDE does nothing except provide them an editor.

      An editor and an IDE are completely different animals. If your IDE does not have an integrated version (or a broken or functionally different integration) of the VCS, you lose productivity and create problems down the line. When you have disparate IDEs and you want to add to the java path for a certain project and you show how to do it in one IDE, you lose productivity if someone else isn't familiar with what that is or how to do it in their IDE. The fact of the matter is that standardizing IDEs is assumed in any project over 3 people. Theoretically it all should be the same per project, but try using the Flex plugin for versus the Flex Builder and you have a recipe for wasted time. Lemme know how long it's going to take you to deploy Tomcat in Emacs for your localdev because in Eclipse it's trivial. I suspect you have a mixing of projects if you are using disparate IDEs. If you are working on standalone backend, that's a different project and a different IDE, but everyone on that project will be using the same tools over time.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    3. Re:What I require for my team by Shados · · Score: 1

      I actually know a lot of companies (mostly C++ shops) with hundreds of devs and no standard IDEs.

      They swear by it, like the grand parent. However watching them set up their environment and all goof around is quite amusing. It takes days to get the environment set up for a new employee, because with everyone doing it differently, no one knows -exactly- how to do it (it is a very, very, very large application... think Oracle all editions and all related dev tools kind of large).

      Then everyone have their own macros, their own little scripts, own little way of doing things... Sometimes they'll talk to each other and realise that someone across the company had a script/macro to do what another has been doing manually for 6 months, etc. What a mess.

      One IDE, all of the macros/configs/whatever in a source control directory. Pull it up when someone comes in, big bang done.

    4. Re:What I require for my team by statusbar · · Score: 1

      I use emacs, vim, and eclipse, even for c++. Try it out, you need to learn about it specifically because of the very good communication tools allowing remote code collaboration and integration via mylyn with bugzilla or trac or even fogbugz ...

      Don't dismiss a tool without knowledge. Ide's have come a long way since vc++ 6...

      --jeffk++

      --
      ipv6 is my vpn
    5. Re:What I require for my team by beej · · Score: 1

      1. Standardized IDE. Everyone use the same thing and you will be able to do builds, deployments, and fix bugs quicker.

      How do you get everyone to convert to vim? ;-) About a third the projects I've worked on have used a common IDE, and that's because it was the best thing to do, and one's life would be hell if one didn't switch. It didn't matter on the other projects, and everyone just used what they used best. I think it kind of sorts itself out that way.

      IM of everyone

      IM is excellent. Excellent! Even intra-office!

      3. Version control. SVN for me.

      I used to use SVN, but for this latest one, I switched to git (though I'm the only dev on this arm of the code for this project). I cloned the repo to my laptop and took my work out of internet range for the weekend. It was cool. (Except for working on the weekend.)

      5. Standardized build and deployment. ANT/Bash scripts/whatever

      Everyone should be able to do the canonical build if possible. Sometimes it's neat to have multiple build systems to cater to different developer needs, though.

      6. Basic development practices (test/commit often), QA methodology/granularity.

      I'd love to see more of this, especially built into the schedule. ;-)

    6. Re:What I require for my team by thegrassyknowl · · Score: 1

      When you have disparate IDEs and you want to add to the java path for a certain project and you show how to do it in one IDE,

      And when you're tied to an IDE you're tied to devs who are comfortable and you're also relying on the fact that it will continue doing what you need it to do from now and until forever.

      It's not really that hard to standardise a build/dev environment. A set of required packages installed. A set of required BASH scripts installed and bashrc (or whatever) login settings installed at the system level.

      If your build is managed by Makefiles then there's no need for everyone to use your choice of shitty IDE when they can all use the tools that work best in the situations they need.

      Believe it or not, most of the pioneering work in computing was done with line-based editors and console-mode tools. I wouldn't be too quick to dismiss them when talented devs are working with them.

      --
      I drink to make other people interesting!
    7. Re:What I require for my team by thegrassyknowl · · Score: 1

      Don't dismiss a tool without knowledge. Ide's have come a long way since vc++ 6...

      I've tried a stack of tools and I always come back to the simplest ones because they're the ones that piss off into the background and let you do your job.

      That said, VC6 had a nice debugger in it; I guess you need a good debugger when you're working with Windows...

      --
      I drink to make other people interesting!
    8. Re:What I require for my team by Jack9 · · Score: 1

      there's no need for everyone to use your choice of shitty IDE

      If there's evidence the IDE is "shitty", everyone should switch to a non-"shitty" one.
      There is no "my IDE" nor is there a place for personal preference over productivity in a project unless you are a masochist.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    9. Re:What I require for my team by shish · · Score: 1

      4. Project/Task/Issue/Bug tracking. I use SVN integrated with Trac at home. It's not very good compared to commercial offerings, but it works.

      I'm curious, what does trac lack, and which commercial offerings do better?

      --
      I mod down anyone who says "I will be modded down for this", regardless of the rest of their comment
    10. Re:What I require for my team by Jack9 · · Score: 1

      1)Trac integrates 1 repository per trac. While I can configure SVN to use single configs for multiple repositories, this does not translate for Trac. This means I have to set up users and permissions for every person (involved) per project which is extra work or put all my projects under a single repository, which is bad. Have not tried Trac with CVS :p

      2)Attributing SVN commits based on tagged commit comments. JIRA does this and it rocks.

      3)No approval mechanism or role-based approval. If I can't change a defect ticket status, I can't change ANY ticket status as opposed to ones I've created (tasks) or one of my team has created unless I have permission to change all ticket statuses. Blanket permissions are the sole way to manage tiers of review in trac and you need complex project processes to make that work at all.

      4)The interface is not modular enough. Lots of things in the interface are clean, tickets are not one of them as they attempt to inject concepts your project may not have. Version, keywords, priority, cc, unbound Assign-To.
      *THIS IS NO LONGER AN ISSUE see:Hiding Fields and Adding Custom Fields + TracTicketsCustomFields*

      5)The interface is not mature enough. Where's the simple integration of trac-user/group to email to ticket? There is no concept of Trac group AFAIK.

      of course, my lack of experience with trac as an issue-tracker in the last year may mean I have neglected to keep up on new trac offerings. see #4, and this is just my off-the-cuff list. I'm sure there's a couple more issues but JIRA's working well for us.

      I would LOVE to use trac for everything, but not yet.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    11. Re:What I require for my team by dubl-u · · Score: 1

      The IDE does nothing except provide them an editor.

      Depends on what you're doing for a living, but this is patently untrue with Java or C#. An IDE with good code browsing tools is much better than a mere text editor. It's like the jump from using more on a bunch of text files to using a web browser on hypertext. And a good refactoring tool makes a world of difference to productivity.

    12. Re:What I require for my team by thegrassyknowl · · Score: 2, Insightful

      If there's evidence the IDE is "shitty",

      What you think is shitty and what I think is shitty are two different things.

      There is no "my IDE" nor is there a place for personal preference over productivity

      That's a very power-freak way of doing things. If you enforce rules like that then you're asking for trouble. I've worked in a few places now and I can tell you that the places that enforce those kind of rules almost never get very far.

      In fact, the second-last job I was at was haemorrhaging people for exactly that reason. They went from 40 devs to 10 in the space of 12 months and couldn't find decent replacements because word got around that they sucked.

      As I say, there's ways of standardising the environment without forcing everyone to use tools that they don't like day in, day out.

      --
      I drink to make other people interesting!
    13. Re:What I require for my team by thegrassyknowl · · Score: 1

      An IDE with good code browsing tools is much better than a mere text editor.

      I'll agree that sometimes having extra power available is key to performing some tasks. A lot of the time the extra 'power' is also very superficial and can hinder if the dev doesn't understand that it is very limited.

      --
      I drink to make other people interesting!
    14. Re:What I require for my team by Jack9 · · Score: 1

      What you think is shitty and what I think is shitty are two different things.

      Unless you can provide an example of 2 IDEs that are equally productive in every way but developer preference and I'll show you why you're not plainly trolling.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
    15. Re:What I require for my team by JoeMerchant · · Score: 1

      Echo the parent with the following variations:

      1. Multi-platform targets with common code base. I build on X-Code / VisualC / Gnu command line, and whatever else comes around. Making Qt based code compile warning free in all environments takes about 1% additional effort, and shows up enough bugs to pay that effort back threefold.
      2. E-mail is a given, sacrificing an hour of time for weekly face to face is also priceless, the formal meeting is usually done in 15 minutes or less, but the after-meeting sessions can run from 5 minutes to all afternoon, and that's where most of the problems are solved. We buy everyone lunch as an appeasement for calling the meeting (and also to get them to do a little work during lunch one day a week... nobody seems to mind the trade.)
      3. We use SVN too, dedicated box in the closet, I think the hardware was destined for the scrap heap until we made a SVN/Trac server out of it, only cost is in electricity to run it - if that's a concern, think about running your server on something like the Asus EEE desktop PC when it comes out - with 3 guys, you don't need a killer server (and, looking back, the EEE desktop kicks a $10K 20 year old server around the block.) I have also successfully run Trac/SVN service on a MacMini (though I'd recommend booting it into Linux if I were to do that again).
      4. We're looking at continuous integration, haven't done it yet with the excuse that the team is too small to take time out to set such a thing up.
    16. Re:What I require for my team by Teunis · · Score: 1

      I do development across multiple platforms. Due to massive differences in requirements between platforms - it's best to use a different IDE for each platform. The tool chain is vastly different on each platform. (C/C++/asm on ARM/embedded, linux/32, linux/64, windows, MacOSX - for a start)

      Part of the key is problem domain. If your problem domain is one where the IDE can provide the full toolchain, you're fine.
      If you're not - it's petty micromanagement and will hurt (or prevent entirely) productivity.

    17. Re:What I require for my team by Jack9 · · Score: 1

      IDE does not imply 1 application. Integrated Development Environment is rarely a single binary (regardless of what wikipedia would have the world believe). In retrospect, I have wrongly made an assumption that others understood a modular application != IDE, in part, because of my examples listed.

      --

      Often wrong but never in doubt.
      I am Jack9.
      Everyone knows me.
  26. Software Project Survival Guide by christefano · · Score: 1

    The first thing I'd recommend is to get the Software Project Survival Guide. It doesn't apply to all projects, of course, but it's an invaluable guide and source of best practices for team-based software development.

    http://www.stevemcconnell.com/sg.htm

    The second thing, of course, is to actually read it. (I'm still working on that part myself.)

  27. Hold on there kiddo... by mosel-saar-ruwer · · Score: 1


    g.) give him all the information you have

    In general I would agree with that advice - it's no fun [and certainly not productivity enhancing] to be in an environment where people are playing games and keeping secrets from one another.

    The big exception I would make, however, is if you get even a whiff of the remotest possibility that your job might be under the magnifying glass as far as elimination is concerned.

    If existing employee dude is in his late 40's, pulling down $150,000 a year, and if his healthcare costs are about to leap into the stratosphere as he enters his 50's, and if brand-spanking new employee dude is in his early 20's, and willing to work for a fraction of that [say $50,000], with almost no healthcare costs whatsoever, and if existing employee dude senses that there really isn't enough excess work lying around to justify the new hire, and if he suspects that the suits might be grooming brand-spanking new employee dude as his successor, then it might be time for existing employee dude to become a little less helpful to people, and a little more indispensable to them instead - if for no other reason than to buy a little time to figure out a game plan for what to do after his position is eliminated.

    1. Re:Hold on there kiddo... by burni · · Score: 1

      1.)
      Information does not mean help in first place.

      2.)
      Well let me say, as I understand the point you have made, viewed from the corporate situation
      this behaviour is damaging the company. It can lead to a negative view about the experienced worker, and when it is possible to his firing.

      Successors have to be installed because if anything happens to the experienced-super-worker(heart attack, stroke, ..) and there is no successor the company is boned and this sometimes means bankrupcy.

      But from what I recognize in my country ( germany) this booby trap is about to change,
      that senior workers are getting replaced by young workers no more.

      That is because in germany we have a lack of high skilled and experienced workers.
      We had small increase of our population over the last 30 years, and there is a mental change in the corporate thinking going on, that experience is good, and old people are not "that" bad ;)

      Thus making it more and more difficult for a company to keep their age average low.

  28. The Art of Agile by SpringRevolt · · Score: 1

    Communication (sit together), frequent deployment, test-driven development, frequent feedback from users... does that sound like a good plan? If so then I highly recommend "The Art of Agile Development" by James Shore and Shane Warden.

    1. Re:The Art of Agile by Anonymous Coward · · Score: 0

      All of the above have been very good comments. Here's my 5 cents worth, sorry if it was already mentioned:

      Also read "The Pragmatic Programmer" (Andrew Hunt, David Thomas). It is full of good ideas, such as the "DRY principle: Don't Repeat Yourself", placed into practice in the successful Rails framework.

  29. Peopleware: Excellent Recommendation! by beaststwo · · Score: 1

    I read this in grad school. An excellent treatment on group dynamics and building effective teams. While it's geared toward software development, the concepts are applicable to many fields...

  30. Try Mercurial by achurch · · Score: 1

    I don't know whether you were speaking from experience or just making a general comment, but have you tried looking into Mercurial as an alternative? It's a distributed SCMS, meaning everybody commits to their own copy of the repository and then pushes those commits to a central repository (if you go with a CVS/SVN-like centralized setup). The Mercurial interface is designed to work more or less like CVS and Subversion, and it uses patchsets and repository-wide versioning like Subversion, but it has this nifty command called "rollback" that lets you undo your most recent commit, provided you haven't pushed the commit anywhere else yet. I switched a 200k-line project over from CVS recently--avoiding Subversion for exactly the reason you give--and it's worked fine for me so far; I even stopped mirroring my commits back to the old CVS repository because it was so much easier to roll back accidental commits in Mercurial. Being able to commit individual changes when I'm on the road without a net connection, rather than saving them all for when I get home and trying to separate out the changes afterward, is a nice bonus as well. (And I have to admit, I like how Mercurial names its "annotate" command "annotate" rather than Subversion's immature-sounding "blame", though admittedly not all the documentation is up to quite the same standard.)

    That said, Mercurial's toolset isn't nearly as full-fledged as Subversion's. In particular, there doesn't seem to be an explicit equivalent to Subversion's dump/load process, so if you want to obliterate a commit other than the last one you're pretty much out of luck (though it might work to hg export everything but the problem patch and then hg import to an empty repository). You also have to deal with the fact that "revision numbers" are no longer constant except within a single copy of the repository, and you have to refer to hexadecimal node names if you want to talk about a specific patchset with anyone else. For my project, I treat the revision numbers of the central repository as canonical, and when building the project, I include the node name as part of the build ID when building from any other repository.

    1. Re:Try Mercurial by remmelt · · Score: 1

      I've not had a chance using Mercurial, so I can't judge its merits.

      One of the most important pros for svn is that it has very decent tools and support. Built in in most IDEs, tortoisesvn, stuff like that. I've had a look and Mercurial does have plugins for the IDEs I use.

      About blame:
      svn help blame
      blame (praise, annotate, ann) [...]

      It's just an alias. If you want, you can praise! How is that for positive! Or ann, or annotate, if you're not into the brevity thing.

  31. One Simple Thing by Anonymous Coward · · Score: 0

    A comment about your code is not a comment about you.

    That's the difference between being a functional team member and a prima donna.

  32. white papers @ www.perforce.com by croftj · · Score: 1

    You may want to look at the docs at perforce.com. They have a lot of good ideas on tracking and such.

    I found the biggest trick for a CM system, is in integrating changes from one line to the next. CVS sucks at this. I don't know about SVN. Perforce does okay, has some wrinkles, but overall, it's not to bad.

    Linux had a real good Youtube video at google on Git. Similar ideas, different tool and a different way to handle the branches.

      For reference, when I'm speeking of branches, I mean, Bod and Sally are working on adding 'Feature A' to a system (some set of programs) while Fred and Jack are fixing various bugs. There would be two or three branches where the people work. Once the changes are made, they need to be integrated together. If you have strong communications (namely you like each other) merging the changes together can be down right easy or at least no to horrific depending on the overlap of the changes. In any case, this is where a good SCM tool shines.

    --
    -- Many men would appreciate a woman's mind more if they could fondle it
  33. Move to git by Anonymous Coward · · Score: 2, Insightful

    If that is what you are after use git.

    In general changing history is bad as it messes up
    everyone who is working on that history. However
    if you have to it is trivial in git to create a new branch without the bad commit and go from there.

    That also matches the core simplicity argument. At it's base git is very simple, and easy to use,
    and you don't even need to go to an administrator
    to do all of these things, just to the guy who has
    access to whos repository the changes are in.

    Eric

  34. Perhaps... by PostPhil · · Score: 1
  35. Lurk on the Subversion Dev Mailing List by belrick · · Score: 1

    I've lurked on their mailing list and I have to say I'm really impressed by the maturity of the group of developers that participate. What is really amazing is watching a new developer join and then be gently introduced into the culture of the list. That culture is polite, inclusive an respectful.

    Most people soon learn the culture and participate, and the few that don't soon leave on their own accord. I think everyone who stays enjoys developing in that culture.

    You may also be interested in this talk by a couple of the long-time contributers:
    http://www.youtube.com/watch?v=ZSFDm3UYkeE

  36. document what you do! by BarfooTheSecond · · Score: 1

    Put comments in your code! Don't be shy in the description of what you made/changed when you check in SVN. Include bug numbers. Provide accurate and detailed bug descriptions in your bug-tracking system, don't presume the others (or even yourself later) know what you have in mind.

    Don't hide things you're not proud of: if you've made a stupid bug, well enter a new record in your bug-tracking system and then a honest check-in with the fix.....

    Take the opportunity of being more than one to review each other code. Discuss.

    Try to separate the tasks so that you don't have to work on the same source files at the same time. Don't keep the modified files for too long in your workspace, do frequent check-ins.
    A good analysis will help making the project more modular and incidentally stronger.

    btw: my own pair programming experiences were fruitful: motivating and funny, brainstorming was generating original ideas and of course many bugs were detected immediately...
    Though I think this wouldn't be sustainable for a long project.

  37. Erich Gamma's answer to your question is Jazz by Anonymous Coward · · Score: 0

    Use Jazz. It's Eclipse IDE with integrated team features such as bug tracking, source control, planning and reports. Erich Gamma architected that product to make it easy to grow a project from one developer to a small team to a big team to many teams etc.

    Jazz Tutorial

    I've seen the demos at EclipseCon and my team uses the recently shipped 1.0 version. I don't want to return to separate IDE/cvs/bugzilla. Jazz Team Concert Client just makes it easy to find what my team members are working on, what has been done, what is in the build etc.

    Good luck! Try different products and reexamine how your team works after every milestone or release. Team work is always to reinvent.

  38. Stop using Subversion by Omnifarious · · Score: 1

    You're going to eventually anyway. It's slow, the model is seriously constraining, and it has a bunch of extra features that really aren't all that useful.

    Consider using something like Mercurial (my favorite) or git instead. They are much better suited for collaborative development, especially if the teams are loosely coupled.

  39. Enough... by appelza · · Score: 1

    Other than having some subversion, and maybe weekly meetings, I suggest that small teams should go as they go, and adding more procedure will only make things go slower.

  40. Re:svn blame by achurch · · Score: 1

    About blame:
    svn help blame
    blame (praise, annotate, ann) [...]

    It's just an alias. If you want, you can praise! How is that for positive! Or ann, or annotate, if you're not into the brevity thing.

    I'm aware of that, which is why I tacked that part on as a parenthetical comment. It wouldn't have a significant effect on my choice of SCMS, but if I did end up using Subversion, it would probably contribute a bit of extra stress from annoyance every time I happened across text (like "svn help") showing the "blame" command. (FWIW, Mercurial has the "blame" alias as well, but at least hides it from the "hg help" command list.) It's probably just me, but I prefer my tools to be neutral, direct and to the point, without extra cuteness.

  41. Re:svn blame by remmelt · · Score: 1

    I understand what you mean. I just know that I hardly ever use this command so it gets moved all the way back to the long storage part of the brain. Then, when I need to do an annotate, it's typically because I want to know who did that awful awful thing... so blame is exactly what I want to do (this sounds way more tightly wound than my real-life version, take with salt where needed) so that's what I remember. The alias to praise is being deliberately cute though.

    Also, it may be that I miss one of the meanings of the word annotate, but is it even descriptive of the command?

  42. Lose the svn by Anonymous Coward · · Score: 0

    http://www.youtube.com/watch?v=4XpnKHJAok8

    enough said

    1. Re:Lose the svn by FormOfActionBanana · · Score: 1

      That is the worst video I have ever watched. At 12 minutes 55 seconds, when Linus says "Now, before I get started..." I had to just kill it there.

      --
      Take off every 'sig' !!
  43. Try XP by posinabox · · Score: 1

    If there are only 2 of you, why don't you Pair Program? Run a Search on Xtreme Programming, I found it to be much more constructive. Maybe you guys can branch off back to coding as individuals after giving it a shot - or after you both feel you are almost at par Skill's wise and in terms of knowledge of what ever field you concentrate on.

  44. You don't have to be an XP zealot, but a lot of XP practices are very well suited to teams of 2-10 programmers.

    Pair programming. I know everyone says they hate it, but a lot of people hate taking their medicine too... Fact is if you are working together on the same piece of code most of the time, you don't NEED a lot of other avenues of communication when you have a 2 person team.

    My group develops fairly large and complex financial apps. Yet we maintain a small team and often have people from other organizations working on specific modules, so communication can sometimes be an issue. We've found that there are plenty of OSS apps that can be helpful to use, but the PROCESS has to drive application use, you can't build a good process around a tool.

    To outline what we do. First of all I'm not a real big fan of coding standards. At least not the garden variety "you must format your source like XYZ" sort. In any case no one coder should "own" a particular piece of code, so if everyone works on each thing some of the time a "consensus style" will develop pretty quickly. In any case bad practices will get outed during code reviews pretty quickly and my feeling is that a couple rounds of "that's ugly and we don't want to do things that way" followed by a bit of refactoring which ends up with much nicer code will educate people a lot better than just a flat "you may not do XYZ", which doesn't really get into people's heads WHY they should do or not do certain things.

    We do all our team communications via TWiki. All system documentation, javadocs, source jars, etc are there, as well as whatever amount of ancillary documentation any particular module or project needs. Its simple enough to use and there are plenty of plugins available for particular needs. If something can't be done directly in TWiki, then at least you can attach a file to a topic and that way people can get it and do what they need with it.

    I'm not sure why you say SVN doesn't document team processes very well. The SVN book certainly gives you all the info you need to understand how to do specific things. Again we document revision control procedures on the wiki and there are some standard perl scripts to consistently do common operations (branch, tag, merge, etc) which makes it simple for coders to do these things. The SVN support in Eclipse is good too and generally the team features let you deal with whatever comes up.

    Continuous integration is of course a great thing. Frankly I found most of the existing tools to be inflexible, overly complex, and hard to maintain. We have master build scripts written using our own build framework in perl. A simple cron job will do a master build and post the results to a section of the wiki, along with test results, dependency, test coverage analysis, etc.

    95% of the work in my experience was just perfecting the process itself. Specific tools are secondary. As things became desirable or necessary to do, we just found a tool that would do that thing and made it fit in with our process. If it wasn't flexible enough, we went on to another one that was.

    In the end we're pretty much just using Eclipse, SVN, TWiki, Cobertura, perl, and bugzilla.

    --
    "Malo periculosam, libertatem quam quietam servitutem." -- Jefferson
  45. There is a book by neuromancer23 · · Score: 0

    It's called extreme programming explained by kent beck.

  46. Re:svn blame by achurch · · Score: 1

    To annotate = to add notes to, so yes, it's a pretty accurate description (at least for Mercurial, where it prepends each line with the last revision in which that line was changed—I've never tried it in Subversion, so I'm not sure how it works there).

  47. Re:svn blame by remmelt · · Score: 1

    Oh, right. That does make sense. svn does the same.

    I was thinking about how you can't see the commit message with blame/annotate, so that's the annotation you miss... But I get it now.

  48. improve communication by Corporate+Gadfly · · Score: 1

    1. Use trac as a repo browser.
    2. Set up CVSspam for receiving commit notifications via email. Upon receiving those emails, then you can take action if the code affected happens to belong to your area of expertise (or if you have ideas to implement the code better or if you spot mistakes, etc.)

    trac is a life-saver when you're tracking down code changes.

    --
    Corporate Gadfly
    Jonathan Archer: the most beaten up Enterprise captain in Star Trek history
  49. Simple wisdom on teams by Ouija · · Score: 1

    I think the key to small development teams is a good mix of skills and a gelled, stable team.

    "Best Practices" go in and out of vogue. Use the techniques that work well for you. Experiment with new things. This is a field still in its infancy- so be willing to spend time enriching yourselves.

    Monitor your success in terms of code maintainability and developer/customer relations.

    Do that, and you'll have the team you want.

    --

    -Ouija- poke 53280,11:poke 53281,12
  50. most important thing by gzuckier · · Score: 1

    do not become romantically involved with each other.

    --
    Star Trek transporters are just 3d printers.
    1. Re:most important thing by Hasmanean · · Score: 1

      correction: most important thing: DO become romantically involved with each other.

      Every natural system has a yin and a yang, or a female and a male aspect to it. Software can be developed the same way, with one programmer writing the code, and the second programmer writing the test system. The code should be performance driven and robust, while the test system should be passive and sensitive towards monitoring the behaviour and performance of the program.

      Nowadays test code gets about as much respect as housekeeping, but test code is just about the best way to *ensure* good quality software, along with code reviews. It's also a good way to understand the system from the user's perspective, while keeping oneself grounded in the nuts-and-bolts reality of the product.

      The two types of software can be written with 2 entirely different methodologies. Production code can be written in procedural languages like C++ to be fast, efficient, and might want to choose performance over flexibility. Test code can be written in logic-based languages, which are flexible but have huge memory requirements and unbounded run-time performance.... The latter should not be a problem while running tests in batch mode.

      Test code has to capture the "logical" structure of the program, model the complete set of requirements, can be run in batch mode in non-realtime (so it can be inefficient) and has to be modified often as requirements change. It must allow logical requirements to be expressed in an obvious way, explicitly (rather than implicitly--which is the way things work out when you use C to write test code.) It can also be throwaway code, which never has to ship although it can be maintained in-house, and never needs to see the light of day.

      All the logic based languages which CS professors love but rarely ever used in the real-world, could then find a place as metalanguages for test systems.

      --
      Hasan
  51. Continuous Integration by Anonymous Coward · · Score: 0

    Continuous Integration FTW!!!

    http://martinfowler.com/articles/continuousIntegration.html

  52. Code Reuse/Libraries? by Lodragandraoidh · · Score: 1

    With multiple developers are you thinking in terms of code reuse/sharing? Or, are you basically compartmentalized in your own little development worlds?

    If you work compartmentalized you run the risk of reinventing the wheel - that is, reimplementing what your partner(s) have already built.

    Periodically you should get together with your team and talk about general purpose libraries that you have created, or see a need to create - and get everyone's buy-in on using, improving, and some standards around their location.

    The APIs of your libraries should be very well documented - so your partners can use them easily for their parts of the project.

    That being said, I am still trying to get my pardner to use the libraries I've created, and to put his own code for problems he has solved into it. To be successful you either need buy-in or the authority to set policy in this regard.

    --

    Lodragan Draoidh
    The more you explain it, the more I don't understand it. - Mark Twain
  53. You've got the time, do you also have the money ? by Ihlosi · · Score: 1
    I have the time to change it into what they wanted

    Yes, on your nickel. Good luck running a business that way.

    If you want to stay in business, you need the cya paper, and preferably a contract stating how much additional changes to the project will cost ("lots" is a good starting point, to discourage never-ending projects).

  54. Look what others have done by Anonymous Coward · · Score: 0

    For example drupal

    And while you are at it, you may also look at their product. Wheel reinvention is not a good thing.

  55. dev team? You guys must be really smart... by fishexe · · Score: 1

    ...because the dev team thinks of EVERYTHING!

    I run a small dev team for a company of 12 people....

    --
    "I don't care about the Constitution!" --Bill O'Reilly, November 17, 2009