I would guess the project was (is?) running pretty much just as the people in charge wanted it to run.
10 years in and they were still billing -- more than ever -- for a project that would have completed 7-8 years previously if things had been done according to plan.
All the seemingly massively stupid and counter productive decisions made make sense if the goal is to confuse matters to make it seem like progress has been made or reforms instituted or bold corrective actions taken while actually keeping the project hopelessly mired.
It's like the Producers. (Though without the ironic twist... in reality it surely must be impossible to accidentally complete a software project successfully. No doubt, without the laughs either.)
But they are being fined at E1000's a day. In the UK we now have projects forced to go through regular if not frequent traffic light reviews - a panel of actual experts reviews the project - i think it was one such thing that killed the NHS network project (12 billion over spend). one panel, one review. saved money.
i suspect the french gov will have put something similar in place, but i do agree with the final paragraph of the piece - it's probably a corrupt practise not top management stupidity.
Except, as these things go, what is being reviewed is whether the projects meets its arbitrarily nonsensical, self contradictory requirements and whether all 1528 required process artifacts have been properly archived in manila folders, not whether the project makes sense or follows basic economic principles.
that killed the NHS network project (12 billion over spend)
No money to give nurses a pay rise but IT consultants laughing all the way to the bank. And the same consulting companies still have their noses in the trough.
That's the fallacy with hourly billing. The alternative model is value-based pricing, where you price the solution/intervention upfront.
Of course, this becomes more expensive upfront as well, because the consultant takes on the risk. Hourly billing seems cheaper to the client, since they have to take on the risk instead.
Very few large projects like this are based on hourly billing / time and materials.
Proper procurement would do fixed price contracts (outcomes based) with a set number of contract variations in place. Where large consulting companies / system integrators secure their margins (and tangentially try and screw over their customer) is by making the fixed price offer really attractive and then to hard on scope as requirements change to pump through as many contract variations as possible at a premium price.
Public contracts (like the one mentioned in the blog post) are "valued-based" ("contrat au forfait" in french).
But you can circumvent these by over-billing contract additions/change in requirements ("avenants" in french). In theory those are limited to 20% of the original amount, but with contract renewals and if the government agency already sunk large sum of money into the project it's possible to bypass this limit.
Doing a first checkout requires taking an appointment with the version control team, usually granted a week later. Editing files is not permitted without authorization from middle management.
Ah, I recognize this. It is a special level beyond workplace hell, Tokugawa shogunate hell, where the entire organization is structured to provide as much busywork for as many superfluous management layers as possible. Fifteen porters for every samurai...
The Tokugawas liked to spy on their daimyo and samurai, the better to maintain and consolidate power. Giving each samurai fifteen porters was a great way to make sure that eyes friendly to the shogun were on that samurai at all times.
I'll leave the workplace parallels as an exercise.
So what was the ultimate fate of the project? The 2018 follow-up post [1] says the boss was jailed for fraud, but doesn't say whether the project eventually shipped or was killed (or, even worse, is still in development).
"In a country like France, corruption is not uncommon at that level, goes mostly undiscovered and is rarely prosecuted. "
My brother is working in a construction bussiness in France and he has a handfull of stories of this type of high-level corruption (house built for the ex-mayor, refection work done for a lawyer, invitations to Roland-Garros...). But as the author have said, it's the same thing everywhere.
Not to mention that we have the former president Nicolas Sarkozy on trial for corruption right now. He just took a few millions from Muammar Gaddafi to finance his 2008 campaign.
And there were a slew of big international military contracts in the 80ies/90ies which were subverted to finance political campaigns (Taiwanese frigates, Agosta contract with Pakistan).
These scandals tend to be judged long after the facts (10 to 20 years), and the verdict is generally underwhelming to say the least.
I've said high-level to contrast to street-level when you slip a bank note to avoid a fine or go first in the queue, but his stories do not implicate that level of corruption, at most local politicians.
> It is forbidden to come to work after 9am. One day, the site manager stayed behind the main gates and fired on the spot every person who came in after 9.01am, including a number of managers and sales.
This surprised me. I thought it was extremely difficult to fire people in France.
"Among the many comments, some surprised me. Seems lots of people cannot believe you can be fired in France for being 1 minute late at work. Sorry to burst your bubble, mates, but this is what SSIIs (contractor companies) were invented for. You don’t lose your job, you immediately lose the contract you are working on (no justification needed, this is what contractors are for)"
So they were not really employees, but consultants.
Still, he also wrote:
"For people who have a direct contract with the company, same story. Nothing prevents the company from saying you have committed a major blunder, fire you on the spot, and see you a couple of years later in court (Prud’hommes). Yes, that will cost them money if people choose to sue (I hope they all did). When you are unemployed, are you really looking forward to two years of battle with your former employer, even though you know you will win?"
Technically, using consultants as French SSII do is illegal, but nobody cares. In factories, it used to be the same until 10 years ago when labour inspection finally intervened. We can only hope it'll be the same for IT/CS jobs in the coming years.
I had a colleague from our big consultant shop (Alten) who had spent 10 year working for the same big Telco operator (Orange). From what I understood, it was illegal, but I don't know the exact limit.
From what I remember, the upper limit is five years, but most "missions" are limited to three years because justifying so much time becomes complicated for companies. But legally, missions should be very specific, short, with SSII-provided material, and no imposed office hours... so far, haven't seen a single IT/CS consultant used as required by law.
Iirc thelimit is two years. Where I work some consultant workers did more than that in the same position, sued and were obliged to be hired by the client as they were considered already de facto employees.
I've worked as a consultant in Germany for 13 years, and pretty much every large project has consultants in it, often half the developers are consultants. IBM, T-Systems, Capgemini and accenture each have around 5000 people doing software consulting, and there'S hundreds if not thousands of smaller consultancies.
But those consultants are still regular employees of the consulting company, right They’re not independent contractors. I guess a client company can say that they don’t want person X in their project anymore but that doesn’t mean X is going to lose their job.
The thing is consultants are not "regular jobs". Developing with only consultants is very unusual, expensive, and consultants are the minority everywhere i have ever looked. Employers are not declaring employees to be consultants to safe money or to be able to fire them more easily. (At last on a large scale.)
It's the same thing in France, but it seems that the consultant/employee change from company to company. Currently I'm working for Alten, which has 28000 employee, but I don't know how many work in IT.
Skilled consultants are to some extent mashed together with unskilled labor in politics and law and there has been a very long campaing now to basically make hiring contractors extremely unattractive.
So now you hire an engineering consultant, train him/her for a few months on the job and are forced by law to let that person go after 18 months to repeat the cycle.
A startup I once worked at a decade ago decided to hire a sales executive in the UK. They initially hired him as a contractor and only made him a full-time employee a few months later because in the UK you can easily fire a contractor but not an employee, and they really wanted to make sure the guy they hired was the right person for the job.
(To answer the inevitable "was he the right person?": Yes, he was. EMEA was continually our best-performing sales region the whole time I worked there, and he built our EMEA sales infrastructure from the ground up. Some years later, after the company exited, most of the senior people regrouped at another startup. He was in charge of EMEA for a few years, and then he was promoted to CEO.)
You can actually fire without cause in the UK within the first 2 years of employment. Until that period elapses they have no recourse unless they can show discrimination on a protected ground (e.g race, pregnancy).
However, most UK employers would use a probation period or initial fixed term contract (true employee with a fixed end date), rather than a non employee contractor.
It is unlikely your company hired the guy as a contractor because the set up for becoming a self employed contractor (your bank will hate you, an umbrella company takes 10% of your income, you have to register as self employed abd fill out extra tax forms for ever), would probably kill a hire, if you weren't hiring an existing contractor, who wouldn't hang around to perm.
> Coffee machines are regularly out of order for several days. Somebody who drinks coffee is less productive than somebody sitting at his desk, typing away precious lines of code.
> The same coffee machines are switched off whenever officials come to visit the site, to give the impression that everybody is at work.
Inconceivable! I'm convinced this person worked for aliens in human skin suits. Think Edgar from Men in Black. Obviously missed the memo from high command where it is mentioned that humans perform better when caffeinated so supply them with plenty of free coffee and tea to keep them productive and ready to harvest, er, review.
I love how the first thing complained about was the use of C++ for the project. Compared to the lack of sane source control and release management, inexperience of the team, dozens of layers of abstraction, management bureaucracy, toxic culture, basic facilities like toilets being inoperative...
I think using C++ was literally the least of their concerns.
They also started, if I'm doing my arithmetic right, in 1996. Honestly, I could see C++ having been their best choice back then. Every language I would rather do a large project in is either newer than that or would have been pretty immature for a large project in the mid-90s.
I worked on a mega-LoC (millions of lines of code) C++ project in the late 90s. It wasn't even (to the extent I could honestly tell at that point in my career, anyway) a particularly hellish codebase or design, and suffered none of the madnesses described in The Fine Article.
(Of course, we were sub-sub-contractors working only on designated parts of the application. The stuff I did touch was consistently sane enough, though, that I don't think I'm too out of place in positing a legit minimal degree of not-terribleness across the rest of the project.)
My first job involved a 6 hour compile caused by that someone desperately had tried to beat a braindead homemade interpreted language into submission using a c preprocessor stage. Function calls where largely macro expansions...
All errors was reported as : syntax error on line 1. Fun times.
Surprised they didn't get fired for reading/learning at work when you're paid to be programming all the time. Although I've never been fired for reading at work, I've had it made clear on multiple occasions at different jobs that reading wouldn't be tolerated, and I was already down a couple of strikes.
What in the actual fuck? I can't fathom how this would even theoretically work. Like people ostensibly would just memorize every api and library they might ever have to use in advance?
Sure you are. But I dont pat consultants to learn on the job. Those people were consultants and while I'd rather fire someone who didn't learn anything during a year internally, I'm definitely not paying a consultant to learn what s/he has been sold by his firm to be an expert on.
You pay a consultant to understand your problem and sometimes solve it. If you've hired them and they don't know your domain then you're going to need to give them time to learn.
It's on you for hiring someone that didn't already know everything. Don't expect them to put in free time to understand whatever infrastructure and code you have in place.
Wow. So it's acceptable to spend a month re-inventing a wheel, but not one hour learning that it already exists? I wouldn't have thought such a backwards employer exists.
You can't be serious! What if you need to look up something? Is google forbidden too? Do you only pay programmers who have everything memorized?
And isn't programming a matter of continuous learning? How is anyone supposed to do a job like that and not be learning? You really expect your employees to learn everything they need to do their job outside of work? WTF?
C++ as a language for an enterprise business logic software like a payment system in this case? You put together Stroustrup, Thompson, Pike and Torvalds and they still would probably fail to deliver a fully working project or at best it would be very past the delivery schedule (until of course they "cheat" and develop appropriate DSL and compiler/runtime for it first :)
There are lots of people on the pipeline that take their share of our taxes to deliver to "the letter of the contract" [1], without considering the intend.
Closest I've been is when an agency sold my time to another agency which sold my time to the end client, who paid me with "profit" from insurance money ( the end client was an insurance agent ).
And as I'm not in my 20s anymore and I look at how government related IT services work, I'm so much afraid about everything else happening around me. Questions like "What about the tram I use every day? There should be a company maintaining these things. Probably is hell there as well."
There are a lot of jobs like this in economies where stasis and stability are prized over creative destruction. These organization continue to exist because companies are considered sacrosanct ... they are sources of jobs that are to be protected at all costs. The jobs themselves are sacrosanct. Very hard and slow to fire people. So people hire slowly. So there are few jobs. So the few open positions are positions where the employer abuses the employees.
Have you ever noticed how many smart French programmers there are in the USA? People vote with their feet when given a chance.
With a moment of silence in sympathy for this poor sod who is sharing a special level of pain few of us have encountered...
> With so many files in store you may think that two people working on the same file would be rare, but it turned out that most work happened within the same 100 files or so.
Not really surprising, unfortunately. This is a hallmark of the Big Ball of Mud. Thousands of code files and yet people keep tripping over each other.
I think I've used the source code control system mentioned in the article. It was indeed a pile of garbage. Took a couple days of training in it, and the folks running the class kept telling us not to use certain checkboxes and features of the UI "or bad stuff will happen".
It's been nearly 20 years and hard to remember. I think it was called Continuus, but that they changed their name. A sibling comment refers to 'Synergy' and that sounds right.
Just another proof that if a product involves the word "Synergy" in its marketing, you should run away fast.
In Polish there are different words for free as in free speech and for free as in free beer. But, interestingly, the words for "free" as in free speech and for "slow" are the same, so "wolne oprogramowanie" can mean both "free software" and "slow software" :-) If I remember correctly, the etymology for both words is "wola" which means "will" - if you were free, you could act on your own will, but you also could do things on your own pace. Slowly, that is. But I'm not completely certain if I remember the etymology right, so take it with a grain of salt:-)
What I have witnessed there is beyond everything I could possibly have imagined in terms of software engineering. Far more serious than just a lack of professional competence was the utmost contempt for human dignity which at some point made me compare the whole experience to (what I imagine can be) jail.
I think these two actually go hand-in-hand. Happy Monday!
This is the 2nd 'French' horror story I've heard. An ex-colleague (ex-pat french man) told me an almost exact same story (different software: numerical simulations). Of course bad software happens all over the globe (Looking at you Canadian Phoenix pay system).
However (to me) there are some cultural issues which make things even worse it seems : a VERY rigid chain of command structure and a strict 'political' hierarchy which makes changes happen very very slowly and not always towards the best outcome (for the project, billing is $$$ great).
As mentioned each country has issues, but I don't know if I could go into such a strict hierarchical corporate environment.
> No dynamic library linking: executable sizes in the range of several hundred megabytes
I thought that with Golang and the popularity of static linking for apps in Docker containers that this was now considered acceptable again (tongue firmly in cheek).
If somebody is going to run statically linked binaries, they would understand the security implications of that, and that they need to be able to rebuild and redeploy their binary if a security hole is discovered in a third-party library that was linked into their program.
They would already have CI/CD processes in place to rebuild the binary/container, run regression tests and redeploy the application/container to production, surely?
So what difference does it make if it's one or one hundred applications/binaries/containers then?
> And there are people who claim performance doesn't matter, only correctness does. Hmm..
Performance is meaningless if the code is not correct.
After all, I can make the code arbitrarily fast if I'm not going to be held to any standard of correctness: It always returns "FOOBAR". Done, and very, very fast.
> Also: we chose C++, because it is fast.
That is a bit naive. C++ is a standard, so how fast is a stack of paper?
C++ is only "fast" because people who care about performance use it and a lot of people who are good at compilers work on gcc/intel/llvm. If the LLVM team decided to spend 5 years making python "fast", I bet they could make it benchmark just as well as C++.
No, It’s not possible to optimise Python like c++ because of the characteristics of the language.
Plenty of very good people are working on Python optimisation and it’s still painfully slow and will always be.
Backwards compatibility with native extensions is the single biggest problem preventing optimising both Python and Ruby. If we could completely throw out C API compatibility like LuaJIT did, then we could make huge improvements to Python and Ruby performance and memory usage.
I have been using Python for a while now, and its rarely that the language is too slow (I have encountered it on one problem). A lot of Python is for web programming where you optimize the database and set up caching to improve performance. If you want to do some heavy number crunching Numpy is apparently not far of C in terms of performance.
Obviously its a case of the correct tool for the job and depends heavily on the type of software you are writing, but in most cases its a different type of optimization that is needed for Python code.
Consider the end to end performance of a system - from inputs in (say, timesheets and HR data) to outputs out (bank payment APIs called, emails sent).
Would you bet the end to end performance of a system built by mediocre C++ programmers would be better than that of a system built by mediocre Python programmers?
To elaborate a bit: what I mean is, it is easier to build an acceptably performant system in Python than in C++.
Yes, an arbitrary algorithm will probably perform significantly faster in C++.
But that probably won't matter in a real-world system built from multiple integrated components, when the performance is more likely to be determined by the abstractions chosen and the system architecture in use. And IMO Python and its surrounding ecosystem makes it easier to make good choices in those areas.
John Walker has a program called fbench which is a floating-point benchmark built around raytracing. He's implemented it many times, in many languages, throughout the decades, beginning with implementations for the original IBM PC.
Anyway, the results are posted on the site, in terms of multiples of the speed of the C implementation, which is defined to be 1.0. The Python implementation is 2.633 (PyPy 2.2.1 (Python 2.7.3), Linux), and the Javascript implementation is 0.372 (Mozilla Firefox 55.0.2, Linux). Yes, it completes in approximately a third the speed of a C implementation compiled on full optimization (-O3) by GCC 3.2.3.
(The C++ implementation is at 0.939, GCC 5.4.0 -O3.)
Anyway, Javascript has been the target of a lot of people for a fairly long time, and, despite the fact it's a very dynamic (hard-to-optimize) language... well, the numbers speak for themselves. I have no doubt Python could be improved to a similar degree.
Well the link you posted is not very useful - Javascript is faster on a trigonometry benchmark and the author admits it's probably because GCC's trigonometry functions are probably slow and not optimized. If you switch them out to use better functions or use a different compiler, I imagine the time would go down.
That is only a very specific benchmark and as that post said the result is so strange probably because of the changes in the C trigonometric functions lib that slowed down a lot to increase precision.
The point, however, is that if the difference is down to library code, the language itself isn't imposing a penalty. That is what is counter-intuitive here.
There's more to it than that. C++ is designed for implementations to produce fast code. "Leave no room between C++ and Assembly" has been a guiding principle of C++. This is not true of Python, and thus the engineering effort required for an implementation to reach the same level of performance is huge, if at all possible.
> 12 years after [1996], the project is still active. The company recovers daily penalties by billing ever-increasing change requests to the government. The year is 2008.
So this was a project for a government agency in France that limped along for years.
Being from France and having worked in a company that deals mainly with government contracts, I've seen some of these aspects first hand.
The company I was in was far from being as horrible as the one mentioned in this post and management was not complete douchebags, they never fired people for being 1 minute late, didn't impose strict hours.
On thing to keep in mind is that public contracts are extremely unhealthy for all the parties involved.
The government agency as more rights than a private organization asking for the same kind of job, the agency can impose everything as long as it is written in the scope statement document (which is rather mediocre in general, can be vague, can be self-contradictory and some requirements may not be doable at all), your actual technical offer as little weight.
I remember a project where we got screwed by one pretty vague phrase mentioning a document (which was not provided during the call for bids by the way). In this document there was a lot of idiotic guidelines regarding software path installation, init scripts, users running daemons... that even the government agency didn't follow internally, and that made any kind of automation extremely difficult. We got screwed also by indecision from the client in this project, first Debian was chosen, then CentOS, then a mix of Debian and CentOS, I reinstall our platform 3 or 4 times before it was decided...
Then there is the other part. The bids are generally quite competitive, and the most important factor is the price generally, little digging is done on the actual technical quality of the answer. As a result, these projects are generally undersold, with the idea that it will be possible to ludicrously bill maintenance and changes of scope after the initial contract. As an example, I've seen a project where the risk provision was ridiculously low despite the fact a core piece of the system was an off the shelf software that existed only on paper at the time of the call for bids (and we lost several months trying to make it work and advising the editor).
Also, sometime some legitimate risks are taken but are not completely assumed. For example, most of these contracts will have a tight schedule, but in general, the government agency will be quite slow on their parts (buying servers for example). So it's safe to assume that your tight schedule is a bit more lax, and you have more time than what is written on the contract. It's taken into account in the bid, but in the end, management doesn't remember it and ask you why it took more than the tight schedule agreed in the contract.
Globally, everybody is trying to screw everybody at the detriment of the users who actually need the system.
And as an engineer, it's really not satisfying to work in those conditions, you constantly cut corners (unit tests? no.), you have to make due with what you have (I literally stole old servers that seemed abandoned by other projects to work) and you produce sub-par systems that will blow up in production (and you don't have access to production systems, so any bug is pretty much catastrophic).
I decided to left this company when a sales guy told me that we were losing money because we "engineer were too perfectionist".
I'd love to see this project on Github, though I'm sure that'd be highly unlikely - it's probably mired in a bunch of red tape, and there's probably some ridiculous technical reason why that wouldn't be feasible.
> Versioning is simple. Old software is version 1, today’s software is version 2, software in the future is version 3. Nobody can actually tell which version has been delivered to the customer.
That would be the notice period. Germany is similar, it tends to be 6 weeks to the end of the quarter, and it generally applies to both employee and employer. Though it often isn't quite as applicable to the employee...what are they going to do if you don't show up, fire you?
Sweden is also like that. You usually have to linger for two months before leaving after you've quit.
> what are they going to do if you don't show up
They will simply not pay you.
What you do when you're deep into a project like the OP describes is to quit your job by telling your manager that he's the worst you have ever worked for. Then one of three things happen:
1. He/she asks me to stick around for two months. I do and get paid regular salary during.
2. He says "hey, if you want to leave today, that's fine with me". I do but I wont get any more pay checks.
3. They are offended by my critique and says "walk away from you computer right now and never come back". I get paid for two months without having to work.
When #3 happens it's excellent because you will have two months of pay and enough time to find a new job if your resignation was in the spur of the moment. And no need to worry about bad references. When my up and coming boss calls my last horrible boss, someone who I happily divorced, things will work out fine.
Even though (middle?) managers are usually full of prestige and are quite easily offended, #3 has happened to me only once.
Although most don't, I try to utilize or take advantage of the system to the max in my quest to find a decent work place/project. I job hop a lot.
In Spain, the notice period is 15 days, even if your contract says you have a longer notice period and an economic penalty clause. 15 days including the holidays you have accumulated. The trade-off is if you leave you don't have the right to unemployment benefits, that only happens if your employer fires you.
Depends on the employer and employee. I've worked out a several month notice period; I wanted to leave, but didn't want to abandon a small team a couple of months before a hard deadline. Everyone involved was okay with that.
But then I wasn't leaving because the place was a train wreck; I was still engaged, and liked the team I was on. Had that not been true, it would have been a bad move on everyone's part.
At least in New Zealand, if you abandon your job, the employer can bill you for any costs incurred, e.g. if they had to get a worker from a temp agency, you'd have to pay for the worker, or at least pay for the extra costs of a temp worker.
That's incorrect unless you're a company contracting to an organisation, in which case you signed a contract saying you're going to stay and do X for period of time, and if they have to stop and scramble because you left without the contracting being breached - you're liable. Which is fair and universal.
Employees on the other hand have NEVER been docked pay in New Zealand and you are in NO way legally obligated to turn up for work. The only case you'd experience penalties is if you're a doctor, nurse, teacher and the like where you're likely to receive license/registration repercussions from a governmental board.
That's only in the case where you're over-paid, or paid up-front - in which case you've been paid for a month, and if leaving in 2 weeks you'd only be paid for the time you worked.
Very different to being liable for finding a new hire.
The employment court of New Zealand is very favourable to employees. Even if something was contractually obligated - it can easily be null and void by the court if they deem it unreasonably overreaching by the employer.
> what are they going to do if you don't show up, fire you?
They would fire you for grave offense (I'm not sure what the right word in English would be). But even firing or giving one's notice is long here, around three months.
When you're a "cadre" (most engineers are), you can leave or be fired on the spot for 3 months (now 4), renewable once (so then at most 6 months, now 8 months) without any notice, no need for a good reason, it's just over, bye bye, here's your cardboard box and get out, US style.
So in this case, what could happen? either you're a competent engineer, got just hired and sent to this circle of hell, you'd probably leave the next day, no regrets; or you're radically incompetent and you just stick to this job and salary, until 2 months and 29 days later the manager just fires you because you're no good (and he can). Rinse, repeat.
You have to work for 3 months before you can quit an employer in France. It's not "at-will". At least that's how I interpreted it, and given France's stronger labor laws I wouldn't be surprised if that's the case.
That's exactly how it's done, except in Alsace-Moselle (the German part of France during a few wars) where it's two weeks when the employee wants to leave and two to four months (depending on job-specific labour laws – convention collective – and seniority) when the employee is fired.
Actually it depends. When you're on probation period in France you can quit as well as be fired on the spot or within 2 weeks depending how long you've been hired for (don't remember the exact timeframe). Then after your probation period is over (it can last from 4 to 7 months) there is 3 month notice period on both (employer and employee) sides.
10 years in and they were still billing -- more than ever -- for a project that would have completed 7-8 years previously if things had been done according to plan.
All the seemingly massively stupid and counter productive decisions made make sense if the goal is to confuse matters to make it seem like progress has been made or reforms instituted or bold corrective actions taken while actually keeping the project hopelessly mired.
It's like the Producers. (Though without the ironic twist... in reality it surely must be impossible to accidentally complete a software project successfully. No doubt, without the laughs either.)