Contents
Planning For Fun In Game Programming - Part 1
 
 
Printer-Friendly VersionPrinter-Friendly Version
 
Latest News
spacer View All spacer
 
November 7, 2009
 
Iwata: 35% Japanese Connectivity Ratio For Wii, 20% For DS
 
iPhone Dev Storm8 Sued Over User Data Harvesting Allegations [5]
 
Game Boy, The Ball Admitted To National Toy Hall Of Fame
spacer
Latest Jobs
spacer View All     Post a Job     RSS spacer
 
November 7, 2009
 
Trion Redwood City
Sr. Environment Artist
 
Trion Redwood City
Sr. Evnironment Modeler
 
FarSight Studios
Software Engineer
 
Sucker Punch Productions
3D Environment Artist
 
Sucker Punch Productions
Character Artist
 
Sucker Punch Productions
Texture Artist
 
Sucker Punch Productions
Network Programmer
 
Monolith Productions
Sr. Software Engineer, Engine - Monolith Productions - #113767
spacer
Latest Features
spacer View All spacer
 
November 7, 2009
 
arrow On Bringing Modern Warfare 2 To Life [3]
 
arrow Games Demystified: Dissidia Final Fantasy [1]
 
arrow Building Social Success: Zynga's Perspective [3]
 
arrow Small Developers: Minimizing Risks in Large Productions - Part I [7]
 
arrow Valve's Writers And The Creative Process [11]
 
arrow Sony's Software Strategy: Shuhei Yoshida Speaks [3]
 
arrow A Holistic Approach to Game Dialogue Production [7]
 
arrow Ancients Reborn: Launching League of Legends [4]
spacer
Latest Blogs
spacer View All     Post     RSS spacer
 
November 7, 2009
 
Space of Possibility and Pacing in Casual Game Design - A PopCap Case Study [2]
 
Defining "Hard Core" and "Casual"? [10]
 
Comparative Ludology: A Case Study Using The Sims and Total War
spacer
About
spacer News Director:
Leigh Alexander
Features Director:
Christian Nutt
Editor At Large:
Chris Remo
Advertising:
John 'Malik' Watson
Recruitment/Education:
Gina Gross
 
Features
  Planning For Fun In Game Programming - Part 1
by Tom Hammersley
14 comments
Share RSS
 
 
May 20, 2009 Article Start Page 1 of 3 Next
 

[From a game programming and planning perspective, how do you legislate for... fun? Veteran game coder Hammersley discusses how you might split game technical planning into 'must-have' features and 'non-functional requirements' that enhance the game's fun factor.]

Development slippage is a key problem in the software industry. This is often because development time is wasted on developing features that are not needed, or attempting to determine what we need whilst we build it.

Advertisement

This is due to insufficient requirements engineering. There is a commonly encountered belief that requirements engineering for games is difficult, if not impossible.

I argue that this is not the case, and that we can succeed in requirements engineering in the games development industry. Requirements engineering provides us the cheapest and most effective way of determining what we need to build, saving development time and cost.

The first part of this article challenges the view that requirements engineering cannot be easily practiced in games development and discusses the surrounding issues; the second part will discuss requirements engineering best practices and how it fits into the development process.

Analysis of the Basic Argument

The common reasons for this belief are:

  • Confusion and misunderstanding between requirements and solutions.
  • The belief that games development is somehow different and incomparable to other industries.
  • You can't write requirements for fun.
  • The features being developed are cutting edge and novel, and are therefore not well understood enough to specify requirements.

I argue that this is not widely the case for a number of reasons.

Confusion Between Requirements and Solutions

Let me describe a typical development scenario. Firstly, the designer writes a detailed specification of the solution to a feature. The programmer attempts to slavishly implement the feature to the letter of that specification.

In doing so, he runs into many problems. He finds it difficult to solve problems that are not addressed by this solution, as only the solution is described, not the solution rationale or original problem.

A lot of time is then spent iterating on and refining the implemented solution. Subsequently, we conclude that requirements engineering is difficult or impractical and we are not convinced of the value.

The mistake we have made is that we have specified a solution, not a requirement. Whilst requirements and solutions appear superficially similar, there is an important difference that we must understand. A requirement states the problem to solve or a need that exists and why it exists; a solution tells us how to go about solving that problem or need.

It can be compelling to write solutions instead of requirements. It is tempting to design a solution to a requirement at the same time as writing the requirement -- especially the interesting ones! Writing solutions feels more authoritative, more formal, more precise and more accurate. But it is counterproductive.

We must ensure that we specify requirements for the features of the game, not solutions to those requirements. We need to specify the essence of the problem we must solve, and why we have to solve it, not a possible solution to it (Robertson & Robertson, p165).

By prescribing a given solution, we preclude any potential superior solutions. Prescribing solutions also limits our understanding of the problem domain and intent of the requirement.

We also rob ourselves of the opportunity to test whether we have solved the original problem; we can merely test whether we have implemented the prescribed solution satisfactorily.

 
Article Start Page 1 of 3 Next
 
Comments

Jeff Beaudoin
20 May 2009 at 1:49 pm PST
profile image
I really liked this article.

This has some really good observations on what a programmer can/should contribute to the design of a game. Many designers see programmers as a means to implement their ideas, rather than a means to find the best WAY to implement their ideas.

The underlying point that Tom gets across very well is that collaborative effort leads to the correct solution, instead of the first solution.

Bart Stewart
20 May 2009 at 3:06 pm PST
profile image
I believe the author's main point is correct: when generating requirements, it's better to state what is required and avoid stating how that requirement will be fulfilled.

Starting with a solution instantly cuts off opportunities to explore what might have been better solutions. So insuring that your customer -- often a system designer -- sticks to specifying the "what" (including budget and time) while leaving the "how" to the programming team is a sound principle.

I'd also like to suggest that there's an important corollary to this principle: never expose data internals to the customer unless you expect that you will never change those internals.

Beyond the obvious security concern, the moment customers are allowed to see an internal data element, they will begin to depend on it always being there. Any exposed data element becomes untouchable, preventing you from considering new and improved ways to implement the internals of that system. This makes it much more expensive to change any system of which that data element is a part.

As long as the back-end internals are not exposed, programmers have the freedom to modify or even replace them completely while maintaining the front-end behaviors that are visible to the customer. Keeping internals invisible to the customer thus helps them focus on the "whats" -- the forms and functions -- when writing new requirements, rather than on the internal "hows."

Of course no one every hits 100% on this stuff. There's always some overlap between design and programming, particularly in smaller studios. But it's been my experience that distinguishing "whats" from "hows" helps both designers and programmers focus on what each is best at doing, getting maximum value from the developers in those roles.

Ian Barkley-Yeung
20 May 2009 at 7:44 pm PST
profile image
I'm not sure I agree with the "requirements vs solutions" piece, or maybe it's just not stated well.

What Mr. Hammersley seems to be saying is that the lead designer of an RTS should say, for instance, "Each faction should have a cost-effective way of countering airplanes" instead of what they currently do, which is to specify the list of units that each faction has. And then assume the programmer will figure out whether it is best to give one side anti-air fighter jets and another side a special "kill fighters in area" spell.

Well, that's obviously ridiculous. First off, it's not just a programming problem -- art and audio and level designers need to know which solution to the "countering airplanes" problem we are going to use. Moreover, the programmer has no more idea (probably less) than the designer in terms of which solution is going to be fun. And this is making the programmer into a designer.

Now, I don't think that's what Mr. Hammersley really means. But that is what he says -- designers should only focus on requirements and problems, not solutions to those problems. Unfortunately, that's what 90% pf design *IS* -- finding solutions to gameplay problems. To simply issue a blanket "designers shouldn't try to find solutions to problems" is vastly overreaching.

I'm sorry, but I think he needs to revisit this a bit and try to be clearer about what problems he thinks should and should not be solved by design (or art or audio or...)

David Tarris
20 May 2009 at 10:21 pm PST
profile image
It seems to me, Ian, that the author was trying to say that there is a way to both allow for ever-changing, organic nature of software development while still keeping focus on what it is the team is ultimately trying to achieve with this product. Though I will agree that a little bit more specifics and less generalizations would have been nice to help clarify the main points.

I think Damion Schubert, speaking at the GDC a few years back, had an excellent speech on creating useful documentation and systems design requirements, a lot of those points being echoed here, and I agree whole-heartedly. But again, more examples would be greatly appreciated.

Blake Nicholas
20 May 2009 at 11:04 pm PST
profile image
Maybe the programmers should play more games so that the designers can say stuff like, "the mechanic is like X game, but with Y difference". The only reason that other programming can be specified easier is because the programmer is able to comprehend the design easier by using real world stuff that they encounter everyday. This is a problem with a lot of people in our industry, they aren't really gamers, they're too busy to be gamers.

Jason Avent
21 May 2009 at 5:27 am PST
profile image
Sorry to reduce this article down to buzz words but aren't you just talking about User Stories? Alot of agile development systems use this phrase but it's not exclusive to those systems. Basically it's what you're after. Something that says what the user expects. It doesn't include the how or even the why really. It just talks about the result in terms that the expected user would want. The user can be the consumer, a designer/artist or another programmer - or sometimes you write a user story from a couple of perspectives because it could have multiple clients. By creating User Stories, it really makes you think about what's essential about a feature and gives the implementors a maximum amount of freedom to decide how they meet the requirements. User Stories as a concept is pretty well documented.

On the rest of the thread:
Ian - the user story for the designer might be 'As a Designer, I need to be able to control the fire rate, bullet power, movement speed...(etc) for the wheeled, ground-based AA cannons' - so you ask for what you need. Don't worry, with this system you should have more control over what you need, not less. The old school way of doing it is to write out loads of stats tables into design documents that you have no way of telling will work or not until you try them in the game.

B N - programmers should definitely play more games. : ) At our company, we've tried to make it as easy as possible for them to do so both at work and in their own time. It's worth making the investment.

J R
21 May 2009 at 7:42 am PST
profile image
Speaking as a games programmer there's nothing "fun" about getting vague feature requests from designers who have some kind of idea what they want but haven't thought it through and haven't communicated it properly.

Ian Barkley-Yeung
21 May 2009 at 11:40 am PST
profile image
Let me put my objection to the article another way -- I don't think there is a distinction between requirements and solutions. Each requirement is just the solution to the previous requirement.

The only real requirement for a business is "Make Money". Every thing after that is the solution to a problem. "How do we make money? Build an RTS" "What kind of RTS? A fun RTS." "How do we make the RTS fun? Make it balanced." etc. etc. etc.

So you are always being handed "solutions to problems". The author seems to object to certain kinds of solutions, but never states which solutions he has problems with.

Chris Howe
24 May 2009 at 12:20 pm PST
profile image
Interesting stuff Tom. I agree with some of the comments that more detail is needed, especially regarding the level at which the problem is specified, but I imagine part 2 will go into that.

In addition to specifying where we draw the line between problem spec and implementation spec I think it's just as important to make sure that all parties understand where this line is drawn. If the programmer is expecting a very tight spec and receives one that is open to interpretation it might seem vague and sloppy from his point of view. Similarly, a designer who delivers a very tight spec might get very annoyed when the programmer starts interpreting it in ways he hadn't intended.

I completely agree that tools development shouldn't be any different from development in other industries. This is perhaps hampered by the fact that tools development is often distributed throughout a team, meaning that programmers switch between working on tools and the game, and will use much the same mindset for both. Dedicated tools programmers ftw.

Dirk Broenink
24 May 2009 at 2:17 pm PST
profile image
The solution alone is not enough for a programmer, I agree with that, being a programmer myself. But, the solution must still be provided by a designer / manpower assigned to that specific problem (whether it is sound, gameplay, whatever). He or she must simply also state what is trying to be accomplished, to elaborate. From that point of view, the programmer can better understand the solution, and maybe even improve upon, after feedback has been given upon it.

John McMahon
25 May 2009 at 1:02 pm PST
profile image
Dirk, if I understand you. You disagree and state that not only the requirement must be given by a solution should be given as well. But that solution should not be set in stone and should be allowed to organically change throughout development. As well, the solution should not be a set of instructions, but also provide the philosophy and mindset behind why that solution is best to fit the function & non-functional requirements.

I think that is a fair middle-of-the-road compromise between the two schools of thought. I feel game development should be created in a modular way of thinking. Which allows for changes without becoming very expensive unless you are changing a basic principle of the original concept.

Tom Hammersley
25 May 2009 at 1:46 pm PST
profile image
Hello all – apologies for joining the debate late, I’ve been without wi-fi or Internet access for a week!

First thing: design vs. requirements. I think the key thing here is that requirements and design aren’t exclusive processes but rather they’re intertwined, complementary processes. Requirements formulate the problems we want to solve and the design goals, constraints and fit criteria for those problems. The design and/or programming processes follow on from this and produce specific solutions to solve the problems and achieve the desired outcomes.

I think the issue is that at the moment, we tend to practice this process quite implicitly. We mix the processes together, but we only keep the design – the solution. But we don’t have a record of what the motivating problems were. We don’t capture that knowledge explicitly – or it’s fragmented amongst several individuals. Requirements engineering can fill that gap. At a hierarchy of levels, we’d have descriptions of the problems and design goals we’re aiming to satisfy, the rationale for those, and the fit criterion for them to measure whether we’ve solved them.

We can see how these requirements fit together with others to achieve a particular goal. For each piece of implemented functionality, we could trace back where it came from, what it was attempting to solve and why it needs to do certain things. If we change some functionality, the requirements for those particular parts of functionality can tell us the related pieces of functionality so we can ensure we don’t break those, and of course we can refer back to the original problem and ensure we’re still solving that satisfactorily. It gives us a way to design tests for our solutions – or even test the design itself. It gives a way for later hires to a long-standing team a way to understand the nature and rationale of the product.

Arguably a good design could provide those benefits, but I think rather these issues are different sides of the same coin, and they're worth separating.

I don’t want to preclude or object any kind of design process that provides solutions. I’m trying to argue that there’s nothing about the nature of games development that precludes us from setting out what problems we want to solve and the requirements of a solution first, keeping those artifacts, and then hooking that up to a design process – and that there are benefits to doing so.

Chris and Dirk pick up on some of this – providing illustrations of how programmers, when implementing a solution, need to know and understand the original problem we’re trying to solve and the rationale of why and how we’re solving that problem.

Regarding user stories: this article was designed as two parts. Part 1, which gamasutra have published, was intended as an essay on the subject of requirements engineering in games, whether it is possible, and whether there is anything intrinsic in the nature of games that prevents it. I wanted to try and open the debate on the subject. The second part discusses some of the particular practices, such as user stories, and others, to implement this process.

Cheers


Bob dillan
27 May 2009 at 8:42 pm PST
profile image
Quite frankly there should be an R&D division that does nothing but implementation of well worn territory (getting a basic racing mechanic up and working for instance, or a battle mechanic as in god of war hitting some enemy etc).

I've always been stunned at the general cluelessness of devleopers themselves and why publishers haven't figured out that they are doing engineering, and the worst thing they could possibly do is merely have dev teams pump out games, they specifically need people working R&D and developing prototypes constantly to find the solutions so that when the next big game comes around, it's already a well worn path and well understood.

Raul Aliaga
28 May 2009 at 5:19 pm PST
profile image
I think that the word "design" it's a little bit overloaded here, and there's a need for distinction between "Game Design" and "Software Design". As I see it, the author tries to keep (game) designers from defining solutions, a.k.a. software designs.


none
 
Comment:
 


Submit Comment