[{"data":1,"prerenderedAt":301},["ShallowReactive",2],{"article-en-sportklub-ujrairas-helyett-modernizacio":3,"articles-en-all":245},{"id":4,"title":5,"body":6,"date":228,"description":229,"extension":230,"icon":231,"locale":232,"meta":233,"metaDescription":234,"navigation":235,"order":236,"path":237,"readingTime":228,"relatedServices":238,"seo":241,"slug":242,"stem":243,"updated":228,"__hash__":244},"articles\u002Farticles\u002Fsportklub-ujrairas-helyett-modernizacio.en.md","Modernization instead of a rewrite - taking over a sports club site",{"type":7,"value":8,"toc":218},"minimark",[9,26,31,34,37,41,44,48,51,76,79,82,85,97,101,104,107,111,131,134,138,141,144],[10,11,12,13,25],"p",{},"Completely replacing a working system is rarely the best move.\nBack in 2000, Joel Spolsky used Netscape to show the world what a complete rewrite can cost: almost 3 years passed between the two major versions, and in the meantime the company's market share melted away.",[14,15,16],"sup",{},[17,18,24],"a",{"href":19,"ariaDescribedBy":20,"dataFootnoteRef":22,"id":23},"#user-content-fn-1",[21],"footnote-label","","user-content-fnref-1","1"," The reason is still the same today: the new system has to do practically everything the old one did, including the exceptions and business rules that were never written down, because a system's boundary isn't its codebase but its behavior.",[27,28,30],"h2",{"id":29},"when-a-system-changes-hands","When a system changes hands",[10,32,33],{},"We often inherit software built by another team. In these cases, the quality of the code is rarely the main challenge. Far more often it's the missing context: why certain decisions were made, what is critical, and where the hidden dependencies are. Every system is a product of its time; the previous team worked within the requirements, deadlines and technological possibilities of the day.",[10,35,36],{},"When we were contracted to maintain a sports club's digital platform, we took over a PHP system of roughly 100,000 lines built on Symfony 3. It served the club's news, match and league table data, live coverage and the mobile app's APIs all at once. A system like this can't be switched off for months and rebuilt at leisure: it has to keep running during the takeover too.",[27,38,40],{"id":39},"where-we-started","Where we started",[10,42,43],{},"At the time of the takeover, several problems were present at once. The load on the database server was at a critical level, and on match days it had to handle traffic orders of magnitude higher than usual. The framework version no longer received security updates, and the dependencies included abandoned packages and packages with known vulnerabilities. On top of that, several features and external integrations were broken, including the mobile app's API connections and the social media integrations.",[27,45,47],{"id":46},"understand-first-change-second","Understand first, change second",[10,49,50],{},"Before touching anything, we look for answers to these questions:",[52,53,54,61,66,71],"ol",{},[55,56,57],"li",{},[58,59,60],"strong",{},"What does the system actually do?",[55,62,63],{},[58,64,65],{},"Where is the real risk?",[55,67,68],{},[58,69,70],{},"What works well and is worth keeping?",[55,72,73],{},[58,74,75],{},"What has to change, and at what pace?",[10,77,78],{},"In the sports club project, this led to an intensive stabilization and modernization phase of about three months. Besides the application, we also reviewed and optimized the infrastructure and the network side.",[10,80,81],{},"Upgrading the framework isn't a goal in itself, but you can't build long-term on a foundation that no longer gets security fixes. Most of the mechanical rewriting was done by a tool; the real work began where the tool could no longer decide: at the points where the old and new versions behave differently. In the same phase, we replaced the unmaintained packages and restored the connections the platform uses to communicate with the mobile app and social media.",[10,83,84],{},"For every component, we had to choose the right strategy: some components were hard to modify, but many parts of the system relied on them. We didn't rewrite these right away; we isolated and stabilized them. Where the existing solution could no longer keep up with requirements and was well contained, redesigning it was the sensible decision.",[10,86,87,88,96],{},"Every unit of change was verifiable, because in a legacy system even a small change can affect several components. The same logic works at a larger scale: in Martin Fowler's “strangler fig” pattern, new parts are gradually built around the old ones, and the old elements retire one by one.",[14,89,90],{},[17,91,95],{"href":92,"ariaDescribedBy":93,"dataFootnoteRef":22,"id":94},"#user-content-fn-2",[21],"user-content-fnref-2","2"," Modernization is therefore not one big switchover day, but a process.",[27,98,100],{"id":99},"we-started-at-two-seconds","We started at two seconds",[10,102,103],{},"On dynamic pages, the response time dropped from an average of 2 seconds to a quarter of that, the server load decreased significantly, and removing unnecessary complexity made the code easier to follow. And throughout the process, the platform kept running.",[10,105,106],{},"The project showed clearly that most problems aren't worth solving with brute force. In the short term, the faster, cheaper workaround is tempting, but if you can clearly show the client the cost and benefit of the right solution, it pays off better for both sides in the long run.",[27,108,110],{"id":109},"what-does-ai-change-about-this","What does AI change about this?",[10,112,113,114,122,123],{},"In this project, the retrospective specification documenting how the system works, and the tests, were still largely written by hand. Understanding the system used to be the most expensive part of taking over a legacy system, and this is where AI has made a real difference. In November 2025, the Thoughtworks Technology Radar placed using GenAI to understand legacy codebases in its “Adopt” ring, meaning it considers it established practice.",[14,115,116],{},[17,117,121],{"href":118,"ariaDescribedBy":119,"dataFootnoteRef":22,"id":120},"#user-content-fn-3",[21],"user-content-fnref-3","3"," Morgan Stanley's in-house tool turned roughly 9 million lines of legacy code into readable specifications, saving an estimated 280,000 developer hours.",[14,124,125],{},[17,126,130],{"href":127,"ariaDescribedBy":128,"dataFootnoteRef":22,"id":129},"#user-content-fn-4",[21],"user-content-fnref-4","4",[10,132,133],{},"Today, in a similar takeover, we use AI-based tools to map the codebase, write the documentation, and write tests that capture how the system currently behaves before any changes are made. A developer checks the relationships uncovered, and a human still decides what we keep and what we replace. Since AI also makes rewriting cheaper, making the right decision doesn't lose any of its importance. Quite the opposite: it matters more than ever.",[27,135,137],{"id":136},"you-dont-have-to-start-over-from-scratch","You don't have to start over from scratch",[10,139,140],{},"An old codebase or an orphaned system isn't necessarily beyond saving. What works well, we keep; what needs modernizing, we update step by step; and if a part really needs replacing, we plan a safe way to do it. If you also have a system that is an important part of your operations but that few people still understand, let's start by understanding what it actually does. Then let's decide together what stays, what changes, and at what pace.",[142,143],"hr",{},[145,146,149,154],"section",{"className":147,"dataFootnotes":22},[148],"footnotes",[27,150,153],{"className":151,"id":21},[152],"sr-only","Footnotes",[52,155,156,177,194,209],{},[55,157,159,160,169,170],{"id":158},"user-content-fn-1","Joel Spolsky: ",[17,161,165],{"href":162,"rel":163},"https:\u002F\u002Fwww.joelonsoftware.com\u002F2000\u002F04\u002F06\u002Fthings-you-should-never-do-part-i\u002F",[164],"nofollow",[166,167,168],"em",{},"Things You Should Never Do, Part I",", Joel on Software, April 2000. ",[17,171,176],{"href":172,"ariaLabel":173,"className":174,"dataFootnoteBackref":22},"#user-content-fnref-1","Back to reference 1",[175],"data-footnote-backref","↩",[55,178,180,181,188,189],{"id":179},"user-content-fn-2","Martin Fowler: ",[17,182,185],{"href":183,"rel":184},"https:\u002F\u002Fmartinfowler.com\u002Fbliki\u002FStranglerFigApplication.html",[164],[166,186,187],{},"Strangler Fig Application",", martinfowler.com. ",[17,190,176],{"href":191,"ariaLabel":192,"className":193,"dataFootnoteBackref":22},"#user-content-fnref-2","Back to reference 2",[175],[55,195,197,198,203,204],{"id":196},"user-content-fn-3","Thoughtworks Technology Radar, Vol. 33, November 2025 – ",[17,199,202],{"href":200,"rel":201},"https:\u002F\u002Fwww.thoughtworks.com\u002Fradar\u002Ftechniques\u002Fusing-genai-to-understand-legacy-codebases",[164],"“Using GenAI to understand legacy codebases”",". ",[17,205,176],{"href":206,"ariaLabel":207,"className":208,"dataFootnoteBackref":22},"#user-content-fnref-3","Back to reference 3",[175],[55,210,212,213],{"id":211},"user-content-fn-4","Morgan Stanley DevGen.AI, based on the company's 2025 statements. ",[17,214,176],{"href":215,"ariaLabel":216,"className":217,"dataFootnoteBackref":22},"#user-content-fnref-4","Back to reference 4",[175],{"title":22,"searchDepth":219,"depth":219,"links":220},2,[221,222,223,224,225,226,227],{"id":29,"depth":219,"text":30},{"id":39,"depth":219,"text":40},{"id":46,"depth":219,"text":47},{"id":99,"depth":219,"text":100},{"id":109,"depth":219,"text":110},{"id":136,"depth":219,"text":137},{"id":21,"depth":219,"text":153},null,"We took over a working, 100,000-line system and, instead of rewriting it, modernized it step by step.","md","article-sportklub","en",{},"We took over a 100,000-line Symfony 3 system and modernized it step by step instead of rewriting it: response times fell to a quarter, and it kept running.",true,"8","\u002Farticles\u002Fsportklub-ujrairas-helyett-modernizacio.en",[239,240],"regi-rendszerek-modernizacioja","uzemeltetes-es-support",{"title":5,"description":229},"sportklub-ujrairas-helyett-modernizacio","articles\u002Fsportklub-ujrairas-helyett-modernizacio.en","6l74NhN_IB33di-22_HOgKqIytXwlL-2T3le49m6K2M",[246,255,262,270,278,285,292,299],{"title":247,"slug":248,"description":249,"readingTime":228,"relatedServices":250,"order":252,"date":253,"icon":254},"Perspective - The code is done. Now the work starts.","a-kod-kesz-most-kezdodik-a-munka","With AI-built applications, the risk is usually not in the code but around it. What to think through before going live.",[251,239,240],"fejlesztoi-tanacsadas","0","2026-10-29","article-kod-kesz",{"title":256,"slug":257,"description":258,"readingTime":228,"relatedServices":259,"order":24,"date":228,"icon":261},"Perspective - The rules change, the software doesn't have to","a-szabalyok-valtoznak-a-szoftver-nem","When the rules change faster than the software",[260],"egyedi-szoftverfejlesztes","article-szabalyok",{"title":263,"slug":264,"description":265,"readingTime":228,"relatedServices":266,"order":121,"date":228,"icon":269},"Perspective - One data source, many channels","egy-adatforras-tobb-felulet","What you need isn't another interface, but a single owner for your data.",[260,267,268],"mobilalkalmazas-fejlesztes","weboldal-fejlesztes","article-adatforras",{"title":271,"slug":272,"description":273,"readingTime":228,"relatedServices":274,"order":130,"date":228,"icon":277},"Our goal is sustainable WordPress","fenntarthato-wordpress","A cost-effective solution is one you don't have to pay for twice; a sustainable one can still be updated safely years from now.",[268,240,275,276],"support-es-it-tamogatas","kampanyok-es-nyeremenyjatekok","article-wordpress",{"title":279,"slug":280,"description":281,"readingTime":228,"relatedServices":282,"order":283,"date":228,"icon":284},"A decade-long partnership - from website to community platform","kozossegi-program-weboldal-platform","When a website becomes an online platform",[260,239,240],"5","article-kozosseg",{"title":286,"slug":287,"description":288,"readingTime":228,"relatedServices":289,"order":290,"date":228,"icon":291},"Case study - Central systems, local needs","kozponti-rendszerek-helyi-igenyek","A good system doesn't choose between headquarters and the local sites; it serves both.",[260,240,275,267,276,268],"6","article-kozpont",{"title":293,"slug":294,"description":295,"readingTime":228,"relatedServices":296,"order":297,"date":228,"icon":298},"Perspective - From vibe coding to production","vibe-coding-tol-eles-termekig","You don't have to throw the prototype away: what's already there can be put in order, and what's still missing can be built on top.",[239,260],"7","article-vibe",{"title":5,"slug":242,"description":229,"readingTime":228,"relatedServices":300,"order":236,"date":228,"icon":231},[239,240],1793728956336]