I have worked with several software engineers that got fired, so I’ll base my answer on them. btw, I was never a part of the decision to let them go nor did I influence that decision in any way.
The guy openly argued with the tech lead. He was actually a very talented developer and knew how to code, but he boasted about his years of experience as if it helped win the argument. He nearly started an argument with me, but I didn’t even have any reason to argue, so nothing happened.
UPDATE: Allow me to clarify that I am aware the arguing can be a healthy attribute to a large team but it was highly unusual to hear a raised voice using outrageous logic such as touting the number of years of experience he had. We always had healthy doses of conversations with disagreement, but this individual was beyond reasonable. I get that people can have differing views, but this was what I would consider toxic. Yet I would still work with the guy and I gave him the benefit of the doubt in that he was still adjusting to the new environment, but about 6 months later he was let go.
Not able to pick up the stack.
Two guys that were hired as a mid and a senior simply were not able to figure out how to build features using our stack. And they were just very slow. Our juniors were out-performing them so they were just let go. Not the official reason why they were let go. I personally helped them a lot. I patiently answered all their questions and I noticed that the same ones were asked over and over as well. I sincerely hoped that they would catch on and independently complete tasks but they were let go.
Unable to take constructive criticism.
Same with the first guy, but a junior was hired and was very upset when the tech lead told him to rewrite his code. The code was copy-pasted with minor differences and could easily be written in one set of code. Normally, a junior or any programmer of any level, would agree that this is true and rewrite it. This guy got so upset, the project manager and client got involved. He wasn’t fired, but he left before the ax fell.
The things I’m saying seem like common sense, but I was very surprised people still did it anyway and got fired for it. I think we should all generally be humble and admit where you’re wrong when proven with a reasonable explanation.
A co-worker once asked me if I would choose working with one of the above 2 choices and I picked the latter. I don’t want to work day-to-day with a difficult person. What helps is that I also don’t mind sitting down and teaching someone that’s easy to work with. If you’re worried about your skills, work on them but more than that, don’t be an asshole.
In short, my definition of a bad developer is one that I can’t help. You could be the worst developer skill-wise, but if I can influence you to have better coding practices, learn the stack, and have productive conversations on approaching problems, at the very least you would be an unskilled developer, but one that will eventually become a good software engineer.