from a "managing source code, customer versions & release management" perspective, i'd suggest the following model.
Have a "core" codeline that holds everything that is common across all customers. Branch it once for each customer. as you change the "core" code, merge is across to each customer branch. You'd probably spend 1 person days a week merging core to 10 customer codelines. Depending how active each customers codeline is. Use your CI build server & Local running Nant to verify each merge. The key is to be very careful & explicit in documenting a "How To" for merging between core & all the branches. Remembering to update it as you add customers...etc. OTOMH if i was using subversion for source control i'd setup the repository like this: {-} indicates subfolder /TheProductName -/trunk --/Core <--put vs.net sln files in here ---/Project1 <--folder named same as a vs.net project, .proj file goes in here with the .vb/.cs files too ---/Project2 --/CustomerA <---branched from "Core" ---/Project1 ---/Project2 --/CustomerB <---branched from "Core" ---/Project1 ---/Project2 ---/Project3 <--this is specific to CustomerB -/branches --/Version 0.9 ---/Core ----/Project1 ----/Project2 --/CustomerA ----/Project1 ---/Project2 ---/CustomerB ----/Project1 ----/Project2 ----/Project3 --/Version 0.8 ...etc Your weekly merge cycle would look like: Merge /branches/Version 0.8 into /branches/Version 0.9 <-- this puts the 0.8 bugfixes into Version 0.9 Merge /branches/Version 0.9 into trunk <-- this puts the 0.9 bugfixes into the current codeline. Merge trunk/Core into CustomerA Merge trunk/Core into CustomerB Merge trunk/Core into CustomerC Merge trunk/Core into CustomerD You'll need a build server to help automate the per-customer builds just to save "hands-on" time...we've had good luck here with CruiseControl.Net. We spent time setting it up so we can do "One Click" full customer release & packaging of a build. We have 5 or 6 "builds" available at any given point in time, it takes about 0.5-1 person day per month to manage it, tweak the configurations and setup & configure new buidls as needed. We typically push new releases to customers every 6 weeks. You could also consider using compiler constants, so you have one codebase but depending on the switches you pass to the compiler you get the customer specific builds out of it. I feel this is harder to manage, code gets "messier" and harder to read, the developer has to remember more... but you'd end up with code line this:(air code) Sub Button1_Click_Handler #CustomerA msgbox("hello Customer A") #EndCustomerA #CustomerB msgbox("hello Customer B") #EndCustomerB End Sub compiling with vbc.exe /CustomerA would give you CustomerA's product. the VS IDE has a UI to set these up. If a specific customer has so many changes that you need fundamental product changes, and it is overwhelming to manage the "diffs" from the "core" codeline. Charge them a large one-time-fee for "code branching", and have a completely separate codeline for them. Continue to bill them as normal for each change request. The large fee makes the customer think hard about how much they really want all the customizations, it also means that once they pay it, they have committed to you. For example if you product costs $400, i'd suggest charging around $2500 for a completely customized version, but that should include allowing that customer to get the source code too. (monthly zipfiles on a website should be enough). Not sure if this is the info you are looking for, this post is more about the day to day mechanics of juggling that many lines of code...were you looking for other info about how to handle customers?, tracking bugs per product line?..etc? More info about the size of your product, what industry it targets and general customer info would help us to give more help here. Do you sell to large corporations with big budgets, or small mom & pop stores? -----Original Message----- From: Discussion of advanced .NET topics. [mailto:[EMAIL PROTECTED] Behalf Of Paul Cowan Sent: Wednesday, September 05, 2007 10:45 AM To: ADVANCED-DOTNET@DISCUSS.DEVELOP.COM Subject: [ADVANCED-DOTNET] code stream versions Hi, We are running into an increasing problem with our product which I could really do with some advice from someone of an experienced nature who has possibly come across this problem before. The problem is this: We have a core product that 10 customers have bought. The problem is, each one of these customers has made changes that customise the product to their own need and has required meant that we have 10 branches of the code. As we get more customers then this will mean more branches of the code. Can anyone give me any advice of what is good practice for this type of problem? Thanks Paul [EMAIL PROTECTED] _________________________________________________________________ 100’s of Music vouchers to be won with MSN Music https://www.musicmashup.co.uk =================================== This list is hosted by DevelopMentor® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com =================================== This list is hosted by DevelopMentor® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com