As a freelance software developer, I have a certain privilege compared to being employed by a service company, that is I can choose to stop a contract. In my previous job, it was certainly possible, but it was mostly better to go where my company wanted me to go. People who made a fuss were usually regarded as poor elements.
So now that the choice is mine, I have to learn how to choose and that starts with the question "what is my goal ?". And by "goal" I mean short term goal. I do not really want a long-term goal as I'm sure that I will probably change my mind before reaching it. The difference is for me that a short-term goal is a goal that I'll be able to reach before my mind goes elsewhere.
Career-wise, when I started freelancing, getting a first contract was enough of an achievement for me. Contract's content was secondary. With this freelance achievement done, I took a step back from my current contract to reflect on it.
On a technological level: the project is great. Big data stack composed of Hadoop, Kafka, Drools, as well as other interesting technologies around the Java ecosystem. The business consists of monitoring events coming from the electrical network and sending actions to try and fix problems manually or automatically. Business rules are very complicated and mastering these can take a long time, especially to dive into the intricacies of the system. Not only is it complex, but it is one project among hundreds of other projects with which it integrates. The business is so vast and nebulous that one could spend years mastering it. Some experts here for at least 5 years still don't master all of the business.
My primary task was to implement a Disaster Recovery Plan. This meant replication of data between data centers as well as a list of actions (automated or manual) to switch from one to the other if something goes wrong. This is an important task as if something ever goes wrong, this is probably the only chance to maintain a working production environment. But all I've worked for may also (and hopefully) never be of any use.
This is not what I want. This a bullshit job.
The term might seem offending, of course, the job is not completely deprived of any use and this tacky title surely got you reading. In order to be useful, I have to feel a lot more helpful to the end user.
The project I was on was at a mature stage. On a technical level, it was good but could be better. As far as business concerns go, it should not be enhanced further, at least not in a radical way. This I understand from a business perspective and added value.
I have to admit there were really good things that make this not so much a bullshit job and worth going to every day with a smile.
- Talented people with which I can exchange through discussion and code reviews
- Self-organized teams: we could structure ourselves however we wanted, elect a leader, or have no leader, choose a workflow that suits our activity as long as we held our objectives.
- Great breakroom with a lot of space, well lighted, games and people regularly bringing food for everyone in the morning.
So, for my next contract, I'm looking for a few things.
- Software architecture and technological freedom/responsibility
- Getting close to the user and business
Currently, my next contract is on a new project, and as a tech lead, I will be in charge of technological architecture. This project is an internal tool used for by all employees. I should, therefore, have more latitude on the technological side and on the user side. Can't wait to see how that goes.