tags:

views:

218

answers:

5

I work on a medium/large company that follows what I think are some good practices for development, maybe not the best ones but good enough.

We've some development resource that get implemented on the basis of "do, test, if it useful the use, else throw away". I've found that most of the so called best practices are, sometimes, ideally great but unfeasible or even harmful in real life.

For example, we use to have a dotproject website for our team. The idea was to track tasks, update progress and so on. We used the "do, test, if" with it and the result was... we threw it away and just keep the forum that was extremly useful to communicate between us and keep track of conclusions of meetings and TO DO lists... Tracking each task on the other hand proved to be both time consuming and unrealistic.

Firs of all nobody was doing it, it didn't take a lot of time but developers hated it and make them unhappy because they had to remember updating every task, the estimates for the times of the task proved to be unrealistic most of the time.

So my question is, What development techniques have you tried and found useful/unuseful?

I mean that as in real life, not some theoretical best practice, but as a hands on experience. I'm looking to explore new techniques (or tools or whatever) and I'd like opinions on what to do next. Our current status:

  • Internal issue tracking system (Useful)
  • Semiautomated builds (every developer has to maintain the equivalent of a makefile in order for the system to be able to make them).
  • NO automated testing. Test are performed by a test team. We have integration tests and wide system tests.
  • Two test labs, one for the Test team, the other for the developers (in case they need to perform test that involves more than one machine or to test out of the development machine)
  • No unit testing in general. Some libraries have them but usually the developer test its units as he wants.
  • Full Specification using DOORs.
  • Test protocols. Formal, written in Word.
  • Source control (Clear Case). Usually everything is done in the main branch, whenever we ship a version it gets labeled, if needed a branch is made for fixes to that version.

Note: When you can (if you don't mind :P), could you try to justify your proposal? How and why was it useful? How did improve your work?

A: 

Personally, I'm a very big fan of Automatic Testing (both unit tests and integration tests). In my view it's like a safety net - developers feel safer when changing code when they know there's a test harness that could catch them if the break something. This allows you faster introduction of new features, but also removes the 'fear' of refactoring, for example.

Gadi
+3  A: 

One of the most useful things we introduced was a project Wiki, an extremely useful dumping ground for all the little titbits of information floating around in peoples head but too trivial to record in a full document.

Colin Desmond
While I agree that a project Wiki is a very good idea, I'd like to add that it sometimes has the tendency to become cluttered, with some pages being outdated (at times even just wrong), so from time to time it's probably a good idea to 'refactor' the project wiki as well..
Gadi
A: 

As management for our team: SCRUM

TimW
+1  A: 

Having been involved in all sorts of development teams with different methodologies, my experience is that most of the agile principles tend to work great. It generally makes development more fun, since everyone is more engaged. In the larger development environments the basic principle of co-locating all team members brings great benefits, especially when you have separate information analysts and testers next to developers. Have information analysts, testers and developers work together per feature. This creates the best flow of information, with as little overhead as possible. You can take this even further to a Lean development process.

In general, the things that gave us the greatest benefits were the things that lowered the barriers of communication. In a practical sense, a company wiki helped out a great deal as well, lowering the barrier for sharing information. A good bug/features/RFC tracking tool also helped a great deal to have a joint understanding amongst stakeholders of what direction the project is heading. And such a tracking tool does not just have to be internal: lower the barriers to your customers as well. This also helps a great deal in managing expectations.

I feel I'm just getting started here. Others will no doubt come with more suggestions.

Pascal.

Pascal Lindelauf
+1  A: 

Follow this link... And personally, as a developer I prefer to focus on things that improve my performance. I don't mind checking some bug reporting site to check if new bugs are reported, but I need to be able to view it quickly without having to go through a few dozens of pages or dozens of clicks. I don't mind writing technical designs before writing code either, as long as I have the tools to write it properly. These tools must be created to increase performance with a minimum of fluffy features that no one uses. For example, in the past I've used Enterprise Architect to create UML models before writing code. It worked fine but the application has some flaws and lots of features that I don't need. When I discovered Altoma UModel, I quickly changed to a much leaner tool for UML generation that offered me exactly what I need. Nothing more, nothing less. Basically, you have to keep people focused on the final goal. And the final goal is creating some product to be used by your users. Many development teams get lost because they focus on other things instead. None of your users will care about how you created the thing they use. They just need your project to reach their goals. Thus, the best practice is that which makes your team the most comfortable, including any new team member that would join halfway of any project.

Workshop Alex