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 am a project manager at my company. I work with a few teams of developers using a standard, well-known version control system known as CVS. I'd like to see continuous integration and automated builds implemented to help prevent problems with the build breaking and with bad deployments sneaking onto the production servers.

I am sure I can set this up myself, but I don't want to do this myself for two reasons:

  1. I don't have time for it. I have my own responsibilities, which involve marketing, communication to other stakeholders with team members not part of development, communicating with customers, and project planning.

  2. Most importantly, I'm the project manager. My purpose is to provide leadership, not to micro-manage the development team.

What are some things that I can do to find someone on the development team who would be passionate about setting this up? Is a developer the right person for this task, considering it requires knowledge of Java, Spring, and Google App Engine? What are some tips for helping to promote change where change is feared?

share|improve this question
6  
It's news to me that the role of project manager is to provide leadership. –  Yuriy Zubarev Mar 21 '11 at 5:52
    
That list of knowledge requirements at the end, all things developers may or may not have, and non-developers certainly wouldn't. Depends on yours. –  Orbling Mar 21 '11 at 6:07
3  
almost -1 for still using CVS. –  Johannes Rudolph Mar 21 '11 at 15:49
    
@Johannes - If it were up to me, we wouldn't be. In fact, I have a SVN repository setup that I've been using. –  jmort253 Mar 22 '11 at 2:24
1  
As much as CVS is old technology (and far from my favorite) it does still work and a lot of places still use it. And if it is doing the job you need it to leaving it in place can make sense. We use it at our office, and it gets the job done. –  Zachary K Mar 28 '11 at 6:15
show 1 more comment

6 Answers 6

up vote 14 down vote accepted

I'd first research some possibilities. For instance, Hudson is a rather popular continuous integration server and is extremely flexible. You could e-mail your dev team with something like this:

I'd like to introduce a continuous integration tool so that toxic revisions surface much sooner than later. I've looked at [hudson, acme CIS, foo] and all of them look like they would work. Given the fact that we're using CVS with [ list caveats here ], I'm looking for recommendations and I'll live with whatever the team decides.

Dave, please take charge of getting a consensus and getting this up and running. Team - please have your input to Dave by the end of the day Thursday so we can test this on Friday.

Please send me my credentials once we have something established.

This approach has the following benefits:

  • You are delegating, not dumping
  • People know you have done some research, the quality of the stuff you point out helps to define your expectations for the quality of the tool implemented
  • You are aware of [ caveats ], let's not get derailed discussing them unless they really are deal breakers for the task at hand
  • You allow a bit of democracy. Sure, you'll login to see if anything broke, but the people who have to deal with a CIS will be the ones to chose the platform.

In my mock scenario, Dave was selected because he has the least on his plate and would probably have no problem setting up a new server. Depending on the work load, Dave might just have to be you. That's so subjective that I simply mention it. You can't always say not my job to do that especially if you are the only one who has time to do it. If everyone is already pulling over time, their perception of your willingness to help becomes more important. Gauging that is a skill you develop over time.

In any event, you'll either have a CIS server by Friday, or details on why that just isn't possible without an extra set of hands.

share|improve this answer
2  
Thanks for the input and advice. I wasn't trying to pull the not my job card to get out of working, but because it's easy for project managers to sometimes get too involved in what the development team is doing. By delegating this to development, I give them the control and reigns. Also, if they take charge of setting this up, they'll more likely use it, whereas if I set it up, I'll get a nice learning experience of how to setup continuous integration but with no ROI and the opportunity cost of giving up on my other tasks. Also, the sample email is very helpful :) +1 –  jmort253 Mar 21 '11 at 6:41
    
@jmort253 - Yes, I know you aren't avoiding work. I'll update for clarity. –  Tim Post Mar 21 '11 at 6:42
2  
+1 for involving the team, and letting them make the technical decisions. That is key to get them accept and use the new system. –  Péter Török Mar 21 '11 at 8:33
add comment

I see it going three possible ways :

  1. Have someone in the dev team come up with a quick assessment of possible tools and have him whip up something quickly. If your individual projects have proper build scripts in place (ie you can build the projects outside the IDE) then it should be fairly quick to hook them to the CI.

  2. Treat the build infrastructure as an internal project within your team and manage it as such. A bit more involved than the first point but if done right you will get a better system. Also spreading the knowledge over the team will reduce the risk of over-specialization mentioned below. You also gain the benefits of peer-review. However some programmers may perceive this task as demeaning and as such may not spend as much though into it as they should.

  3. Hire a dev as build master and have him setup all the tools. Then continue to use him to improve the system, add metrics, automated doc generation, automated testing etc. This is more costly but if done right the investments in this person will pay-up very quickly by increasing the efficiency of your dev team. This person should be proficient with the languages and frameworks use by your team and have a desire to glue them in a system. On the other hand (from comments) this may not be within your budget and creating a specialized position could lead to under documented solution that can make transitions difficult.

This said, before starting anything be sure what you really want out of it. Your question lacks a bit details to direct you in the right technical direction. You need to know what gains you wish to achieve in using such tools, you need a general vision of the desired system. One can go a long way in creating an environment that ties it all up but without a master plan to build against you can also run circles and make things more complicated than what they are already.

A manager I once had said that tools are good but without a process they are useless. I only wish he would have followed up on that he said when time came to put these in place...

So, if you decide to hire someone, there are definite advantages in getting a programmer rather than someone with a more ITish background. Main point is that this person can spend some time and energy in creating the glue code and plugins that will integrate the different systems together in a coherent system.

Hope this helped

share|improve this answer
1  
@Newtopian - This does help. Especially the part about having a plan before blindly trying to implement something. Thank you. +1 –  jmort253 Mar 21 '11 at 6:18
1  
+1 Pretty sound advice. One addition, whatever platform you are working on, if one of your team members is a major Linux-head or any of the other OS's out there that often have developer users making use of build scripts, they may be excited about the project. –  Garet Claborn Mar 21 '11 at 9:22
    
+1 for 3) every software team should have a dedicated build manager these days –  Sean Patrick Floyd Mar 21 '11 at 10:54
    
I disagree with the build manager idea. Putting the onus on the developers for the maintenance expands their understanding about how certain changes impact the system. –  dietbuddha Mar 21 '11 at 20:47
    
@Sean - Plus, smaller companies can't necessarily justify the cost of a dedicated build manager. –  jmort253 Mar 22 '11 at 2:25
show 5 more comments

If you have a leadership role it is your job to identify missing components/practices and your responsibility to see it implemented correctly. The task of implementation can be delegated or not, but ultimately it is the leaders responsibility.

The key to acceptance is understanding, or at least giving you the benefit of the doubt. You can talk through what you want to do and bring up the costs and benefits. If the discussion doesn't bring about understanding you can rely on their trust in your decisions, but only if you've built up that kind of repoire.

If your delegating do to time constraints of expertise bring it up during a stand up or team meeting and ask for a volunteer. If no one is forth coming simply assign it as you would any other piece of work.

update:

There is an organizational structure within every company. A leadership role has responsibility for the resources at that level. They also have the responsibility to point out and address any problems. They may need additional resources and/or suggestion at which point you go up the chain. If you can deal with the issue you have the option of implementing a solution yourself or delegating. This can and should involve the people it will affect directly, ideally in collaboration with them.

I can't say that director level and above positions shouldn't ever be directly responsible for a particular person or group in a company. It really depends on the companies organizational structure. I have worked at start-ups where the CTO was directly responsible for developers and testers. In a more traditional larger company management at that level wouldn't have the required visibility or familiarity required to make appropriate decisions at those lower levels.

share|improve this answer
    
Suppose you are a leader of other leaders? Is it the CEO's responsibility to identify that a junior Java developer on a project team needs extra training? –  jmort253 Mar 28 '11 at 3:16
    
@jmort253 The short answer is maybe, but it depends on the organizational structure of the company. If the companys structure is flat and small, than it may be the CEOs responsibility to make sure the developers get training. Indeed, I have worked at numerous startups where VPs have direct reports that were not managers. –  dietbuddha Mar 28 '11 at 5:47
add comment

I'm mostly a developer, and I set it up when I can (namely when I'm not expressly forbidden from doing so). Generally, since the places I work at are .NET shops, I pick CruiseControl.NET because it is open source, works with most major source control systems and relatively easy to use. I've always wanted to set up an Ambient Orb as one of the outputs, but that's usually out of my control.

Bring it up in a meeting to first see if anyone has the desire to do so - as long as it doesn't impact the projects they're currently working on.

At my current place (one of the national labs), we've got it set up just to make the builds in a consistent manner so that folks who want to see what we're doing are able to obtain a runnable version at any time. They don't want unit tests (the project manager's impression is that the effort we put into the unit tests could have been put into porting the project to .NET).

At my previous place, the intent was to make builds standard and consistent across products. Far too many products could only be build on one special computer (in one product's case, involving a 3rd party control with aggressive DRM who had long ago gone out of business, we had to keep one machine alive for about 5 years after the developer quit because his was the only one that could build this now-replaced commercially shipping product). Furthermore, the installs could only be made by one person who was a morning person - so if you needed a build after about 3pm, you waited until the next day.

Is a developer the right person for this task, considering it requires knowledge of Java, Spring, and Google App Engine?

It depends. If you have some QA person who is decent at scripting, ask first before assigning them to it.

Setting it up to begin with is not a complicated task. It should not take more than a couple days to set up (mostly in a corporate environment, the hassles are getting an account to run things on with all the permissions required) and get running.

share|improve this answer
add comment

Try setting it up from a different direction - when there is a problem in the production environment put the onus on the dev team to fix it and fix it fast. Then introduce the idea of a simple nightly build that compiles from the latest code, version stamp etc. If it fails to build it will not be promoted.

I think the build script should be owned by development. When they modify the dependencies or make changes they are the best ones to know how to update the scripts. And tell them that if project management owns it you will just call them into a meeting when ever there is a problem.

share|improve this answer
add comment

You could just say at your next teem meeting, "OK I think we should do this because of . Who can implement it" I give you better than even odds someone will say "Sure I'll do it". then you don't have to have a fight about it.

share|improve this answer
add comment

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.