Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Lava flow (programming)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
In [[computer programming]] [[jargon]], '''lava flow''' is an anti-pattern that occurs when computer [[source code]] written under sub-optimal conditions is deployed into a production environment and subsequently expanded upon while still in a developmental state. The term derives from the natural occurrence of lava which, once cooled, solidifies into rock that is difficult to remove. Similarly, such code becomes difficult to refactor or replace due to dependencies that arise over time, necessitating the maintenance of backward compatibility with the original, incomplete design.<ref>{{cite web|url=http://perldesignpatterns.com/?LavaFlow|archive-url=https://web.archive.org/web/20160331005850/http://perldesignpatterns.com/?LavaFlow|url-status=dead|archive-date=March 31, 2016|title=Lava Flow|website=Perl Design Patterns Wiki|accessdate=February 4, 2018}}</ref> == Causes == '''Lava flow''' can occur due to a variety of reasons within a software development process: * Pressure to meet deadlines leading to temporary solutions becoming permanent * Inadequate documentation which prevents understanding of the code’s purpose * Lack of automated tests which makes refactoring risky * Frequent changes in the development team leading to loss of knowledge == Consequences == Unrefined code that becomes part of the software’s infrastructure increases the complexity of the system and the codebase becomes increasingly difficult to understand and maintain. It leads to: * The need for [[backward compatibility]] which can stifle innovation and prevent adoption of newer, more efficient solutions * Increased [[technical debt]] that accumulates over time, resulting in higher costs of change and maintenance * Obstacles to [[refactoring]] or improving the system due to fear of breaking dependent components == Impact on teams == Development teams often experience the impact of '''lava flow''' when team members cycle in and out: * Loss of knowledge about aspects of the system's code when original developers leave * Reluctance among new developers to refactor unfamiliar code, leading to further complexity as they add rather than clean up<ref>{{cite web|url=http://mikehadlow.blogspot.no/2014/12/the-lava-layer-anti-pattern.html|title=The Lava Layer Anti-Pattern|website=Code rant|author=Mike Hadlow|date=December 15, 2014|accessdate=January 7, 2016}}</ref> == Mitigation strategies == Several practices can mitigate the effects of the '''lava flow''' anti-pattern: * Promoting good documentation practices for clear understanding of code * Encouraging regular [[code review]]s to catch suboptimal practices early * Prioritizing [[refactoring]] as an integral part of the development lifecycle * Maintaining a comprehensive suite of [[automated test]]s to reduce risk in changes ==References== {{Reflist}} [[Category:Anti-patterns]] {{compsci-stub}}
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)
Pages transcluded onto the current version of this page
(
help
)
:
Template:Cite web
(
edit
)
Template:Compsci-stub
(
edit
)
Template:Reflist
(
edit
)