Internal Software Development
Late last year here at work, we managed to push through a restructure of our software development staff so that they all come under me and work as one team. When I say, "all", technically there are four coders including me, so it's not a huge team.
The reasoning behind the formation of the team is pretty simple: We don't know each other's code. When a program failed for whatever reason, it usually fell on one person to fix it, and that person had to be the guy who wrote the code. Nobody else would even know where to start looking to get the program up and running again. The situation was untenable, and this became painfully obvious when, over the course of last year, three of our developers decided to move on, leaving a lot of legacy systems behind.
So as a team, we have to collaborate. More than one person knows about any given system, so there's some redundancy built into the support of the system once it has shipped. As much as possible I'm trying to run the team as if we were a third-party contracting team - taking on a few projects at a time and seeing them through to completion, using TDD and agile methodologies (which we're learning as we go).
A lot of people have written about the differences between internal software development and commercial development. In some ways it's easier, because you can introduce dependencies on software that you know exists in the target environment. For example, you can point to a known server and don't need to allow users to configure their connection strings, or provide functionality that depends on Excel being installed. That sort of thing. However, in a lot of ways it's a lot more frustrating to be part of an internal development team, because the pressure is always on shipping quick-and-dirty code rather than polished, maintainable code. Users want things done yesterday.
I've found that with a bit of politicking it's possible to convince users that "quick and dirty" isn't the answer. Most people are quite reasonable and understand that writing maintainable ("healthful" as Scott Bellware would say) software takes time and effort, and it's well worth it. There is, however, still one big difference between commercial and internal development: The ability to turn work down.
It's a good problem to have if you're a commercial software house: Too much work. If all your guys are swamped to the point where any new projects will just have them thrashing and never completing anything, you have little choice but to turn back new clients. You knuckle down and clear out the jobs at hand and then go back to them to see if the work is still there. Perhaps you tell them when they first approach you that you're happy to take their business but won't get to it for a few months.
In an internal software development team, though, turning back work is just not an option. None of the seemingly-endless stream of middle-managers will accept that you're too busy to work on their problem. Worse still, even the most trivial of applications are number one priority to the person who asked for them, and they often have no idea what goes on beyond their desk, so the truly important projects are meaningless to them.
Over the past few weeks I've seen this attitude come to a fore, and it's getting quite stressful. We have quite a bit of work to do, but every time we feel like we're making any headway on a project, two more projects appear out of nowhere. It's like fighting a hydra.
Of course, the up side to this is that I get paid every week whether it's busy or not, along with all the benefits of full-time employment. Perhaps the stress of not being allowed to say "no" is a small price to pay.
Comments
# Andrew Tobin
25/06/2008 9:33 AM
If it helps, you say "no" to me all the time.
The problem is, we need to get everyone re-neducated - Like we've talked about in the past week or two, they feel like overnight they've lost their development staff because they don't have someone permanantly onsite working on their projects 100% of the time.
That attitude has to change.
Make it so!
# Vj
25/06/2008 11:32 AM
Hang a list of projects you guys are working on, with their expected release date on your office door (or your SharePoint site) to discourage middle managers from thinking their project is the most important!
Event better setup a process for requesting projects from the IT department. Let the top manager decide on projects to pick (Ask someone else to make the business decisions)!
Working for client projects sucks too. I have to time all the work I do so we can invoice the client.
I don't feel like I take ownership of the work at all. The team leader manages our time and we could be thrown at any project or multiple projects anytime or taken off it anytime.
They keep me busy though! Seems like time runs quick.
# Poo
25/06/2008 9:39 PM
Vijay's on the money, who you doing Vij?
I struck the same thing at the mill, started stressing myself out having to sort all the middle managers requests out.
The solution was to go over their heads and give the list to Peakey with a large black texta, they can't question their order in the list then.
The senior management get paid to worry about the direction of the company, we're just a tool they can use to help with that direction.
With that I do try and share the IT love around by doing at least one half decent job for each department within a given year.