The COVID-19 pandemic has been the toughest test that I had to endure in my work life. Unlike many others, I did not lose my job however I was the person on the other side of the table having to give the bad news. It is with much sadness, I had to let go of more than half a dozen of my talented engineering staff since the start of this year. It wasn’t an easy thing to do, however, it allows the company to survive this pandemic and come back on the other side of it stronger.
At CellOPark, I lead the technical side of things across multiple products. In a nutshell, I am responsible for the following, for each product:
- liaising with the product owner about feature roadmap,
- liaising with the CTO about technical roadmap,
- release engineering,
- code reviews,
- prototyping new ideas,
- keeping up with new tech,
- one-on-one with team,
- interviewing candidates,
- handling production issues,
- making technical debts disappear,
- having architecture discussions with the team, and
- writing code.
The list of day-to-day tasks looks quite overwhelming, but I assure you it is not all that bad. Its all about letting go. I’ll explain.
What is important is seldom urgent and what is urgent is seldom important.
I didn’t start my role by being in-charge of all products. I was initially responsible for one product. As I got myself familiar with it and the business aspects surrounding it, I was able to formulate a technical plan as to how to attack the problem at hand. The Cynefin model was quite a big help. Seeing this plan thru is how I managed to gain confidence in myself and the team, which in turn allowed me to move on to the next product.
I pride myself on my organisational skills and thoroughness. Being thorough takes a lot out of you. You want to make sure that you spend the time on things that really matter. Overtime I learned a way to classify pieces of work that required my immediate attention as to those that could be passed on to the team to handle. I recently found out that the approach I am utilising was initially introduced by President Dwight Eisenhower as Eisenhower Matrix.
The matrix is split into four quadrants. I’ve classified some of my daily tasks within these quadrants to give you an idea of how this could help you manage your workload. I personally find it important to work on items that are on the technical roadmap. I equally find it important to instil a good coding discipline in the team and be available for them for help and discussions. My secondary priority is help eliminate manual work that is involved in day-to-day operations such as deployments, releases and manual testing.
“There is no code faster than no code.”
You do not always know which tasks can be delegated. Hindsight is a amazing thing, if we learn from it. For example, my team is very capable of investigating and handling production issues when they are armed with the necessary tools and knowledge. My goal is to make sure that they have what they need, so that I can relieve myself from this duty. However, there are cases where my presence is required, but this is an exception and not the norm.
An important lesson I learned, was that not every email is worth your time and not every technical discussion needs to include you. We need to pick and choose our fights.
I hope that my findings has helped you with your endeavour.
This article takes the aspects discussed in Are you a tech lead? and tries to define what it means to be a senior Software Engineer.
Senior Software Engineer is someone with experience, a team player and takes ownership over their work.
Lets put each of those items under the microscope to understand them better. Continue reading “Are you a Senior Software Engineer?”
This guide will help you get started with developing React Native apps in Windows, hopefully without too much hassle. I’ve included screenshots and screen-gifs where required to make your life slightly easier. We will be deploying our app on a virtual device setup by Android Studio.
This is a great article if you are interested in understanding the problem behind updating states asynchronously in React using setState and finding out how to do it properly. He also included a pen by Sophia Shoemaker that demos this problem and the solution.
ASP.NET Core had its configuration system re-architected from being limited to reading from XML files to reading configuration settings from any key/value based settings files such as JSON, INI and XML.
In this article we will explore the minimum amount of work required to read these settings out in your ASP.NET Core application. This includes taking a look at how it behaves when deployed in Azure. Continue reading “ASP.NET Core AppSettings & Azure”
If you are a .NET developer who has been pushed into the deep-end to learn React like yesterday, this article will be your lifebuoy. Using the concepts that you are already familiar with as a .NET developer, I will try to explain how React and Redux sit together and their full lifecycle. After reading this article, you will be able to follow what your fellow developers are talking about during the Daily Scrum Meeting and not feel left out.
This article is just like the lifebuoy, it is not going to swim you to shore but will keep you from drowning.
Do you want to …
- Do you want to create a cool React app?
- Do you want to create an API for your back-end using .NET core?
- Do you want your React app to talk to the API?
- You don’t know where to start?
If you answered Yes to the above questions, this StarterKit is for you. Continue reading “StarterKit for React-Redux & .Net Core”
We can write perfectly functioning code, that is simple, readable and optimised. But when it comes to testing, it adds another dimension to your code and changes the way you would approach coding. Those who have developed in C#, you know why we need Interfaces and implementing it will change the way you approach writing your code.
The following issues are known pain points when it comes to testing ES6 modules:
- Named Exports
- Multiple Exports
We will use a Warehouse example, which uses Mocha, Sinon and Chai, to explore how we can rewrite the code to get them to pass the above mentioned pain points, and still have them function properly. Although the title mentions spying, the idea is that if you can Spy then you should be able to Stub and Mock.
When you advertise online, as an advertiser, you are paying to acquire more business or to increase your brand & product exposure or both. The cost of online advertisement is based on what do you expect to get out of it. There are several basic metrics of an advertisement to help you out with it.
As developers, it is a difficult task to explain to our product owner the business value of a piece of technical work that needs doing. It is also difficult to provide risk analysis for these tasks. In turn, as a product owner, it is hard for them to prioritise such technical work with out coming across technical reasoning and jargon.
At Barnardos, together with Readify consultant Abdelmawla Mohamed, we are exploring how we can define these technical work in such way that it is easy for the developers to describe the work involved and the risks associated with it without using technical jargon, while still providing a common language and consistent representation of impact and risks to help the product owner with prioritising.