<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Doolwind&#039;s Game Coding Blog &#187; Pragmatic</title>
	<atom:link href="http://www.doolwind.com/blog/tag/pragmatic/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.doolwind.com/blog</link>
	<description>Pragmatic Thoughts On Game Development</description>
	<lastBuildDate>Mon, 16 Aug 2010 23:19:59 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Fanatical Pragmatism in Software Development</title>
		<link>http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/</link>
		<comments>http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/#comments</comments>
		<pubDate>Mon, 21 Jun 2010 21:17:18 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[Fanatical Pragmatism]]></category>
		<category><![CDATA[Game Programming]]></category>
		<category><![CDATA[Pragmatic]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=496</guid>
		<description><![CDATA[I’ve caught the pragmatism bug.  Everything I do now is the most pragmatic way I can possibly complete the task.  This all started when my time started costing me money; when I started working for myself.  I like to think of it as “The product justifies the means”.  Today I’m going to briefly describe what [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/pragmatic.jpg"><img class="alignright" title="Fanatical Pragmatism" src="http://www.doolwind.com/images/blog/pragmatic.jpg" alt="" width="173" height="130" /></a>I’ve caught the pragmatism bug.  Everything I do now is the most <a href="http://www.doolwind.com/blog/pragmatic-game-development/">pragmatic</a> way I can possibly complete the task.  This all started when my time started costing me money; when I started working for myself.  I like to think of it as “The product justifies the means”.  Today I’m going to briefly describe what I mean by fanatical pragmatism with some concrete rules I’ve been following recently.</p>
<p><span id="more-496"></span></p>
<p><strong>What fanatical pragmatism is</strong></p>
<p>Fanatical pragmatism involves pursuing the optimal product as cost effectively as possible, without cutting corners.  For anything non-trivial, see if there is an existing solution that can solve the problem.  For games, this involves using a 3<sup>rd</sup> party engine, particle system, etc wherever possible.  It’s about solving the problems that need to be solved, in the cheapest way possible.</p>
<p>It’s good for developers as focuses them on completing as much as possible, as quickly as possible.  It’s also good for the business as it means the problems the business exists to solve are solved as cost effectively as possible.</p>
<p><strong>What fanatical pragmatism isn’t</strong></p>
<p>It is not about cutting corners to get to a solution faster.  Nor is it about ignoring long-term goals to reach short-term goals faster.  Fanatical pragmatism is not “cowboy coding” (rather it’s tangential to it) and it’s more about solving the businesses needs for the least cost than just getting things done quickly.</p>
<p><strong>How scrum fits in</strong></p>
<p>It fits in perfectly with agile development practices, particularly Scrum.  Scrum is a discipline-agnostic framework that gives developers the freedom to work within their own specific style.  For this reason, fanatical pragmatism works hand-in-hand with extremely short sprints and meeting changing customer demands.  It acts on high-level sprint planning (deciding what goes into a sprint) as well as low-level, day-to-day development such as exactly how to solve the tasks for a given sprint.  For this reason it can be embraced by both developers and management alike.</p>
<p><strong>Some general rules</strong></p>
<p>Some general rules I’ve found myself following recently:</p>
<ul>
<li><strong>Broaden your knowledge</strong>.  I’ve spent the last couple of years running a software company focussed on web applications.  I’ve picked up a lot of skills that I’ve been able to transfer over to game development (and vice versa).  The broader your knowledge, the large the pool of resources you can draw from to solve problems.  The jack of all trades is the master of fanatical pragmatism</li>
<li><strong>Focus on the goal</strong>.  The key to keeping pragmatic is always looking at where you are heading.  Every decision from day-to-day task assignment to strategic planning should focus on where the team is heading.  All efforts should be in driving the team towards their ultimate goal(s).<strong></strong></li>
</ul>
<p>Some general software development rules:</p>
<ul>
<li><strong>Separate your concerns</strong>.  A big part of why <a href="http://www.doolwind.com/blog/model-view-controller-mvc-game-engine/">MVC</a> works so well for a game engine is that it keeps the obvious concerns (e.g. gameplay vs. rendering) separated from each other.  This keeps each person on the team focussed on their part of the problem domain and helps to reduce complexity as the software grows in size</li>
<li><strong>Clean Interfaces</strong>.  Keeping loosely coupled systems is a great way of isolating your code so that any mistakes made, or changes needed can be done with the least amount of hassle in the future</li>
<li><strong>Build strong architecture where it’s needed</strong>.  For some large, complex system’s it’s important to spend the time up front designing the architecture for the system.  This gives everyone a foundation to build upon.  This should only be done in rare situations though.  It&#8217;s easy to get caught in the trap of doing lots of big design up front, however fanatical pragmatism calls for this only when absolutely necessary, and enough information is known.</li>
</ul>
<p><strong>Conclusion</strong></p>
<p>So that’s fanatical pragmatism in a nutshell.  Share your thoughts on the topic and let me know how you work best in achieving your goals.  I’m constantly evolving the way I work and I’m always looking for the best way to solve problems so please leave a message with your best practices.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/fanatical-pragmatism-in-software-development/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pragmatic Game Development</title>
		<link>http://www.doolwind.com/blog/pragmatic-game-development/</link>
		<comments>http://www.doolwind.com/blog/pragmatic-game-development/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 21:11:07 +0000</pubDate>
		<dc:creator>Doolwind</dc:creator>
				<category><![CDATA[Game Development]]></category>
		<category><![CDATA[C++]]></category>
		<category><![CDATA[Pragmatic]]></category>

		<guid isPermaLink="false">http://www.doolwind.com/blog/?p=269</guid>
		<description><![CDATA[Games take a lot of time and money to create.  Many companies can&#8217;t afford this ever increasing drain on their resources, particularly independent game developers.  Developers need to become more pragmatic in the way they developer their games.  This article describes the steps we&#8217;ve been taking to focus on releasing a good game, in the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.doolwind.com/images/blog/pragmatic.jpg"><img class="alignright" title="Pragmatic" src="http://www.doolwind.com/images/blog/pragmatic.jpg" alt="" width="173" height="130" /></a>Games take a lot of time and money to create.  Many companies can&#8217;t afford this ever increasing drain on their resources, particularly independent game developers.  Developers need to become more pragmatic in the way they developer their games.  This article describes the steps we&#8217;ve been taking to focus on releasing a good game, in the shortest time possible.</p>
<p><span id="more-269"></span></p>
<p><strong>Leverage existing technology</strong></p>
<p>Game developers have a bad habit of re-inventing the wheel.  The easiest way to run a game into the ground is to spend all our time creating new technology that already exists in the world.  We need to swallow our pride and use technology someone else has spent time and money creating.  Our core focus is making games, not game technology.  Let the experts handle the technology for us.</p>
<p>For programmers, there are countless engines we can take advantage of from Unity3D to Torque to UDK.  Project managers have access to countless tools to streamline the management process and keep them focussed on running a good team.</p>
<p>Learn to spend money where it&#8217;s needed.  Development time costs money.  If a problem has an off-the-shelf solution, we compare the cost of buying this to developing the solution in-house.  Nine times out of ten, it will be far cheaper to go with the former.</p>
<p><strong>Aim Small</strong></p>
<p>Projects always grow over time, sometimes uncontrollably.  We aim to start small, and keep a keen eye out for features that can be cut, checking the cost-to-benefit ratio of everything we do.  Ordering features by this ratio and cutting features from the bottom of the list when time runs out.</p>
<p>Feature creep is a killer on projects of all sizes.  By keeping milestones short we minimize the opportunities for us to diverge too far from our main goal.  If a feature grows in complexity beyond the scope of the initial design we take a step back and re-evaluate whether that feature is necessary given the new estimate on how long it will take to complete.</p>
<p><strong>Build what you need, not what you think you need</strong></p>
<p>Too many developers spend months working on the technology for their next game before starting the game itself.  Sometimes, they never make it to developing the game!  The most pragmatic solution to this is using someone else&#8217;s engine.  However, if we must create our own technology then we only create what we need right now.</p>
<p>A trap many developers fall into is thinking &#8220;we&#8217;ll be using this feature in the next five games, so it&#8217;s worth putting a lot of time into it now&#8221;.  If we do this for all our features, we won&#8217;t create our first game, let alone the next five.  My rule is that I don&#8217;t have enough information to make a generalised solution until I&#8217;ve implemented it at least a couple of times.</p>
<p>A great way of achieving these goals is adopting an agile development practice.  We are using Scrum for our current game which helps to keep us focussed on creating just enough to reach each sprint/milestone.</p>
<p><strong>It&#8217;s done when people are happy to pay for it</strong></p>
<p>A game is never going to be perfect.  I&#8217;m not advocating the release of buggy, broken games, but we do need to be practical when deciding whether our game is ready for release.  Creating constant playable builds is the best way to make sure the game is always fun and always meets a pre-determined quality bar set by the team.</p>
<p>It&#8217;s easy to fall into the trap of not wanting to release the game until it&#8217;s perfect.  After working on a game for months or years, it feels like your baby and you don&#8217;t want it out in the real world before it&#8217;s ready.  Being pragmatic means making the tough decision of deciding when the time is right to release the game even if you&#8217;re not 100% happy with it.</p>
<p>It is often better to cut a feature to give time to polish the existing gameplay which leads me to my next point&#8230;</p>
<p><strong>&#8220;We&#8217;ll do that in version 2&#8243;</strong></p>
<p>Release early and release often.  The best way to break the hit-driven nature of the games industry is to break the usual tradition of a big release with minimal updates after.  Plan to give away free (or cheap) &#8220;expansions&#8221; of core gameplay pushing the development of these features back until after initial release.  This has a number of key benefits:</p>
<ul>
<li>Begin to earn revenue sooner</li>
<li>Drive the initial cost of the game down by      releasing additional content in a paid or subscription format (e.g. DLC, in-game      assets)</li>
<li>Valuable feedback on the direction to take the      game</li>
<li>Focus on the bare minimum set of features to      sell the game, minimizing feature creep</li>
<li>Form a closer relationship with gamers by      giving them constant updates</li>
</ul>
<p><strong>Use the highest level of abstraction possible</strong></p>
<p>The higher the level of abstraction, the more time can be spent working on the game, rather than working on technology.  We are happy to give up some of the control over run-time performance for an increase in development speed.  Programmers can use a programming language like C# allowing them to spend time making a fun game, rather than managing memory and resources.  Artists can use a tool like ZBrush to create good looking models more easily and quickly.<strong></strong></p>
<p><strong>Automate</strong></p>
<p>Any repetitive day-to-day tasks should be automated by technology.  From build creation to the art pipeline.  We keep our time focussed on making a better game, not performing menial, repetitive tasks.  Programmers need to get in the mindset of spending a few hours per week working on tools to make everyone&#8217;s life better.  A programmer spending a few hours adding a new tool or updating an existing one can save weeks of work for the rest of the team.  Artists can learn batch operations in 3DSMax and Photoshop to help this process</p>
<p><strong>Conclusion</strong></p>
<p>This gives an insight into the ways we are being pragmatic in the development of our game.  By constantly focussing on the final product we make sure our time is spent on the most important tasks at all time.</p>
<p>How pragmatic are you in game development?  Do you have any other tips for minimizing cost and time?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.doolwind.com/blog/pragmatic-game-development/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
