Thursday morning I’m not feeling great. There’s been something going round the office – both Amy and Andrew are off sick – but I can’t tell if I’m ill or if I’m just physically exhausted from a new diet and exercise regime (I’ve given up alcohol and chocolate to coincide with lent and I’ve recently started cycling in to work). I’m also frustrated with the fact that I’m still not set up to develop on Android so I’m not in the greatest mood when I start work.
After the two team standups and a much-needed coffee (extra shot of espresso in my long black today), I jump into finishing off the Android SDK installation. I seem to be having some trouble with versioning but I’m not sure if it is due to the wrong version of the SDK being installed or if we need to update some of the dependencies in our build. Jordi has been avoiding updating React Native for a while now as the last time he tried it resulted in a fair bit of pain and he hasn’t had to do a clean install and build on Windows for some time since he primarily develops on Mac.
I try and do the initial digging myself but it’s clear by 11.30 that it’s going to be much more efficient to ask somebody else for help. Valerio, one of the developers from the Space Monkeys team, volunteers and comes over the help me diagnose the problem. Together we change some of the debugging and we finally get a sensible error message; it looks like one of our plugins needs a higher version of React Native.
We can solve this by limited the version of that particular plugin to the one that we currently have installed elsewhere – our current packages file is set to pull the most recent version it can – but Valerio suggests a git-based tool which can perform the upgrade for us and take care of merge conflicts in packages upon which we depend. I’m not entirely sure I understand the upgrade pipeline at this point but Valerio is pretty confident that this is what is needed so I let him take the reigns. It does take some time to run however so we decide to break for lunch.
Today’s lunch I spend writing up the blog from the previous day; my head feels fuzzy so I’m not particularly sociable, I sit at the break out table but I take minimal part in any conversation and just focus on the writing. By the time I have finished lunch the upgrade job has finished running but there are still some versioning issues. It looks like there is a conflicting version of the SDK on the machine; it’s an old dev machine which was used by Jordi before me and he has previously been through all of this, only the relevant files get installed to personal document space so I hadn’t picked up on this before. I have a horrible moment where I realise that much of the pain I have just been through was probably unnecessary, then I take a moment and focus on the job at hand again.
I fix the conflict and build the project and finally it seems to be doing something. There’s one last gotcha – in order to integrate with our Teamcity build some of the react-native build stuff has been parameterised and this interferes with the auto-launch in the emulator, so after the emulator starts I need to actually click on the negotiator app icon to start working – and then, finally, it works!
We do need to decide what to do about the upgrade though. Jordi is nervous about it as previously it caused mayhem with a number of our plugins and he had to spend a significant amount of time fixing bugs. He doesn’t believe that he has time to do this right now and I agree, but I do think that we should be trying to keep our version at or close to the latest one so we should definitely schedule some time for this. It’s a candidate for work that can be done in the mini-sprint that we are planning when a number of the developers are taking a week’s holiday. In he meantime, I’ll work from the upgraded branch and cherry pick any commits across to the current development branch as and when I complete tickets.
In the afternoon, I start to look at the router bug. This is a little ambitious – it’s been months since I’ve done anything with React or React Native, and even then I didn’t get far beyond enthusiastic beginner. Trying to tackle a bug of this size off the bat feels a little arrogant, but my purpose is not to show off; I believe that Jordi will knock off the remaining feature tickets far faster than me and I don’t want him to get bogged down in a rabbit hole that could end up eating days of his time. Instead, I would rather take some of my own time to investigate whether it is easily solvable and, if it is not, to be informed enough to participate in a conversation about potential temporary workarounds that we can look at in order to get the release out on time.
As a secondary purpose, this is also a learning exercise – a chance for me to dig deeper into the code so I can get my head back into a React Native space. We’ve been saying for weeks that we should promote more cross-functional development within the team so that we’re all able to pick up front and back end tickets, and I’d like to be in a position to help with any front end bugs that come up after the scheduled bug hunt next Wednesday. I think a bit of time spent getting my head round the application internals will help me start to reach a deeper level of understanding of how it’s all put together.
I’m relatively uninterrupted for the rest of the day. Nothing comes in from dev support that needs my attention and everybody seems to be in the deep focus phase of development. Either that or the general feeling of moodiness that has resulted from my sense of low health today is creating a no-go area around me. I normally try to be as approachable tomorrow but today it’s a struggle to even focus on one thing so I’m quite happy for the peace.
Before I know it it’s 18:30pm. I think I’ve mapped out what the problem with the router is and where it is occurring. It looks like it’s emanating from a plugin slightly discouragingly called ‘experimal router’ and is related to the fact that we can’t have two Scenes with the same id on the routing history (i.e. we can’t go from chat to property information to renter information to chat again, because chat is where we started from). Knowing what the problem is and knowing how to solve it are too different things however and I don’t think I have the brain power for the latter today, so it is definitely time to go home.