{"id":269,"date":"2009-11-25T07:11:07","date_gmt":"2009-11-24T21:11:07","guid":{"rendered":"http:\/\/www.doolwind.com\/blog\/?p=269"},"modified":"2009-11-25T07:11:07","modified_gmt":"2009-11-24T21:11:07","slug":"pragmatic-game-development","status":"publish","type":"post","link":"https:\/\/www.doolwind.com\/blog\/pragmatic-game-development\/","title":{"rendered":"Pragmatic Game Development"},"content":{"rendered":"<p><a href=\"http:\/\/www.doolwind.com\/images\/blog\/pragmatic.jpg\"><img loading=\"lazy\" decoding=\"async\" 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.\u00a0 Many companies can&#8217;t afford this ever increasing drain on their resources, particularly independent game developers.\u00a0 Developers need to become more pragmatic in the way they developer their games.\u00a0 This article describes the steps we&#8217;ve been taking to focus on releasing a good game, in the shortest time possible.<\/p>\n<p><strong>Leverage existing technology<\/strong><\/p>\n<p>Game developers have a bad habit of re-inventing the wheel.\u00a0 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.\u00a0 We need to swallow our pride and use technology someone else has spent time and money creating.\u00a0 Our core focus is making games, not game technology.\u00a0 Let the experts handle the technology for us.<\/p>\n<p>For programmers, there are countless engines we can take advantage of from Unity3D to Torque to UDK.\u00a0 Project managers have access to countless tools to streamline the management process and keep them focussed on running a good team.<\/p>\n<p>Learn to spend money where it&#8217;s needed.\u00a0 Development time costs money.\u00a0 If a problem has an off-the-shelf solution, we compare the cost of buying this to developing the solution in-house.\u00a0 Nine times out of ten, it will be far cheaper to go with the former.<\/p>\n<p><strong>Aim Small<\/strong><\/p>\n<p>Projects always grow over time, sometimes uncontrollably.\u00a0 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.\u00a0 Ordering features by this ratio and cutting features from the bottom of the list when time runs out.<\/p>\n<p>Feature creep is a killer on projects of all sizes.\u00a0 By keeping milestones short we minimize the opportunities for us to diverge too far from our main goal.\u00a0 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>\n<p><strong>Build what you need, not what you think you need<\/strong><\/p>\n<p>Too many developers spend months working on the technology for their next game before starting the game itself.\u00a0 Sometimes, they never make it to developing the game!\u00a0 The most pragmatic solution to this is using someone else&#8217;s engine.\u00a0 However, if we must create our own technology then we only create what we need right now.<\/p>\n<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;.\u00a0 If we do this for all our features, we won&#8217;t create our first game, let alone the next five.\u00a0 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>\n<p>A great way of achieving these goals is adopting an agile development practice.\u00a0 We are using Scrum for our current game which helps to keep us focussed on creating just enough to reach each sprint\/milestone.<\/p>\n<p><strong>It&#8217;s done when people are happy to pay for it<\/strong><\/p>\n<p>A game is never going to be perfect.\u00a0 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.\u00a0 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>\n<p>It&#8217;s easy to fall into the trap of not wanting to release the game until it&#8217;s perfect.\u00a0 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.\u00a0 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>\n<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>\n<p><strong>&#8220;We&#8217;ll do that in version 2&#8221;<\/strong><\/p>\n<p>Release early and release often.\u00a0 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.\u00a0 Plan to give away free (or cheap) &#8220;expansions&#8221; of core gameplay pushing the development of these features back until after initial release.\u00a0 This has a number of key benefits:<\/p>\n<ul>\n<li>Begin to earn revenue sooner<\/li>\n<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>\n<li>Valuable feedback on the direction to take the      game<\/li>\n<li>Focus on the bare minimum set of features to      sell the game, minimizing feature creep<\/li>\n<li>Form a closer relationship with gamers by      giving them constant updates<\/li>\n<\/ul>\n<p><strong>Use the highest level of abstraction possible<\/strong><\/p>\n<p>The higher the level of abstraction, the more time can be spent working on the game, rather than working on technology.\u00a0 We are happy to give up some of the control over run-time performance for an increase in development speed.\u00a0 Programmers can use a programming language like C# allowing them to spend time making a fun game, rather than managing memory and resources.\u00a0 Artists can use a tool like ZBrush to create good looking models more easily and quickly.<strong><\/strong><\/p>\n<p><strong>Automate<\/strong><\/p>\n<p>Any repetitive day-to-day tasks should be automated by technology.\u00a0 From build creation to the art pipeline.\u00a0 We keep our time focussed on making a better game, not performing menial, repetitive tasks.\u00a0 Programmers need to get in the mindset of spending a few hours per week working on tools to make everyone&#8217;s life better.\u00a0 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.\u00a0 Artists can learn batch operations in 3DSMax and Photoshop to help this process<\/p>\n<p><strong>Conclusion<\/strong><\/p>\n<p>This gives an insight into the ways we are being pragmatic in the development of our game.\u00a0 By constantly focussing on the final product we make sure our time is spent on the most important tasks at all time.<\/p>\n<p>How pragmatic are you in game development?\u00a0 Do you have any other tips for minimizing cost and time?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Games take a lot of time and money to create.\u00a0 Many companies can&#8217;t afford this ever increasing drain on their resources, particularly independent game developers.\u00a0 Developers need to become more pragmatic in the way they developer their games.\u00a0 This article describes the steps we&#8217;ve been taking to focus on releasing a good game, in the <a class=\"more-link\" href=\"https:\/\/www.doolwind.com\/blog\/pragmatic-game-development\/\">Read More<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"enabled":false},"version":2}},"categories":[33],"tags":[19,112,57],"class_list":["post-269","post","type-post","status-publish","format-standard","hentry","category-game-development","tag-c","tag-game-development","tag-pragmatic"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pgEc5-4l","_links":{"self":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts\/269","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/comments?post=269"}],"version-history":[{"count":0,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts\/269\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/media?parent=269"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/categories?post=269"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/tags?post=269"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}