Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I'm in the first month of work in a new company.. and after I met the two programmer's and asked how things are organized in terms of projects inside the company, they simply shrug their shoulders, and said that nothing is organized.. I think my jaw hit the ground that same time.. ( I know some, of you think I should quit, but I'm on a privileged position, I'm the most experienced there, so there's room for me to grow inside the company, and I'm taking the high road )..

So I talked to the IT guy, and one of the programmers, and maybe this week I'm going to get a server all to myself to start organizing things.

I've used various architectures in my previous work experiences, on one I was developing in a server on the network ( no source control of course ).. another experience I had was developing in my local computer, with no server on the network, just source control.

And at home, I have a mix of the two, everything I code is on a server on the network, and I have those folders under source control, and I also have a no-ip account configured on that server so I can access it everywhere and I can show the clients anything.

For me I think this last solution ( the one I have at home ) is the best:

  • Network server with WAMP stack.
  • The server as a public IP so we can access it by domain name. And use subdomains for each project.
  • Everybody works directly on the network server.

I think the problem arises, when two or more people want to work on the same project, in this case the only way to do this is by using source control and local repositories, this is great, but I think this turns development a lot more complicated. In the example I gave, to make a change to the code, I would simply need to open the file in my favorite editor, make the change, alter the database, check in the changes into source control and presto all done.

Using local repositories, I would have to get the latest version, run the scripts on the local database to update it, alter the file, alter the database, check in the changes to the network server, update the database on the network server, see if everything is running well on the network server, and presto all done, to me this seems overcomplicated for a change on a simple php page. I could share the database for the local development and for the network server, that sure would help.

Maybe the best way to do this is just simply:

  • Network server with WAMP stack ( test server so to speak ), public server accessible trough the web.
  • WAMP stack on every developer computer ( minus the database )
  • We develop locally, test, then check in the changes into the server test and presto.

What do you think? Maybe I should start doing this at home..

Thanks and best regards...

Edit: I'm sorry I made a mistake and switched WAMP with LAMP, sorry about that..

share|improve this question
    
What type of application are you developing. –  Pemdas Jan 4 '11 at 2:50
    
Pemdas, mostly websites and a few custom applications.. Thanks.. –  Tio Jan 4 '11 at 8:37

2 Answers 2

up vote 1 down vote accepted

What you are missing is the continuous integration server -- that is the brains of the operation that makes it possible for the developers to work locally, commit changes and then pull everything together for qa without human intervention.

share|improve this answer
    
Hy Wyatt, from what I've read in about half an hour that would make a lot of sense.. the CI server would do the merges between the local repository's and the test server, but I simply don't have the time to study a CI server, and learn how to manage it, etc etc.. and for 3 people, that seems a lot.. –  Tio Jan 4 '11 at 21:40
    
I've used CI servers for teams of one -- they help keep you honest. Anyhow, check out teamcity for a nearly zero pain way to get setup. –  Wyatt Barnett Jan 5 '11 at 1:01
    
I will look at teamcity just in case.. Thanks... –  Tio Jan 5 '11 at 9:09

Trust me, you don't want to be developing straight off the server.

I'm in the process of moving our development strategy from something rather similar to what you describe to something that causes me significantly less stress (since I double as the system administrator). A key part of this is Vagrant, a nifty little tool that makes it easy to distribute base virtual machines and then spawn up new copies of those at will. The plan is to have a clone of the server built in a vm; when testing new features, etc., developers can test on that, rather than the server itself, preventing conflicts and unexpected downtimes.

As I make changes to the server, I'll make the same changes to the base vm image, and I think developers will rsync their copy with that (to avoid having to redownload the whole thing). This isn't quite in place yet, so I can't vouch for this being the best method.

I find using a distributed VCS (git in particular) to be quite helpful. There are a bunch of cool things that I've gotten rather used to (git-stash, for instance), but as far as working with other people, the functionality to email a patch to someone else is really quite nice; if you have direct access to their machine, you can pull straight from it, which is even better. This allows me to easily look at another dev's changes without him committing them to our canonical repository, which I'd prefer to keep stable.

Using something like Fabric eliminates most of the pain with "log in to the server, update code, restart Apache" and that sort of thing.

share|improve this answer
    
Hi Xiong.. I'm very sorry but I've mafe a mistake... The stack is WAMP and not LAMP.. Sorry once again.. –  Tio Jan 4 '11 at 8:16
    
Hmm, well, at least parts of my answer may still be applicable. You can't use Vagrant with Windows hosts, but you could still configure a vm to distribute, although having one shared development server might be a better idea, as long as you're careful. I'm unfortunately unfamiliar with administrating Windows machines, so I have no idea how you would go about writing scripts to remotely administrate them. –  Xiong Chiamiov Jan 4 '11 at 19:59
    
configuring a vm to distribute would be very time consuming, I don't have any idea on how to automate the spanning of various VM's.. seems too much trouble for a small gain ( I guess ).. I'm going to propose tomorrow to the team, that we have a test server, and develop locally with daily commits to prevent massive merges, this way I can prevent major problems on the merges, and the process is kind of simple.. I try to be pragmatic person... thanks once again.. –  Tio Jan 4 '11 at 21:50
    
The two most popular solutions I've seen are Chef ( opscode.com/chef ) and Puppet ( puppetlabs.com ), but neither supports Windows currently (although Puppet will in the future). –  Xiong Chiamiov Jan 5 '11 at 2:16

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.