As a programmer applying for a new project or a new job, your employer will always ask to see samples of your code, will always ask you to pass a technical test. But this test should also be taken by the employer. He/they should also provide samples of the existing code in the project, they should also provide with honest information about the members of the team and their experience and skill levels.
It happend to me, not only once to be a bit too enthusiastic because I found a new client. In an age of financial crisis and budget cuts, I was actually feeling happy to still be able to find contracts as a freelancer.
Being so enthusiastic and an easy victim of marketing and sales persons, most of the times I was just giving my clients credit when they were talking about their own company and the project they were hiring me for.
But now, I just consider that the perfect key to a failure or frustrating project.
At the time I was getting close to the finish date of a contract with a really cool company in Berlin (Rocket Internet), I was contacted by the CEO of a new grounded Start-up. That made me happy. I find it very challenging and rewarding to work for Start-up companies, get to know new people, new ideas, new technologies, being able to contribute and in the same time to learn great number of interesting things.
The project is really cool. It does not only sound cool, but it is actually fun and I see a nice future for it.
During our initial talks (so called interviews), of course I got to the point where I also had to ask questions about them and their project.
I was initially pleasantly surprise to find out they’re not using an open-source framework. Nowadays, when someone is telling me they are not using an open-source solution, and they have their own developed framework, let me understand that at least one member of the team is an experienced software architect building eventually something very specific and very optimised for the project.
So, I signed the contract and canceled any other meetings/interviews I had planned at that time.
The moment of truth
Part 1: checking out the project from SVN, installing/configuring the project and trying to take a look at the code.
I’m not complaining about using SVN in an age where git is The King. As long as there is a versioning system used, I’m pleased with it. But what amazed me was the coding style.
All the classes in the project were created in the PHP4 style. Do you remember the time when PHP was not using __construct(), but instead one was supposed to write a function with the same name as the classe’s name? EXACTLY!
That also means no real OOP architecture, no encapsulation, no abstract classes, no interfaces, no inheritance.
Database? It sounds like a fairy tale, but … there is no foreign key whatsoever, let alone transactions.
The explanation for this was: “The project was started a long time ago and we just developed further that code.
Part 2: expressing concerns and suggesting improvements.
I’m not happy (at all) working with this kind of code and I did not want to end-up being forced to develop THAT code. So I stated my concerns loud and clear: The code is bad. We cannot talk about a refactoring, this needs to be re-written from the scratch.
The reaction was somewhere between what I was hoping and worst-case-scenario: “Yes, you are right, but we need to show something to investors to get more founds. There is no time to re-write this now, we will have to go further with what we have till we can show something to the investors.”
Although I don’t like that, I cannot argue with the “investors & funds” part. I do want my invoices paid, after all.
Conclusion: now I am trapped in a project that frustrates me because of a code written without any coherent architecture in mind.
From time to time, I do check when and how they are planning on re-writing the app.
And yes, I did consider starting the new code/architecture by myself, developing it in parallel. But there are 2 problems here.
1. Since they are not planning on re-writing the project very soon, they don’t actually foresee any budget for that right now.
2. If find it unethical to develop it as a personal project. It’s not my business idea. They put in a considerable effort to develop the project’s ideas and specifications.
I’m wondering if I should do it in my personal time and when I’m ready with my first version just to present it and hand it over together with an invoice for the time I spend developing it.
Anyway, the lesson is learned. When applying for the next job, no matter it is as a freelancer or as an employee, I have to get to know both the team members and the code BEFORE signing the contract.