{"id":496,"date":"2010-06-21T21:17:18","date_gmt":"2010-06-21T21:17:18","guid":{"rendered":"http:\/\/www.doolwind.com\/blog\/?p=496"},"modified":"2010-07-26T05:08:07","modified_gmt":"2010-07-26T05:08:07","slug":"fanatical-pragmatism-in-software-development","status":"publish","type":"post","link":"https:\/\/www.doolwind.com\/blog\/fanatical-pragmatism-in-software-development\/","title":{"rendered":"Fanatical Pragmatism in Software Development"},"content":{"rendered":"<p><a href=\"http:\/\/www.doolwind.com\/images\/blog\/pragmatic.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignright\" title=\"Fanatical Pragmatism\" src=\"http:\/\/www.doolwind.com\/images\/blog\/pragmatic.jpg\" alt=\"\" width=\"173\" height=\"130\" \/><\/a>I\u2019ve caught the pragmatism bug.\u00a0 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.\u00a0 This all started when my time started costing me money; when I started working for myself.\u00a0 I like to think of it as \u201cThe product justifies the means\u201d.\u00a0 Today I\u2019m going to briefly describe what I mean by fanatical pragmatism with some concrete rules I\u2019ve been following recently.<\/p>\n<p><strong>What fanatical pragmatism is<\/strong><\/p>\n<p>Fanatical pragmatism involves pursuing the optimal product as cost effectively as possible, without cutting corners.\u00a0 For anything non-trivial, see if there is an existing solution that can solve the problem.\u00a0 For games, this involves using a 3<sup>rd<\/sup> party engine, particle system, etc wherever possible.\u00a0 It\u2019s about solving the problems that need to be solved, in the cheapest way possible.<\/p>\n<p>It\u2019s good for developers as focuses them on completing as much as possible, as quickly as possible.\u00a0 It\u2019s also good for the business as it means the problems the business exists to solve are solved as cost effectively as possible.<\/p>\n<p><strong>What fanatical pragmatism isn\u2019t<\/strong><\/p>\n<p>It is not about cutting corners to get to a solution faster.\u00a0 Nor is it about ignoring long-term goals to reach short-term goals faster.\u00a0 Fanatical pragmatism is not \u201ccowboy coding\u201d (rather it\u2019s tangential to it) and it\u2019s more about solving the businesses needs for the least cost than just getting things done quickly.<\/p>\n<p><strong>How scrum fits in<\/strong><\/p>\n<p>It fits in perfectly with agile development practices, particularly Scrum. \u00a0Scrum is a discipline-agnostic framework that gives developers the freedom to work within their own specific style.\u00a0 For this reason, fanatical pragmatism works hand-in-hand with extremely short sprints and meeting changing customer demands.\u00a0 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.\u00a0 For this reason it can be embraced by both developers and management alike.<\/p>\n<p><strong>Some general rules<\/strong><\/p>\n<p>Some general rules I\u2019ve found myself following recently:<\/p>\n<ul>\n<li><strong>Broaden your knowledge<\/strong>.\u00a0 I\u2019ve spent the last couple of years running a software company focussed on web applications.\u00a0 I\u2019ve picked up a lot of skills that I\u2019ve been able to transfer over to game development (and vice versa).\u00a0 The broader your knowledge, the large the pool of resources you can draw from to solve problems.\u00a0 The jack of all trades is the master of fanatical pragmatism<\/li>\n<li><strong>Focus on the goal<\/strong>.\u00a0 The key to keeping pragmatic is always looking at where you are heading.\u00a0 Every decision from day-to-day task assignment to strategic planning should focus on where the team is heading.\u00a0 All efforts should be in driving the team towards their ultimate goal(s).<strong><\/strong><\/li>\n<\/ul>\n<p>Some general software development rules:<\/p>\n<ul>\n<li><strong>Separate your concerns<\/strong>.\u00a0 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.\u00a0 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>\n<li><strong>Clean Interfaces<\/strong>.\u00a0 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>\n<li><strong>Build strong architecture where it\u2019s needed<\/strong>.\u00a0 For some large, complex system\u2019s it\u2019s important to spend the time up front designing the architecture for the system.\u00a0 This gives everyone a foundation to build upon. \u00a0This should only be done in rare situations though. \u00a0It&#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>\n<\/ul>\n<p><strong>Conclusion<\/strong><\/p>\n<p>So that\u2019s fanatical pragmatism in a nutshell.\u00a0 Share your thoughts on the topic and let me know how you work best in achieving your goals.\u00a0 I\u2019m constantly evolving the way I work and I\u2019m always looking for the best way to solve problems so please leave a message with your best practices.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I\u2019ve caught the pragmatism bug.\u00a0 Everything I do now is the most pragmatic way I can possibly complete the task.\u00a0 This all started when my time started costing me money; when I started working for myself.\u00a0 I like to think of it as \u201cThe product justifies the means\u201d.\u00a0 Today I\u2019m going to briefly describe what <a class=\"more-link\" href=\"https:\/\/www.doolwind.com\/blog\/fanatical-pragmatism-in-software-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":[86,112,37,57],"class_list":["post-496","post","type-post","status-publish","format-standard","hentry","category-game-development","tag-fanatical-pragmatism","tag-game-development","tag-game-programming","tag-pragmatic"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pgEc5-80","_links":{"self":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts\/496","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=496"}],"version-history":[{"count":0,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/posts\/496\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/media?parent=496"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/categories?post=496"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.doolwind.com\/blog\/wp-json\/wp\/v2\/tags?post=496"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}