Game Development In a Post-Agile World 149
An anonymous reader writes "Many games developers have been pursuing agile development, and we are now beginning to witness the debris and chaos it has caused. While there have been some successes, there have also been many casualties. As the industry at large is moving away from the phantasmagoria of Agile, Gwaredd Mountain, Technical Director at Climax Studios, looks at Post-Agile and what this might mean for the games industry."
Not sure how Agile helps game development (Score:4, Insightful)
When I think of game development, I think of milestones. I think of (relatively) set targets. This is more true for console games than PC game, but lately when I think of games I think console first.
Iterative style development? Maybe that might work for an MMO where the customers don't mind being permanent beta testers. The gap in QA between professional and game software development already feels pretty vast, but add to that yet another style that promotes a more aggressive, less strict regimen of development just sounds like a recipe of disaster.
I'm not sure when Agile became the silver bullet buzzword for programming. I have participated in it, attended Ken Schwaber's talks on managing scrums. I can see its positives and negatives, and it's difficult for me to see how game software development could benefit from being agile unless you're coming up with the next big project with a bunch of friends in your 'garage'. Designing your own game engine and concepts from the ground up where nearly every member of your team is a software architect level and the lightweight methods help. Otherwise if you're a code jockey working on a pre-existing engine then project management and deadlines are likely more effective.
And try pairing up agile software development with offshoring. It reminds me of the old "don't do drugs" commercials with the eggs.
*holds up an egg* this is your software development
*cracks egg* this is going agile
*opens egg over stove* this is agile offshoring
*ignores the fact that there is no pan to catch the egg* any questions?
Re:Conclusions (Score:4, Insightful)
That should be pretty much method-independent.
When to use "agile" methods. (Score:5, Insightful)
"Agile" methodologies are most appropriate when the project consists of a large number of loosely coupled user-oriented features with no major architectural or technical innovations. Like PHP-based web sites. Or, in fact, much programming which involves using an existing "framework". Someone else has already figured out what the different parts of the system need to say to each other and roughly how they will say it. Development is mostly filling in the blanks.
Trying to use "agile" on a hard, tightly-coupled problem with no predefined structural framework, like an optimizing compiler or a database engine, is likely to result in a disaster.
A game can fall into either category. If the game requires new technology, especially something hard, (advanced AI, a new physics engine, a very large seamless world, etc.) a very front-end design-driven approach may be necessary. On the other hand, if most of the game consists of developing content for different areas of the game world, an "agile" methodology could work fine. Second Life is probably the most extreme example of this.
It's interesting to note that movie-making has become very much a waterfall model business. A few decades ago, moviemaking was much more "agile", and most directors came from a theatrical background. For a theatrical director, there's a debugging phase involving actors on a bare stage, and the content may change considerably during development. Big-budget moviemaking today involves going from script to storyboard to previsualization (making a low-end animated version as a planning tool) to production. That's very much a waterfall process.
Any process is better then no process (Score:5, Insightful)
Game development has lagged terribly behind traditional / non game programming industries in terms of its development practices. And the most recent projects I have worked on were using a Scrum / Agile hybrid. I will admit to not knowing exactly which is which. But the great thing that Agile/Scrum did was to put in place a process where every time someone asked for a feature change, it would be reflected on the development schedule. I have worked on projects where there was at best a vague checklist of what still needed to be done with no info on how long it was expected to take. In my experience, most milestone crunch work is due to people realizing too late that something that should be in the milestone was not going to get done in time.
The problem with any development practice is that if taken too far, it will cause more problems then it solves. You should not have to write a formal task card up, and put it on the board for trivial tasks. And if you break things down too much, you end up losing sight of the bigger picture.
I do not care what process you use to get things done. As long as someone on the project (probably the project lead), is keeping track of the following:
- Break down the project into smaller tasks: This makes it at least possible to assign responsibility for specific things to specific people.
- Task / Feature prioritization: When it comes time to make cuts, knowing what things are important is highly useful.
- Task interdependency: You want to schedule your work load to make sure no one gets stuck waiting for something else, and it helps to have a list of alternate tasks you can move onto when you do get road blocked.
- Making sure things are done mostly on time: It is never a good thing to only realize that a task is not going to be done on time 2 days before it needs to be done. If something is taking too long, you should know before hand
- Making sure new features are checked against the schedule: No one wants to have a project become late because someone decided to add new features half way through the project but did not add time to it.
If you can track these things intelligently you can avoid the worst bits of milestone specific crunch. No process will prevent a deathmarch, or magically squeeze out an extra 6 months of effective development time. But it will avoid the nastiest surprises, and help create a realistic prediction of what a given development team can produce in a given time frame.
END COMMUNICATION
Oh ... I did not know ... (Score:4, Insightful)
that ...
As the industry at large is moving away from the phantasmagoria of Agile
I guess calling Agile a silver bullet and/or calling it a hype or anti hype is just a thing of the media. As a Software Developer you are used to at least know the best tool for your job and the best language for your job (albeit some reasons may prevent you from using them). The same should be true for software project management methods.
Keep in mind that perhaps 50% of all software development houses have no method at all but just do it with more or less success. That often is topped by neither having a version control system nor having an issue tracker. Project management is done with Excel Sheets, which are mailed around and edited/annotated by multiple persons.
Calling Agile "failing" is in my eyes a clear sign that you have no clue about it.
Every single thing that is stated as best practice in TDD, XP or Scrum is a very good thing to do in your process, regardless wether you follow any of those methods strict or prefer a more traditional approach.
Most people calling Agile fail either have (as I stated above) no process at all, never tried it, or already do do a lot of the core practices like nightly builds and continuos integration etc.
This said: no one ever claimed that a good running traditional process which is already yielding high quality result would be even better if run Agile. However everyone who has no process, everyone who has quality problems, everyone who has tracking, budget delivery time problems, those have a much easier term in adopting some agile process and a much easier introduction and adoption of tools instead of one who switches to RUP or similar heavy weight processes.
angel'o'sphere
Re:Conclusions (Score:4, Insightful)
Well, no: a completely toxic process-driven scheme will drive away creative and intelligent engineers. So will a completely batty and air-headed and uncontrolled 'agile' scheme. Balance and common sense is vital.
Rgds
Damon
Re:Staring blankly (Score:3, Insightful)
Re:I am a game developer. (Score:5, Insightful)
Do people in management at large corporations actually talk like this?
No, the programmers do.
Agile is all about breaking the project down into small, more-or-less self-contained (sets of) features, and getting the users involved in the process. The aim is the same, to go from a set of requirements to a finished product, but it's supposed to be more flexible, more able to cope with changes along the way, etc (hence, "agile").
It differs from the traditional waterfall method in that it allows for coding of one (set of) requirement(s) to start, while the next set is being specced out; it also allows (in fact, requires) that testing of the last set of delivered functionality is performed while the current set is being developed. Thus it runs several separate workstreams in parallel. If that testing reveals any bugs that need to be fixed now, then the fixes can be worked into the next sprint as required (which yes, may well push features out, either to a later date or completely out of the project).
Agile suits some projects better than others, some customers better than others, and some project teams better than others. When it works well, it can work really well; similarly when it's poorly managed or people have unrealistic expectations, it can crash and burn like any other method. (And similarly, of course, other methods of running software projects can work very well too - use the right tool for the right job...)
Was it ever Agile? (Score:5, Insightful)
The problem is not in "Agile" methodology.
The problem is in "Mongolian Clusterfuck" methodology, called "Agile" by managers who think "Mongolian Clusterfuck" isn't catchy enough.
Agile sets short reachable targets, and reiterates and modifies them upon reaching them. The cycle is 2-4 weeks.
Mongolian Clusterfuck is similar, but the cycle is 2-4 hours and the targets that haven't been reached are abandonned half-finished.
Agile has specs that accept modifications when the customer requests them. Mongolian Clusterfuck has specs that change every time your boss stops by.
Agile has daily meetings of what problems to solve and how. Mongolian Clusterfuck is "this is broken, leave whatever you're doing and fix it now."
Agile has one clear set of goals of a golden middle between performance, stability, portability, cost, time and maintainablity. Mongolian Clusterfuck has two. Simultaneously.
Game development is exceptionally prone to Mongolian Clusterfuck methodology. And then people who never knew Agile think it sucks bad.
Re:Conclusions (Score:3, Insightful)
TFA starts out sounding like idiot drivel with strong anti-agile prejudices caused by bad experiences with bas, expensive consultants. Later on it gets very informative, however. It's not the Agile doesn't work. It's that, depending on your situation, it might not work for you.
Agile gives programmers freedom. If you've got good programmers, that's a good idea. If your programmers are crap, you're better off restricting their creativity. At least, that's the gist I'm getting from the first half of the article.
Re:there is no engineering in software (Score:3, Insightful)
Software development is still a craft.. more than art, but way less than engineering..
until we have tools to make software in a consistent, reproductible way, we can't apply engineering tecniques to software development
We've had tools for that since forever. `cp` for example. Reproducing software reliably is trivial in comparison to bridges, because software is only information, and not something physical. Writing software is not like building consistent and reproducible bridges, it's like inventing a new kind of bridge. There's always going to be some art, judgement and testing involved.
Re:Was it ever Agile? (Score:3, Insightful)
Right methodology for right use.
Standard Waterfall for a clearly set goal with specific purpose and function, unlikely to evolve, well known and specified.
Agile if you don't really know where you're going, trying various approaches to see which works, soft metrics like "it should be fun".
Cleanroom for short code for known and unchangeable specification, where bugs are not acceptable.
Waterfall is good for business apps. Cleanroom is great for embedded and mission-critical. Agile feels just like the right thing for gaming and entertainment.
Imagine writing a game like Zelda or Final Fantasy using Cleanroom methodology. I can't. Programming as art will produce awesome results, programming as science will get you nowhere. Now imagine a GSM base station programmed with each developer contributing some feature, and iteratively trying to get the job done more bug-free and more standard-compliant than the previous version...