DEV Community

[Comment from a deleted post]
Collapse
 
shymi profile image
shymi • Edited

My 2 cents after working for a startup, big corpo for which the software was a secondary income source and currently a mid-sized company whose software is the only income source. I have spent in which one of them around the same amount of time(around 3 years).

  • the only place, where I have done mostly development of new features(around 60-70% of the time) was the startup. After the initial version of the main features was done we went mostly into support mode;
  • in the two other companies - it was mostly support jobs. There's a tricky time vs benefit decisions, which should be made, especially in old monolith projects. Most of the newer features had to rely on existing ones and there was a constant itch to fix the code a bit, but most of the projects I've worked on had terrible documentation or non-existent one(or even worse - multiple docs for the same thing, neither of which up to date), which meant that you can't be sure what will happen if you touch X(there's a reason for the jokes around comments like "Don't touch or you'll break everything"). Additionally with old projects there are functionalities, which are long forgotten, but interconnected with other ones and usually there's are 1-2 customers, which are using them and want them to work and you find out you did an oopsie long after the client has upgraded to the newer version(big no-no if the upgrade time of the environment is several months);
  • with time more and more security issues rise for web applications, which are open to the world - another thing to be maintained;
  • upgrading used libraries for performance/security benefits is not always straight forward(especially bumping to a newer major version) - code refactoring or even trying to find wtf happened and some other library stopped behaving correctly because of a transitive dependency upgrade may be needed(this was a huge headache in the big corpo - constant using of maven's tree command and browsing through library versions was a pain in the behind);
  • in the 3 companies, there weren't any linting tools used so the code was a mess. In the corpo - they added long into the projects' life scanning tools, which enforced some good practices(usually yoinked straight out of Effective Java) and they forced us to dedicate some time to refactor old code;