{"id":895,"date":"2019-05-01T06:05:55","date_gmt":"2019-05-01T06:05:55","guid":{"rendered":"http:\/\/buklijas.info\/blog\/?p=895"},"modified":"2019-05-01T08:05:01","modified_gmt":"2019-05-01T08:05:01","slug":"the-first-thing-to-do-before-you-start-to-write-code","status":"publish","type":"post","link":"http:\/\/buklijas.info\/blog\/2019\/05\/01\/the-first-thing-to-do-before-you-start-to-write-code\/","title":{"rendered":"The first thing to do before you start to write code"},"content":{"rendered":"

Published on:<\/strong> 01.05.2019<\/p>\n

Let me start with a personal true story<\/strong>.<\/p>\n

In 2014 I was working on a personal project of making IOS card game<\/strong> called Tablic<\/a>, I spend more than 200 work hours on did 80% of the original plan and never finished it.<\/p>\n

Do you know why?<\/p>\n

Because of software scope creep<\/a>.<\/p>\n

Originally I had the idea to make a game with one player vs. computer<\/strong>.<\/p>\n

As I was near completing that goal I started adding additional features<\/strong>: I could add 4 players, a user could select AI difficulty.<\/p>\n

Each additional features meant more development time: new code and changes to an existing one<\/strong>.<\/p>\n

And after all this, I decided to add multiplayer support over local WiFi and over the internet.<\/p>\n

This last decision has truly killed the project<\/strong> completely.<\/p>\n

In order to implement multiplayer, I had to write a lot of additional code and to change existing architecture, it was at least an additional 300 hours<\/strong> and after more than 200 hours already spend I decided to take a small break (like a week) but later never continued.<\/p>\n

The reason why I did not want to release it without multiplayer was that I was thinking it is not good enough, other games had multiplayer, how can I make one without it<\/strong>.<\/p>\n

I was always thinking that I will continue and finish it one day<\/strong>, but that day never came, today I am thinking that it is probably better to rewrite it to Unity than to continue in Objective-C (but that is a discussion for another time).<\/p>\n

Years later when I was analyzing why I never finished that IOS game, I came to the conclusion that the original problem was because I did not have a specification of the first version<\/strong>.<\/p>\n

By specification, I just mean a list of feature, with dependencies between them, basic UI scatch and time estimates.<\/p>\n

As I was completing some features I continue adding new ones indefinitely<\/strong>.<\/p>\n

I am pretty sure if I did implement multiplayer I would add some other features also.<\/p>\n

Today I am wiser or I just think so<\/strong>.<\/p>\n

Now I have a process for writing software.<\/p>\n

Before I write code I decide what is MVP that I will make, without even thinking about additional features<\/strong>.<\/p>\n

The reason why I do not even want to write addition features is that I have learned<\/strong> that even when I make software for myself, software what I make is not software that I need<\/a>.<\/p>\n

Define what kind of minimal features you need to have in your software<\/strong>, make dependencies between them and time estimates how long it will take to make them.<\/p>\n

I do time estimates in pomodoros<\/strong> (25 minutes increments) but other time units can be used.<\/p>\n","protected":false},"excerpt":{"rendered":"

Define what kind of minimal features you need to have in your software.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false},"categories":[27],"tags":[41,55,56],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"yoast_head":"\nThe first thing to do before you start to write code - Sasa Buklijas<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/buklijas.info\/blog\/2019\/05\/01\/the-first-thing-to-do-before-you-start-to-write-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The first thing to do before you start to write code - Sasa Buklijas\" \/>\n<meta property=\"og:description\" content=\"Define what kind of minimal features you need to have in your software.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/buklijas.info\/blog\/2019\/05\/01\/the-first-thing-to-do-before-you-start-to-write-code\/\" \/>\n<meta property=\"og:site_name\" content=\"Sasa Buklijas\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-01T06:05:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-05-01T08:05:01+00:00\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\">\n\t<meta name=\"twitter:data1\" content=\"Sasa Buklijas\">\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\">\n\t<meta name=\"twitter:data2\" content=\"2 minutes\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/buklijas.info\/blog\/#website\",\"url\":\"http:\/\/buklijas.info\/blog\/\",\"name\":\"Sasa Buklijas\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/buklijas.info\/blog\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/buklijas.info\/blog\/2019\/05\/01\/the-first-thing-to-do-before-you-start-to-write-code\/#webpage\",\"url\":\"http:\/\/buklijas.info\/blog\/2019\/05\/01\/the-first-thing-to-do-before-you-start-to-write-code\/\",\"name\":\"The first thing to do before you start to write code - Sasa Buklijas\",\"isPartOf\":{\"@id\":\"http:\/\/buklijas.info\/blog\/#website\"},\"datePublished\":\"2019-05-01T06:05:55+00:00\",\"dateModified\":\"2019-05-01T08:05:01+00:00\",\"author\":{\"@id\":\"http:\/\/buklijas.info\/blog\/#\/schema\/person\/780025d597f1c5df3cc156eaffc8c561\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/buklijas.info\/blog\/2019\/05\/01\/the-first-thing-to-do-before-you-start-to-write-code\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/buklijas.info\/blog\/#\/schema\/person\/780025d597f1c5df3cc156eaffc8c561\",\"name\":\"Sasa Buklijas\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/buklijas.info\/blog\/#personlogo\",\"inLanguage\":\"en-US\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/9f6f7de5a4882517ca0e4a8ebd607925?s=96&d=mm&r=g\",\"caption\":\"Sasa Buklijas\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p5YHGV-er","_links":{"self":[{"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/posts\/895"}],"collection":[{"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/comments?post=895"}],"version-history":[{"count":5,"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/posts\/895\/revisions"}],"predecessor-version":[{"id":900,"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/posts\/895\/revisions\/900"}],"wp:attachment":[{"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/media?parent=895"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/categories?post=895"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/buklijas.info\/blog\/wp-json\/wp\/v2\/tags?post=895"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}