“What is it like being a Software Developer? What is going through your head when you work? Can you explain it to me without going into too much technical detail?” People ask me these questions from time to time. Younger people who are usually students wondering which career path to take. As well as older people who are thinking about trying out something different, maybe switching their job. This is my attempt to bring clarity to this topic without diving too deep into technical terminology.
I ended up a little bit sick last Christmas. Sick enough that I wouldn’t enjoy outside activities but not sick enough to keep me from doing something indoors. I decided to pick up a game from my ever-growing backlog of video games. After playing for a while I remembered why I stopped playing the game last time. The game mechanics are solid, but the user interface is lacking. A lot of important information is not displayed or is displayed in a very inaccessible manner. This is a huge issue for a 'take your turn' based strategy game where the success depends on making correct strategic decisions.
I was frustrated but sometimes frustration can be a strong motivator to persevere. I was confident that if I had more information I could make better strategic decisions and achieve success in the game. I asked for help on the community forum and I was pointed to game data files by the community members. I inspected the files and I found almost all the relevant information there. The problem was that it wasn't really in an easily accessible format, mainly because the data is spread across multiple files and it looks like this:
Faced with making my eyes bleed trying to read these files I decided to use a program called Calc (spreadsheet viewer software) to read the file. It helps a little bit, but it was still really difficult to use. What I was wanting to do was compare these different file items. After trying to compare two arbitrary items present in the data file I gave up on this approach and became even more frustrated.
Then an idea came to mind: What if I build an application that will display the data the way I wanted? The basic idea isn’t that complicated. I was basically just trying to view data in a large table with rows and columns, with each item sitting in one row. I wanted to access the item's data and compare it to any other item. It needed to be accessible, to use links for navigation and have filtering capability. It couldn't be that difficult, right? Suddenly, I had completely forgotten about the frustration I felt and started thinking of a way to create such an application. I became very excited about all the new potential data viewing possibilities.
First, I needed to do a basic project setup. I decided to reuse a setup from an older project so I tested it and it seemed to be working fine, however it was doing something I didn't need, it was pre-processing images. I didn’t want this feature on this project, so I looked up how to disable it. I tested the setup again and now it didn't work at all. After some time I noticed that one module of the setup had an outdated version and needed to be upgraded. Ok, let’s do that. Let’s test it. Does it work? No, of course not. The module upgrade also upgraded another module which was causing the problem. After some time I realised that the new version of the module needed a slightly different configuration. Cool, let’s adjust the configuration and test it. Finally, it worked. I got a taste of satisfaction but it was too early to celebrate just yet as this was just a basic setup. I hadn’t actually implemented any of the features yet!
I needed to extract all the relevant information from the data files. The basic structure wasn’t too complex. It was just a table with rows and columns. The problem was that some columns contained composite values (multiple values packed together) and there was almost no documentation available. After some guessing and testing I figured out what most of the data meant, but there was another problem: the data contained errors and inconsistencies such as upper case - lower case name variants, typos, different list separators and some items had references to non-existent items or lacked a unique identifier. I couldn’t fix the the data file as I had to treat it as 'read-only' which meant I couldn't change the data because the file could only get updated by a new game version. I needed to handle each edge case one at a time and eventually I’d be able to get to a point where all the relevant data was loaded properly. Well, that wasn’t so bad. It was finally possible to see each item properly displayed in my new web app. Doing the work on the data files greatly increased my understanding of the game mechanics. Learning is part of the problem solving experience and gives me an important sense of progression.
So, after that I was finally able to refine the display of the items and most importantly implement the comparison feature, which allowed me to compare any item with another item. This way I can make the best strategic decisions in game! The item comparison clearly highlights the differences between items which makes it super easy to spot the difference. The picture below illustrates the item comparison.
Sharing with the community
At this point I was happy with the application and I could finally use it the way I intended. I felt very satisfied and I could stop there as my initial goal was fulfilled, but I asked myself “What if someone else was in a need of such application?”. I could certainly share it with the world so anyone who needed it could use it.
This idea sounded great to me but it was important to keep in mind that making your work publicly available makes it a target for criticism. People do complain and I would confidently say they complain more than they praise in general. On the other hand, part of the criticism can be constructive and there are people who will also want to contribute to the project. This doesn’t include only developers, for example artists or UX designers may create some nice UI components like icons and images. Overall, I believe that it’s a very good idea to share your project with others and so I did.
The feedback I received was overall positive, but some members complained for various reasons. For example, I had to make my own mapping between item names to make up for the missing data in the data files and it was partially incorrect. The member provided me with correct mapping so I was able to fix that. Other members requested new features and improvements on existing features which I was happy to add as most of them were very reasonable. Generally I find it very enjoyable to interact with other people who are interested in the project I’m working on. They can often point out things that you fail to notice as there are limits on what you can do as an individual. After a while I even received an official endorsement from the game publisher and praise from lot of community members. I definitely think the work was worth it. I really enjoy creating new things and reading feedback from the users.
I hope sharing this experience explains a little bit of how developers work, what frustrations he or she may encounter and where the satisfaction comes from, but also how he or she works in a team and in a wider community.
Are you interested in becoming a member of the SilverStripe team? Take a look at the openings we have on our careers page!