SlideShare a Scribd company logo
WhenYour Codebase
Is Nearly Old Enough
ToVote
Denise Paolucci
Dreamwidth Studios - www.dreamwidth.org
Slides: www.slideshare.net/dreamwidth
Friday, January 16, 15
At time of fork:
• Perl 5.6
• Apache 1.3 (yes, in 2008!)
• BML (custom template language from 1996)
• Various Perl modules (usually outdated)
Friday, January 16, 15
hic sunt dracones
Friday, January 16, 15
Comments that don’t help
my $out_straight = sub {
# Hacky: forces text flush. see:
# http://zilla.livejournal.org/906
if ($need_flush) {
$cleaner->parse("<!-- -->");
$need_flush = 0;
}
Friday, January 16, 15
Comments that don’t help
my $out_straight = sub {
# Hacky: forces text flush. see:
# http://zilla.livejournal.org/906
if ($need_flush) {
$cleaner->parse("<!-- -->");
$need_flush = 0;
}
(Six bug trackers and four owners ago.)
Friday, January 16, 15
Workarounds for
outdated browsers
// let me explain this. Opera 8 does XMLHttpRequest, but not setRequestHeader.
// no problem, we thought: we'll test for setRequestHeader and if it's not present
// then fall back to the old behavior (treat it as not working). BUT --- IE6 won't
// let you even test for setRequestHeader without throwing an exception (you need
// to call .open on the .xtr first or something)
Friday, January 16, 15
Workarounds for
outdated browsers
// let me explain this. Opera 8 does XMLHttpRequest, but not setRequestHeader.
// no problem, we thought: we'll test for setRequestHeader and if it's not present
// then fall back to the old behavior (treat it as not working). BUT --- IE6 won't
// let you even test for setRequestHeader without throwing an exception (you need
// to call .open on the .xtr first or something)
Current Opera: 26.0.1656.60 (Opera 8 released 2005)
Current IE: 11.0.12 (IE 6 released 2001)
Friday, January 16, 15
Really old HTML
$ret .= "<FORM METHOD=POST>";
$ret .= LJ::form_auth();
$ret .= "<TABLE WIDTH=400><TR VALIGN=BOTTOM>";
$ret .= "<TD><IMG SRC="$LJ::IMGPREFIX/nerd_small.jpg" WIDTH=167 HEIGHT=169 HSPACE=2
VSPACE=2></TD>";
$ret .= "<TD><B><TT>command console.</TT></B>";
$ret .= "<P>welcome to the livejournal console. from here administrators can do
administrative type things. you will forget the commands, so there is a <A HREF=
"reference.bml">reference</A>.</TD>";
$ret .= "</TR>";
$ret .= "<TR><TD COLSPAN=2>";
$ret .= "<P><tt>enter commands:</tt><BR>";
$ret .= "<TEXTAREA NAME=commands ROWS=10 COLS=60 WRAP=OFF></TEXTAREA></TD></TR>n";
$ret .= "<TR><TD COLSPAN=2 ALIGN=RIGHT><INPUT TYPE=SUBMIT VALUE="execute"></P></
TD></TR></TABLE></FORM>n";
return $ret;
Friday, January 16, 15
Really old HTML
$ret .= "<FORM METHOD=POST>";
$ret .= LJ::form_auth();
$ret .= "<TABLE WIDTH=400><TR VALIGN=BOTTOM>";
$ret .= "<TD><IMG SRC="$LJ::IMGPREFIX/nerd_small.jpg" WIDTH=167 HEIGHT=169 HSPACE=2
VSPACE=2></TD>";
$ret .= "<TD><B><TT>command console.</TT></B>";
$ret .= "<P>welcome to the livejournal console. from here administrators can do
administrative type things. you will forget the commands, so there is a <A HREF=
"reference.bml">reference</A>.</TD>";
$ret .= "</TR>";
$ret .= "<TR><TD COLSPAN=2>";
$ret .= "<P><tt>enter commands:</tt><BR>";
$ret .= "<TEXTAREA NAME=commands ROWS=10 COLS=60 WRAP=OFF></TEXTAREA></TD></TR>n";
$ret .= "<TR><TD COLSPAN=2 ALIGN=RIGHT><INPUT TYPE=SUBMIT VALUE="execute"></P></
TD></TR></TABLE></FORM>n";
return $ret;
(1999 called; they want their tables back)
Friday, January 16, 15
Out of date special-
casing
# Catch misspellings of hotmail.com
if ($domain =~ /^(otmail|hotmial|hotmil|hotamail|hotmaul|hoatmail|hatmail|htomail).(cm|
co|com|cmo|om)$/ or
$domain =~ /^hotmail.(cm|co|om|cmo)$/)
{
return $reject->("bad_hotmail_spelling",
"You gave $email as your email address. Are you sure you didn't mean hotmail.com?");
}
# Catch misspellings of aol.com
elsif ($domain =~ /^(ol|aoll).(cm|co|com|cmo|om)$/ or
$domain =~ /^aol.(cm|co|om|cmo)$/)
{
return $reject->("bad_aol_spelling",
"You gave $email as your email address. Are you sure you didn't mean aol.com?");
}
Friday, January 16, 15
Out of date special-
casing
# Catch misspellings of hotmail.com
if ($domain =~ /^(otmail|hotmial|hotmil|hotamail|hotmaul|hoatmail|hatmail|htomail).(cm|
co|com|cmo|om)$/ or
$domain =~ /^hotmail.(cm|co|om|cmo)$/)
{
return $reject->("bad_hotmail_spelling",
"You gave $email as your email address. Are you sure you didn't mean hotmail.com?");
}
# Catch misspellings of aol.com
elsif ($domain =~ /^(ol|aoll).(cm|co|com|cmo|om)$/ or
$domain =~ /^aol.(cm|co|om|cmo)$/)
{
return $reject->("bad_aol_spelling",
"You gave $email as your email address. Are you sure you didn't mean aol.com?");
}
80-90% of our new signups are from @gmail.com
Friday, January 16, 15
Old bad decisions (that
were right at the time)
# remove the SvUTF8 flag. it's still UTF-8, but
# we don't want perl knowing that and messing stuff up
# for us behind our back in random places all over
# http://zilla.livejournal.org/show_bug.cgi?id=1037
foreach my $attr (qw(id subject text link author)) {
next unless exists $it->{$attr} && defined $it->{$attr};
$it->{$attr} = LJ::no_utf8_flag ( $it->{$attr} );
}
Friday, January 16, 15
And more...
Friday, January 16, 15
And more...
• Outdated modules
Friday, January 16, 15
And more...
• Outdated modules
• Ancient JavaScript
Friday, January 16, 15
And more...
• Outdated modules
• Ancient JavaScript
• Massive duplication
Friday, January 16, 15
And more...
• Outdated modules
• Ancient JavaScript
• Massive duplication
• Bugs that had turned into features
Friday, January 16, 15
Should you rewrite?
Friday, January 16, 15
Upgrading Apache
BENEFIT COST
• Moving away from
software at EOL
• So much time. (circa 6
months to working
prototype)
• Security fixes • New and exciting bugs
• Not having to
downgrade new installs
• But really, a no-brainer
• Easier to explain
• No longer horribly
ashamed of ourselves
Friday, January 16, 15
Switch to Foundation
BENEFIT COST
• Modern framework • So many pages
• Responsive design
(better mobile)
• Changes to look/feel
(our users are picky)
• Better cross-browser • New and exciting bugs
• Easier to make
accessible
• Less individual
• Well documented
• No, seriously, SO
MUCH WORK
• Kill lurking old HTML • We’re still not done
Friday, January 16, 15
The pros: will you...
Friday, January 16, 15
The pros: will you...
• become more compatible with standards/
best practices?
Friday, January 16, 15
The pros: will you...
• become more compatible with standards/
best practices?
• make your code easier to install?
Friday, January 16, 15
The pros: will you...
• become more compatible with standards/
best practices?
• make your code easier to install?
• eliminate project-specific systems?
Friday, January 16, 15
The pros: will you...
• become more compatible with standards/
best practices?
• make your code easier to install?
• eliminate project-specific systems?
• reduce reliance on institutional memory?
Friday, January 16, 15
The pros: will you...
• become more compatible with standards/
best practices?
• make your code easier to install?
• eliminate project-specific systems?
• reduce reliance on institutional memory?
• benefit your users or your team?
Friday, January 16, 15
The cons: will you...
Friday, January 16, 15
The cons: will you...
• lose a history of bugfixes or security fixes?
Friday, January 16, 15
The cons: will you...
• lose a history of bugfixes or security fixes?
• tie up too many of your people, or involve
too much retraining?
Friday, January 16, 15
The cons: will you...
• lose a history of bugfixes or security fixes?
• tie up too many of your people, or involve
too much retraining?
• be tied to something that might not last?
Friday, January 16, 15
The cons: will you...
• lose a history of bugfixes or security fixes?
• tie up too many of your people, or involve
too much retraining?
• be tied to something that might not last?
• need to fork/adapt a standard/module?
Friday, January 16, 15
The cons: will you...
• lose a history of bugfixes or security fixes?
• tie up too many of your people, or involve
too much retraining?
• be tied to something that might not last?
• need to fork/adapt a standard/module?
• not benefit your users or your team?
Friday, January 16, 15
The number one
question:
Friday, January 16, 15
Will you finish it?
Friday, January 16, 15
Future-proofing
Friday, January 16, 15
Future-proofing
• Comment everything, in the code itself
Friday, January 16, 15
Future-proofing
• Comment everything, in the code itself
• Be grep friendly
Friday, January 16, 15
Future-proofing
• Comment everything, in the code itself
• Be grep friendly
• Write task lists for your future self
Friday, January 16, 15
Future-proofing
• Comment everything, in the code itself
• Be grep friendly
• Write task lists for your future self
• Regularly install/compile from scratch
Friday, January 16, 15
Thank you!
Denise Paolucci
Dreamwidth Studios - www.dreamwidth.org
Slides: www.slideshare.net/dreamwidth
Friday, January 16, 15

More Related Content

KEY
PHP for NonProgrammers (DrupalCon SF 2010)
PPT
Best practices in museum search
PDF
Kicking impostor syndrome in the head
PPT
Dealing with Legacy Perl Code - Peter Scott
PDF
SDPHP - Percona Toolkit (It's Basically Magic)
PPT
Web Scraper Shibuya.pm tech talk #8
ODP
Perl Moderno
PDF
Node.js Patterns and Opinions
PHP for NonProgrammers (DrupalCon SF 2010)
Best practices in museum search
Kicking impostor syndrome in the head
Dealing with Legacy Perl Code - Peter Scott
SDPHP - Percona Toolkit (It's Basically Magic)
Web Scraper Shibuya.pm tech talk #8
Perl Moderno
Node.js Patterns and Opinions

Similar to When your code is nearly old enough to vote (20)

PPT
Download It
PDF
Empezando con Twig
PDF
Learning Python from Data
PPT
PHP Presentation
PDF
Leveling Up at JavaScript
PDF
Questioning the status quo
PDF
What we Learned Implementing Puppet at Backstop
KEY
Employing Custom Fonts
PDF
Automate Yo' Self
PPT
CPAP.com Introduction To Coding: Part 2
PDF
Developing OpenResty Framework
PDF
Turbogears Presentation
PDF
Zend Certification Preparation Tutorial
KEY
Code Fast, die() Early, Throw Structured Exceptions
PDF
Tek 2013 - Building Web Apps from a New Angle with AngularJS
ODP
Writing Plugins for WordPress MU
ODP
Introducing Modern Perl
PDF
Open source secret_sauce_apache_con_2010
KEY
Code Fast, Die Young, Throw Structured Exceptions
Download It
Empezando con Twig
Learning Python from Data
PHP Presentation
Leveling Up at JavaScript
Questioning the status quo
What we Learned Implementing Puppet at Backstop
Employing Custom Fonts
Automate Yo' Self
CPAP.com Introduction To Coding: Part 2
Developing OpenResty Framework
Turbogears Presentation
Zend Certification Preparation Tutorial
Code Fast, die() Early, Throw Structured Exceptions
Tek 2013 - Building Web Apps from a New Angle with AngularJS
Writing Plugins for WordPress MU
Introducing Modern Perl
Open source secret_sauce_apache_con_2010
Code Fast, Die Young, Throw Structured Exceptions
Ad

More from dreamwidth (15)

PPTX
From the Inside Out: How Self-Talk Affects Your Community
PPTX
Chenoweth os bridge 2015 pp
PPTX
How We Learned To Stop Worrying And Love (or at least live with) GitHub
PPTX
Hacking In-Group Bias for Fun and Profit
PPT
Slytherin 101: How to Win Friends and Influence People
PPTX
Keeping your culture afloat through a tidal wave
PDF
LCA2014 - Introduction to Go
PDF
User Created Content: Maintain accessibility in content you don't control
PPT
Care and Feeding of Volunteers
PPT
Sowing the Seeds of Diversity
PDF
Be Kind To Your Wrists (you’ll miss them when they’re gone)
PDF
Web Accessibility for the 21st Century
PPT
Servers and Processes: Behavior and Analysis
PDF
Overcoming Impostor Syndrome
PPT
Build Your Own Contributors, One Part At A Time
From the Inside Out: How Self-Talk Affects Your Community
Chenoweth os bridge 2015 pp
How We Learned To Stop Worrying And Love (or at least live with) GitHub
Hacking In-Group Bias for Fun and Profit
Slytherin 101: How to Win Friends and Influence People
Keeping your culture afloat through a tidal wave
LCA2014 - Introduction to Go
User Created Content: Maintain accessibility in content you don't control
Care and Feeding of Volunteers
Sowing the Seeds of Diversity
Be Kind To Your Wrists (you’ll miss them when they’re gone)
Web Accessibility for the 21st Century
Servers and Processes: Behavior and Analysis
Overcoming Impostor Syndrome
Build Your Own Contributors, One Part At A Time
Ad

Recently uploaded (20)

PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPTX
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
PPTX
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PDF
Approach and Philosophy of On baking technology
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Big Data Technologies - Introduction.pptx
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
PPTX
MYSQL Presentation for SQL database connectivity
PPTX
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Modernizing your data center with Dell and AMD
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
Building Integrated photovoltaic BIPV_UPV.pdf
KOM of Painting work and Equipment Insulation REV00 update 25-dec.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
The AUB Centre for AI in Media Proposal.docx
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Mobile App Security Testing_ A Comprehensive Guide.pdf
Detection-First SIEM: Rule Types, Dashboards, and Threat-Informed Strategy
VMware vSphere Foundation How to Sell Presentation-Ver1.4-2-14-2024.pptx
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Approach and Philosophy of On baking technology
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Big Data Technologies - Introduction.pptx
Encapsulation_ Review paper, used for researhc scholars
Peak of Data & AI Encore- AI for Metadata and Smarter Workflows
“AI and Expert System Decision Support & Business Intelligence Systems”
MYSQL Presentation for SQL database connectivity
Effective Security Operations Center (SOC) A Modern, Strategic, and Threat-In...
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Modernizing your data center with Dell and AMD
Per capita expenditure prediction using model stacking based on satellite ima...

When your code is nearly old enough to vote

  • 1. WhenYour Codebase Is Nearly Old Enough ToVote Denise Paolucci Dreamwidth Studios - www.dreamwidth.org Slides: www.slideshare.net/dreamwidth Friday, January 16, 15
  • 2. At time of fork: • Perl 5.6 • Apache 1.3 (yes, in 2008!) • BML (custom template language from 1996) • Various Perl modules (usually outdated) Friday, January 16, 15
  • 3. hic sunt dracones Friday, January 16, 15
  • 4. Comments that don’t help my $out_straight = sub { # Hacky: forces text flush. see: # http://zilla.livejournal.org/906 if ($need_flush) { $cleaner->parse("<!-- -->"); $need_flush = 0; } Friday, January 16, 15
  • 5. Comments that don’t help my $out_straight = sub { # Hacky: forces text flush. see: # http://zilla.livejournal.org/906 if ($need_flush) { $cleaner->parse("<!-- -->"); $need_flush = 0; } (Six bug trackers and four owners ago.) Friday, January 16, 15
  • 6. Workarounds for outdated browsers // let me explain this. Opera 8 does XMLHttpRequest, but not setRequestHeader. // no problem, we thought: we'll test for setRequestHeader and if it's not present // then fall back to the old behavior (treat it as not working). BUT --- IE6 won't // let you even test for setRequestHeader without throwing an exception (you need // to call .open on the .xtr first or something) Friday, January 16, 15
  • 7. Workarounds for outdated browsers // let me explain this. Opera 8 does XMLHttpRequest, but not setRequestHeader. // no problem, we thought: we'll test for setRequestHeader and if it's not present // then fall back to the old behavior (treat it as not working). BUT --- IE6 won't // let you even test for setRequestHeader without throwing an exception (you need // to call .open on the .xtr first or something) Current Opera: 26.0.1656.60 (Opera 8 released 2005) Current IE: 11.0.12 (IE 6 released 2001) Friday, January 16, 15
  • 8. Really old HTML $ret .= "<FORM METHOD=POST>"; $ret .= LJ::form_auth(); $ret .= "<TABLE WIDTH=400><TR VALIGN=BOTTOM>"; $ret .= "<TD><IMG SRC="$LJ::IMGPREFIX/nerd_small.jpg" WIDTH=167 HEIGHT=169 HSPACE=2 VSPACE=2></TD>"; $ret .= "<TD><B><TT>command console.</TT></B>"; $ret .= "<P>welcome to the livejournal console. from here administrators can do administrative type things. you will forget the commands, so there is a <A HREF= "reference.bml">reference</A>.</TD>"; $ret .= "</TR>"; $ret .= "<TR><TD COLSPAN=2>"; $ret .= "<P><tt>enter commands:</tt><BR>"; $ret .= "<TEXTAREA NAME=commands ROWS=10 COLS=60 WRAP=OFF></TEXTAREA></TD></TR>n"; $ret .= "<TR><TD COLSPAN=2 ALIGN=RIGHT><INPUT TYPE=SUBMIT VALUE="execute"></P></ TD></TR></TABLE></FORM>n"; return $ret; Friday, January 16, 15
  • 9. Really old HTML $ret .= "<FORM METHOD=POST>"; $ret .= LJ::form_auth(); $ret .= "<TABLE WIDTH=400><TR VALIGN=BOTTOM>"; $ret .= "<TD><IMG SRC="$LJ::IMGPREFIX/nerd_small.jpg" WIDTH=167 HEIGHT=169 HSPACE=2 VSPACE=2></TD>"; $ret .= "<TD><B><TT>command console.</TT></B>"; $ret .= "<P>welcome to the livejournal console. from here administrators can do administrative type things. you will forget the commands, so there is a <A HREF= "reference.bml">reference</A>.</TD>"; $ret .= "</TR>"; $ret .= "<TR><TD COLSPAN=2>"; $ret .= "<P><tt>enter commands:</tt><BR>"; $ret .= "<TEXTAREA NAME=commands ROWS=10 COLS=60 WRAP=OFF></TEXTAREA></TD></TR>n"; $ret .= "<TR><TD COLSPAN=2 ALIGN=RIGHT><INPUT TYPE=SUBMIT VALUE="execute"></P></ TD></TR></TABLE></FORM>n"; return $ret; (1999 called; they want their tables back) Friday, January 16, 15
  • 10. Out of date special- casing # Catch misspellings of hotmail.com if ($domain =~ /^(otmail|hotmial|hotmil|hotamail|hotmaul|hoatmail|hatmail|htomail).(cm| co|com|cmo|om)$/ or $domain =~ /^hotmail.(cm|co|om|cmo)$/) { return $reject->("bad_hotmail_spelling", "You gave $email as your email address. Are you sure you didn't mean hotmail.com?"); } # Catch misspellings of aol.com elsif ($domain =~ /^(ol|aoll).(cm|co|com|cmo|om)$/ or $domain =~ /^aol.(cm|co|om|cmo)$/) { return $reject->("bad_aol_spelling", "You gave $email as your email address. Are you sure you didn't mean aol.com?"); } Friday, January 16, 15
  • 11. Out of date special- casing # Catch misspellings of hotmail.com if ($domain =~ /^(otmail|hotmial|hotmil|hotamail|hotmaul|hoatmail|hatmail|htomail).(cm| co|com|cmo|om)$/ or $domain =~ /^hotmail.(cm|co|om|cmo)$/) { return $reject->("bad_hotmail_spelling", "You gave $email as your email address. Are you sure you didn't mean hotmail.com?"); } # Catch misspellings of aol.com elsif ($domain =~ /^(ol|aoll).(cm|co|com|cmo|om)$/ or $domain =~ /^aol.(cm|co|om|cmo)$/) { return $reject->("bad_aol_spelling", "You gave $email as your email address. Are you sure you didn't mean aol.com?"); } 80-90% of our new signups are from @gmail.com Friday, January 16, 15
  • 12. Old bad decisions (that were right at the time) # remove the SvUTF8 flag. it's still UTF-8, but # we don't want perl knowing that and messing stuff up # for us behind our back in random places all over # http://zilla.livejournal.org/show_bug.cgi?id=1037 foreach my $attr (qw(id subject text link author)) { next unless exists $it->{$attr} && defined $it->{$attr}; $it->{$attr} = LJ::no_utf8_flag ( $it->{$attr} ); } Friday, January 16, 15
  • 14. And more... • Outdated modules Friday, January 16, 15
  • 15. And more... • Outdated modules • Ancient JavaScript Friday, January 16, 15
  • 16. And more... • Outdated modules • Ancient JavaScript • Massive duplication Friday, January 16, 15
  • 17. And more... • Outdated modules • Ancient JavaScript • Massive duplication • Bugs that had turned into features Friday, January 16, 15
  • 18. Should you rewrite? Friday, January 16, 15
  • 19. Upgrading Apache BENEFIT COST • Moving away from software at EOL • So much time. (circa 6 months to working prototype) • Security fixes • New and exciting bugs • Not having to downgrade new installs • But really, a no-brainer • Easier to explain • No longer horribly ashamed of ourselves Friday, January 16, 15
  • 20. Switch to Foundation BENEFIT COST • Modern framework • So many pages • Responsive design (better mobile) • Changes to look/feel (our users are picky) • Better cross-browser • New and exciting bugs • Easier to make accessible • Less individual • Well documented • No, seriously, SO MUCH WORK • Kill lurking old HTML • We’re still not done Friday, January 16, 15
  • 21. The pros: will you... Friday, January 16, 15
  • 22. The pros: will you... • become more compatible with standards/ best practices? Friday, January 16, 15
  • 23. The pros: will you... • become more compatible with standards/ best practices? • make your code easier to install? Friday, January 16, 15
  • 24. The pros: will you... • become more compatible with standards/ best practices? • make your code easier to install? • eliminate project-specific systems? Friday, January 16, 15
  • 25. The pros: will you... • become more compatible with standards/ best practices? • make your code easier to install? • eliminate project-specific systems? • reduce reliance on institutional memory? Friday, January 16, 15
  • 26. The pros: will you... • become more compatible with standards/ best practices? • make your code easier to install? • eliminate project-specific systems? • reduce reliance on institutional memory? • benefit your users or your team? Friday, January 16, 15
  • 27. The cons: will you... Friday, January 16, 15
  • 28. The cons: will you... • lose a history of bugfixes or security fixes? Friday, January 16, 15
  • 29. The cons: will you... • lose a history of bugfixes or security fixes? • tie up too many of your people, or involve too much retraining? Friday, January 16, 15
  • 30. The cons: will you... • lose a history of bugfixes or security fixes? • tie up too many of your people, or involve too much retraining? • be tied to something that might not last? Friday, January 16, 15
  • 31. The cons: will you... • lose a history of bugfixes or security fixes? • tie up too many of your people, or involve too much retraining? • be tied to something that might not last? • need to fork/adapt a standard/module? Friday, January 16, 15
  • 32. The cons: will you... • lose a history of bugfixes or security fixes? • tie up too many of your people, or involve too much retraining? • be tied to something that might not last? • need to fork/adapt a standard/module? • not benefit your users or your team? Friday, January 16, 15
  • 34. Will you finish it? Friday, January 16, 15
  • 36. Future-proofing • Comment everything, in the code itself Friday, January 16, 15
  • 37. Future-proofing • Comment everything, in the code itself • Be grep friendly Friday, January 16, 15
  • 38. Future-proofing • Comment everything, in the code itself • Be grep friendly • Write task lists for your future self Friday, January 16, 15
  • 39. Future-proofing • Comment everything, in the code itself • Be grep friendly • Write task lists for your future self • Regularly install/compile from scratch Friday, January 16, 15
  • 40. Thank you! Denise Paolucci Dreamwidth Studios - www.dreamwidth.org Slides: www.slideshare.net/dreamwidth Friday, January 16, 15