About the quality
Two weeks ago there was annual Solita Codecamp where developer-oriented people can try out and play with not so enterprisey software as we do usually every day.
This year’s task was to implement a Shopping Bot and let it compete against other Codecampers’ bots and drink some refreshments. While there was an example of a basic bot implemented with Java and Spring Boot coders were allowed to pick the [favourite|most hated|most interesting] language to accomplish the task. You would see others’ progress and implemented bots’ shopping frenzy in real time from the screen. And that freedom brought up an interesting matter about the software development. Would you implement the QuickN’DirtyBot to take quick wins while others are still coding or would you take more time and implement the most robust UltimateBotWithBellsAndWhistles2000, which would win all others after it is implemented. Or just try something with some exotic language and have fun while you learn something new. A few took the shortest way with Java, someone wanted code Haskell, one group had perversion for Elixir, some wanted to fiddle with Clojure and of course there was a Node.js bot, too.
There were two of us, Teemu and I who spend most of our time at Solita working with other things that coding & development. Teemu is a combination of Team Manager and Project Manager. I myself work as a Team Manager and also help others in Architect or Developer roles. The rest of the gang were more hardcore Software Developers or Architects. Those bloody Managers would get their asses kicked at last!
As the first map started, everyone were messing with the development tools, environment and tried to bring the Bot to the playground. One could make a caricature and say that the Manager might want something up and running quickly to show something to the customer and the quality focused Developer would Do Things Right.
I of course wanted quick wins! ;) I started from the JavaBot-example, tweaked JRebel support so I could reload code while my bot is running. I thought there could be some nice things if I did some Groovy coding but heck there were some problems that I could not handle with my attention span of minute so went with Java 8 route. As I have been doing game programming as hobby since 90’s I got the ArinRobotti running first and dominated the first map because it could buy the whole shop empty without foes. And I could perform tens of shopping runs. I grabbed a beer. Round One for the Manager.
The second map was bit more complicated since there was a wall, which had to be get around. Again I wanted the Most Viable Product running fast and did a trick in the path finding algorithm – hardcoding escape points where the bot would go if it was colliding to wall. Again ArinRobotti dominated others who were still implementing basic logic. I grabbed a beer. I understood that my bot did not have proper path finding algorithm but there would be placeholder to implement it. From HC developers’ I heard that the [A](http://en.wikipedia.org/wiki/A_search_algorithm) would be the answer. That sounded too complicated for me since I was having fun! I grabbed a beer. Because my bot was quite good only missing the correct path finding algorithm I did what Managers usually do. I concentrated on disturbing others. By shouting witty comments and coding logic to shoot other bots I was able to slow others down. Now others started to have basic bots ready and the map was restarted. Alas! My bot was not winning anymore! The shooting logic of the game was not actually usable to do any reasonable damage to others and there was too much competition from the other bots! But Teemu’s bot got incredibly lucky and was able to buy stuff in bargain. Round Two for the Manager! Grabbed a beer.
Now when the last, third map was shown, I was sure my bot would not have any chances. Map was so complicated that I could not solve it by hardcoding some sensible values. My bot ended up failing miserably. I tried to do desperate things and add some hacky features games like Civilization has taught. If the spawn is bad then quit and restart. :) Did not work! I grabbed a beer. But at this time those real developer’s skills started to shine. Arttu had implemented real A* in Clojure, Jüppe had found Haskell library for that purpose, Elixir guys got their stuff up and running etc. We as bloody Managers got ass-kicked at last! Arttu won the close match. Try-hard category was won by the Node.js implemented semi-automatic WSAD-controlled bot, which of course could not beat the Computer! Final Round for the Developer! We got to sauna and grabbed more beers. :)
As we got beaten so bad with Teemu in the last round I call the decision for Developers. But I would call it a unanimous decision. We appreciate quality much at Solita and this experiment showed that good quality helps coping with ever changing requirements (different maps in this context). But in real projects we need to struggle also with different aspects like price and time. Sometimes the lifespan of the product or service is so short that quick wins might be worth to take. But beware - never lose the quality totally! I encourage you to discuss these aspects with your own project team. Different persons have different views but you should all come to some common opinion of the attempted quality level. But at the end quality, time or price is not everything. The fun is and indeed the Codecamp was! Thanks for the organizers and participants!