Why projects are rewritten and why they fail

The age-old theme - can or cannot you rewrite a large, working product with an active user base? The answer, in general, will be - yes, you can. The only question is how? Having seen several such attempts in the past (both successful and not so), this article is the author's view of this problem.



Bad code, overly complicated build process, outdated technologies, terrible programming language - all these problems, and many others, accompany every sufficiently successful large project, any software development process in any organization. As practice shows, in most cases the situation only gets worse over time - minor inconveniences develop into unpleasant β€œpeculiarities of our work”, scores are constantly increasing when planning tasks, and the quality of the finished product begins to suffer. The final touch to this picture is the failure to meet deadlines and plans due to the impossibility of either debugging functionality, or even delivering it to the working environment. Often, in such situations, we say that technical debt has accumulated.







This debt arises in a completely natural way and pursues all systems, no matter how successful, when there is the product itself, its users, channels of communication with them. It does not matter whether the product is sold directly, or whether it is an auxiliary part of the company's business, what matters is that it has been in operation for a long time. Users want to get new functionality (perhaps they will even pay for it), management wants to provide users with it as soon as possible, because the development department, under pressure from deadlines, implements the necessary changes. The process is repeated many times, and sooner or later someone will loudly say - β€œit seems we have a debt, perhaps a technical one!”







Everyone began to note that each new task is more difficult than the previous one, and this is no longer an accident, the complexity is growing exponentially. There are β€œfragile” places in the code that are better not to touch, more often defects from users and alarms from the system for monitoring the working environment β€œarrive”. First, initiatives to introduce new technologies and practices designed to improve the quality of the product as a whole are postponed, and then completely forgotten. A general idea is formed that something is going wrong, the search for the reasons for what is happening and who are to blame begins. Of course, there is nothing good in this state of affairs, even more so - the negative begins to poison the atmosphere of the team.







, , β€” , , , , , , , , , , .







, , , , , , . , β€” , ? , .









, . , . , , , - β€” , ? , ? ? , ? . , , , , β€” , . β€” .







β€” , , , , . , , . β€” . , IDE , , . .







β€” , :







  • , ? - , .
  • - , - , .
  • , , .
  • , .
  • , , , , .
  • - , , .
  • , - , .


, β€” , , . . , β€” , , . , β€” , , .







. , , . β€” , . β€” . β€” ? .







β€œ ?”. ! , 100% β€” , - , , . , , , β€” 50/50, 60/40, . β€” , , .









, , β€” , , . ! ! ! β€” . .







, , β€” , .







, β€” , , , β€” . , β€” ? , , . , Flash β€” , , . , , β€” . , , , .







. β€” , , β€” , . , , . , … , .







, . , , , , , . , , - . , , , β€” , , , , β€œ ”, . ? , , . , , , β€” .







? β€” . , β€” . , , , . , .









β€” , : , , , .. , , . , , , . . , , , , , β€” , . , β€” , . β€” , . β€” , , , , .







β€” , , , . . , , , . , , , , β€” .







, , . β€” , , , . , . - Terra incognita, . - - , , , - ( ) . - , - , . , , .







, , . . , . , API. http- . β€” , - , offline-, - Selenium-, UI, . , API.







, , . β€” . , . API , , -, ? , ? , , β€” , β€” .









. , , , , β€” . , , β€” . , :







  1. ,


- ? - β€” . β€” , . β€œ, ”: β€œ , , , , ”. , , β€œ ” , , , β€” , β€œβ€ , . , ?







, β€” , API, .. β€” , - . . , , , , , , . , , .







, . β€” , , , . , , , , , , , , . , β€” , . , , - , , , , . , , , , , , β€” , . .







β€” , , . , , , , : , , . β€” , .







, , , , β€” , . , β€” , .







, , - . . β€” β€œβ€, β€œβ€. , , .









, , , . , , web-, , β€” , . , , , β€” β€œβ€? ? , ? , . , , ?







, , , β€” . Twitter, , , , , . , , . , Ruby on Rails, JVM, . .







, β€” , . , , , . , , , , . , (-, ) . , . , .







. , , . β€” , , , , . , . β€” , , β€” .







P.S.



Everything written above applies, of course, to large, working software products with an active user base. And only for those cases when it is impossible to simply release a new version of the product along with the old one, as was the case, for example, with Basecamp and as it is with all the so-called. "Boxed" software.








All Articles