SlideShare une entreprise Scribd logo
1  sur  83
Télécharger pour lire hors ligne
Drupal 8 
A Story of Growing Up and Getting Off the Island 
Angela "@webchick" Byron 
php[world] 
November 13, 2014
Who the heck are you? 
@webchick
What the heck are we talking 
about? 
• A brief intro to Drupal 
• Then vs. now 
• Re-writing your code base: a how-to 
guide 
• Lessons learned
Once upon a time… 
…in a dorm room far away (Antwerp, Belgium)…
Once upon a time… 
DRIES BUYTAERT 
…in a dorm room far away (Antwerp, Belgium)…
Once upon a time… 
DRIES BUYTAERT 
IKEA furniture 
…in a dorm room far away (Antwerp, Belgium)…
Once upon a time… 
Chess board 
DRIES BUYTAERT 
IKEA furniture 
…in a dorm room far away (Antwerp, Belgium)…
Once upon a time… 
Chess board 
DRIES BUYTAERT 
Stamp collection 
IKEA furniture 
…in a dorm room far away (Antwerp, Belgium)…
…A domain name 
registration was mis-typed… 
(Fun fact: Dries meant to register 'dorp.org,' which is Dutch for village, and 
accidentally found that drop.org was available.)
…And a project called 
"Drupal" was born. 
(Fun fact: "Drupal" is an Anglicization of the word "druppel" which is Dutch for "drop.")
What is Drupal? 
(Some context setting)
A content management system 
(to get you 80% there)
A content management system 
(to get you 80% there) 
Turn on features 
("modules")
A content management system 
(to get you 80% there) 
Turn on features 
("modules") 
Build content model 
("entities" and "fields")
A content management system 
(to get you 80% there) 
Turn on features 
("modules") 
Build content model 
("entities" and "fields") 
Create custom listings 
("views")
A content management system 
(to get you 80% there) 
Turn on features 
("modules") 
Build content model 
("entities" and "fields") 
Create custom listings 
("views") 
Make it purdy 
("themes")
A content management system 
(to get you 80% there) 
Turn on features 
("modules") 
…zero lines of code. 
Build content model 
("entities" and "fields") 
Create custom listings 
("views") 
Make it purdy 
("themes")
A content management framework 
(for that last ~20%) 
Add/extend functionality, integrate with third-party systems
An awesome community! 
(1.1M+ users, 35K+ developers, 2,400+ core contributors) 
Lots from non-traditional backgrounds, self-taught PHP via Drupal
Powering 2% of the web
Welcome to the Isle of 
Drupal!
Founded in 2001
Back then, OO PHP support 
wasn't stellar
So we had to invent creative 
ways to extend without OOP… 
…and many of these workarounds persist to this day.
Hooks 
user.module 
... 
foreach (module_list() as $name) { 
module_invoke($module_name, 'permission'); 
} 
... 
! 
example.module 
! 
function example_permission() { 
return array('administer examples'); 
}
Hooks 
user.module 
... 
foreach (module_list() as $name) { 
module_invoke($module_name, 'permission'); 
} 
... 
! 
example.module 
! 
function example_permission() { 
return array('administer examples'); 
}
Hooks 
user.module 
... 
foreach (module_list() as $name) { 
module_invoke($module_name, 'permission'); 
} 
... 
! 
example.module 
! 
function example_permission() { 
return array('administer examples'); 
}
Magically Named "Mystery 
Meat" Functions 
funecxtiaomn epxalemp.lme_ofodrmu(l)e { 
$form['greeting'] = array( 
'#type' => 'textfield', 
'#title' => t('Enter a greeting'), 
); 
$form['submit'] = array( 
'#type' => 'submit', 
'#value' => t('Greet me'), 
); 
return $form; 
} 
! 
function example_form_validate($form, &$form_state) { 
// Validate logic. 
} 
! 
function example_form_submit($form, &$form_state) { 
// Submit logic. 
}
Magically Named "Mystery 
Meat" Functions 
funecxtiaomn epxalemp.lme_ofodrmu(l)e { 
$form['greeting'] = array( 
'#type' => 'textfield', 
'#title' => t('Enter a greeting'), 
); 
$form['submit'] = array( 
'#type' => 'submit', 
'#value' => t('Greet me'), 
); 
return $form; 
} 
! 
function example_form_validate($form, &$form_state) { 
// Validate logic. 
} 
! 
function example_form_submit($form, &$form_state) { 
// Submit logic. 
}
Magically Named "Mystery 
Meat" Functions 
funecxtiaomn epxalemp.lme_ofodrmu(l)e { 
$form['greeting'] = array( 
'#type' => 'textfield', 
'#title' => t('Enter a greeting'), 
); 
$form['submit'] = array( 
'#type' => 'submit', 
'#value' => t('Greet me'), 
); 
return $form; 
} 
! 
function example_form_validate($form, &$form_state) { 
// Validate logic. 
} 
! 
function example_form_submit($form, &$form_state) { 
// Submit logic. 
}
Build/Alter Pattern 
example.module 
function example_menu() { 
$items['example'] = array( 
'title' => 'Example page', 
'page callback' => 'example_page', 
'access callback' => 'user_access', 
'access arguments' => array('administer foo'), 
); 
return $items; 
} 
! 
! 
custom.module 
function custom_menu_alter(&$items) { 
$items['example']['access arguments'] = array('view content'); 
}
Build/Alter Pattern 
example.module 
function example_menu() { 
$items['example'] = array( 
'title' => 'Example page', 
'page callback' => 'example_page', 
'access callback' => 'user_access', 
'access arguments' => array('administer foo'), 
); 
return $items; 
} 
! 
! 
custom.module 
function custom_menu_alter(&$items) { 
$items['example']['access arguments'] = array('view content'); 
}
Mistrust of third-party code
Mistrust of third-party code
Pain Points 
• Requires "unlearning" 
• ArrayPIs 
• Drupalisms 
• "Not Invented Here" 
• Talent pool
Enter Drupal 8
Re-joining the rest of the 
#phpworld! 
Composer 
Components 
PSR-4 
OOP 
Twig 
YAML 
Services
"Proudly Invented 
Elsewhere"
"Hello D8 World" 
example.info.yml 
name: Example 
description: "Example module" 
core: 8.x 
type: module 
example.routing.yml 
example.hello: 
path: '/hello' 
defaults: 
_content: 'DrupalexampleExampleController::hello' 
requirements: 
_permission: 'access content'
"Hello D8 World" 
src/ExampleController.php 
<?php 
namespace Drupalexample; 
use DrupalCoreControllerControllerBase; 
/** 
* Returns responses for Example module routes. 
*/ 
class ExampleController extends ControllerBase { 
public function hello() { 
return array('#markup' => $this->t('Hello world.')); 
} 
}
"Hello D8 World" 
src/ExampleController.php 
<?php 
namespace Drupalexample; 
use DrupalCoreControllerControllerBase; 
/** 
* Returns responses for Example module routes. 
*/ 
class ExampleController extends ControllerBase { 
public function hello() { 
return array('#markup' => $this->t('Hello world.')); 
} 
}
How did we get here? 
And how can lessons learned be applied to other 
projects?
There are two sides to any 
massive migration 
Code
There are two sides to any 
massive migration 
Code People
There are two sides to any 
massive migration 
Code People 
ignore this side at your GREAT peril!
0. Set the stage 
Pre-requisites to have in place first
Get your user base onto a 
modern platform 
(Fun fact: The GoPHP5 movement—a coalition of open source projects and hosts 
to expedite dropping support for PHP4 in 2007—was founded by Drupalistas! :))
Add metric butt-loads of 
automated test coverage 
Including continuous integration, so you can fix failures before commit 
(Fun fact: Drupal's 50K+ tests stayed 100% passing throughout D8's development)
Introduce a "taste" of the 
future 
db_update('example') 
->condition('id', $id) 
->fields(array('field2' => 10)) 
->execute(); 
Introduce concepts of OO and external libraries, get people comfortable with 
basics before going all out.
1. Set ambitious goals 
There's going to be a lot of pain before the pay-off; make 
the pay-off worth it.
Drupal 8 initiatives 
configuration 
management Mobile 
AUTHORING 
EXPERIENCE 
Multilingual Views web services
Refactor as part of achieving 
those goals
The most successful initiatives had 
leaders who… 
• Communicated "early and often"! 
• Documented decision-making 
• Built a team around them! 
• And genuinely valued that team 
• Sought ways to "scale" themselves! 
• Delegation 
• Re-usable training material 
http://hojtsy.hu/blog/2014-oct-17/authority-drupal-andor-open-source-general
2. Major change 
needs major buy-in 
Winning hearts and minds
Get the right people in the 
right room 
Web Services sprint: 
• Drupal and Symfony 
project leads 
• Initiative leads 
• Community voices 
• Detractors 
http://buytaert.net/the-future-is-a-restful-drupal
Detractors? Huh? 
• "Pure" trolls rarely exist! 
• But people feeling unheard, 
frustrated do 
• Provide outlet to air legitimate 
concerns! 
• Who knows; they might actually be 
right! 
• Build trust; remove defensiveness! 
• Ownership in process can turn 
detractors into advocates
Show your work! 
(Just like in math class. :)) 
• Can't just come back with a 
"decree" and expect people to 
fall in line.! 
• Folks need to understand and 
trust in your thought process 
• Transparency++ 
• "Issue queue or it didn't happen"
3. Git 'er done 
Iterate, iterate, iterate.
Shameless rip-off time! :) 
Thanks, Larry! Go check out the whole thing: 
http://www.palantir.net/presentations/lsp14-eating-elephpants/
How does one eat an 
elePHPant?
One bite at a time…
…with friends
…with lots of friends
For new functionality 
"Writing code should not be the first response. 
Finding if shared code exists should be the 
first response. 
— Beth Tucker-Long, Editor-in-Chief, php[architect]
For existing functionality 
• Refactor your app, don't replace it 
• Replace your component, don't refactor it 
• Especially cryptography! 
• Build new code as components, share with 
yourself 
• However! If ain't broke, don't fix it.
Drupal 7
Drupal 8 (early)
Remember: Incremental 
progress is still progress!
4. Recognize that major 
change is scary 
Empathy is your friend
Fear of losing investment in 
platform 
Particularly if it's your code that's being replaced.
Fear of going back to "square one" 
and being unable to catch up 
Especially pertinent for an aging community; hard to spend nights and 
weekends learning new things with kids and a mortgage
Fear of the unknown 
Not just OO, Symfony, but also entire toolchain; 
IDE vs. simple text editor/grep
Fear of losing what makes 
your community "you" 
Will hobbyists, non-techies be able to make the transition?
What helps? 
• Connecting: talking it out, sprints, planning meetings 
• Documentation: "conceptual" overviews, detailed API 
docs, books 
• Training: presentations, examples, blog posts 
• Tools: inspectors, scaffolding, automated code porting 
• DX (Developer Experience): eliminate boilerplate code, 
consistency/learnability of patterns 
• Reinforce that OO practices are used everywhere, 
may as well learn on a platform they already know!
When "stuff" hits the fan…
5 tips on handling a fork 
• Resist reacting. Instead, listen. 
• Dispel FUD, but take the high road 
• Help existing devs accentuate the 
positive 
• Try and maintain relationship with forkers 
• If concerns resonate, address them
Example: 
Semantic Versioning 
• Feature releases every 6 months 
• Backwards compatibility preserved 
• Both core devs and users working on same code base! 
• Drupal 9? Not until there's enough to warrant breaking BC
5. Avoid common 
pitfalls
Learn from our mistakes! 
Please! 
• The perfect is the enemy of the better. 
• "All you can eat" gives you a tummy-ache. 
• Don't be afraid to say "no." 
• Make decisions early and explicitly
In Summary 
1. Set the stage 
2. Set ambitious goals 
3. Major change needs major buy-in 
4. Recognize that major change is scary 
5. Avoid common pitfalls
We're not out of the woods 
yet…
…but we're thrilled to once 
again re-join the PHP world :)
Thank you! 
https://joind.in/11919 
Angela "@webchick" Byron 
php[world] 
November 13, 2014

Contenu connexe

Tendances

Python Tricks That You Can't Live Without
Python Tricks That You Can't Live WithoutPython Tricks That You Can't Live Without
Python Tricks That You Can't Live WithoutAudrey Roy
 
Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01Ravi Kumar
 
Why (I think) CoffeeScript Is Awesome
Why (I think) CoffeeScript Is AwesomeWhy (I think) CoffeeScript Is Awesome
Why (I think) CoffeeScript Is AwesomeJo Cranford
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
 
Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019Balázs Tatár
 
Let's write secure Drupal code! - Drupal Camp Poland 2019
Let's write secure Drupal code! - Drupal Camp Poland 2019Let's write secure Drupal code! - Drupal Camp Poland 2019
Let's write secure Drupal code! - Drupal Camp Poland 2019Balázs Tatár
 
Writing SOLID code (in practice)
Writing SOLID code (in practice)Writing SOLID code (in practice)
Writing SOLID code (in practice)Tomasz Wójcik
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Balázs Tatár
 
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Balázs Tatár
 
Moose - YAPC::NA 2012
Moose - YAPC::NA 2012Moose - YAPC::NA 2012
Moose - YAPC::NA 2012xSawyer
 
Proxies are Awesome!
Proxies are Awesome!Proxies are Awesome!
Proxies are Awesome!Brendan Eich
 
[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018Adam Tomat
 
Php on the Web and Desktop
Php on the Web and DesktopPhp on the Web and Desktop
Php on the Web and DesktopElizabeth Smith
 
Getting the most out of Java [Nordic Coding-2010]
Getting the most out of Java [Nordic Coding-2010]Getting the most out of Java [Nordic Coding-2010]
Getting the most out of Java [Nordic Coding-2010]Sven Efftinge
 
Puppet Camp Portland 2015: Introduction to Hiera (Beginner)
Puppet Camp Portland 2015: Introduction to Hiera (Beginner)Puppet Camp Portland 2015: Introduction to Hiera (Beginner)
Puppet Camp Portland 2015: Introduction to Hiera (Beginner)Puppet
 

Tendances (20)

Ruby
RubyRuby
Ruby
 
Moose
MooseMoose
Moose
 
Python Tricks That You Can't Live Without
Python Tricks That You Can't Live WithoutPython Tricks That You Can't Live Without
Python Tricks That You Can't Live Without
 
Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01Gettingintotheloop 100123225021-phpapp01
Gettingintotheloop 100123225021-phpapp01
 
Why (I think) CoffeeScript Is Awesome
Why (I think) CoffeeScript Is AwesomeWhy (I think) CoffeeScript Is Awesome
Why (I think) CoffeeScript Is Awesome
 
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018
 
Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019Let's write secure drupal code! - Drupal Camp Pannonia 2019
Let's write secure drupal code! - Drupal Camp Pannonia 2019
 
Let's write secure Drupal code! - Drupal Camp Poland 2019
Let's write secure Drupal code! - Drupal Camp Poland 2019Let's write secure Drupal code! - Drupal Camp Poland 2019
Let's write secure Drupal code! - Drupal Camp Poland 2019
 
Writing SOLID code (in practice)
Writing SOLID code (in practice)Writing SOLID code (in practice)
Writing SOLID code (in practice)
 
Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019Let's write secure Drupal code! DUG Belgium - 08/08/2019
Let's write secure Drupal code! DUG Belgium - 08/08/2019
 
What Is Doctrine?
What Is Doctrine?What Is Doctrine?
What Is Doctrine?
 
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
 
Moose - YAPC::NA 2012
Moose - YAPC::NA 2012Moose - YAPC::NA 2012
Moose - YAPC::NA 2012
 
Proxies are Awesome!
Proxies are Awesome!Proxies are Awesome!
Proxies are Awesome!
 
Twig tips and tricks
Twig tips and tricksTwig tips and tricks
Twig tips and tricks
 
[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018[WLDN] Supercharging word press development in 2018
[WLDN] Supercharging word press development in 2018
 
Php on the Web and Desktop
Php on the Web and DesktopPhp on the Web and Desktop
Php on the Web and Desktop
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Getting the most out of Java [Nordic Coding-2010]
Getting the most out of Java [Nordic Coding-2010]Getting the most out of Java [Nordic Coding-2010]
Getting the most out of Java [Nordic Coding-2010]
 
Puppet Camp Portland 2015: Introduction to Hiera (Beginner)
Puppet Camp Portland 2015: Introduction to Hiera (Beginner)Puppet Camp Portland 2015: Introduction to Hiera (Beginner)
Puppet Camp Portland 2015: Introduction to Hiera (Beginner)
 

Similaire à Drupal 8: A story of growing up and getting off the island

Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Michelangelo van Dam
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101Samantha Geitz
 
Drupal Camp Porto - Developing with Drupal: First Steps
Drupal Camp Porto - Developing with Drupal: First StepsDrupal Camp Porto - Developing with Drupal: First Steps
Drupal Camp Porto - Developing with Drupal: First StepsLuís Carneiro
 
PHP Basics and Demo HackU
PHP Basics and Demo HackUPHP Basics and Demo HackU
PHP Basics and Demo HackUAnshu Prateek
 
Drupal module development
Drupal module developmentDrupal module development
Drupal module developmentDamjan Cvetan
 
Top 8 Improvements in Drupal 8
Top 8 Improvements in Drupal 8Top 8 Improvements in Drupal 8
Top 8 Improvements in Drupal 8Angela Byron
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 
Python: an introduction for PHP webdevelopers
Python: an introduction for PHP webdevelopersPython: an introduction for PHP webdevelopers
Python: an introduction for PHP webdevelopersGlenn De Backer
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with SolrErik Hatcher
 
Python and Oracle : allies for best of data management
Python and Oracle : allies for best of data managementPython and Oracle : allies for best of data management
Python and Oracle : allies for best of data managementLaurent Leturgez
 
PHP-03-Functions.ppt
PHP-03-Functions.pptPHP-03-Functions.ppt
PHP-03-Functions.pptJamers2
 
Drupal Theme Development - DrupalCon Chicago 2011
Drupal Theme Development - DrupalCon Chicago 2011Drupal Theme Development - DrupalCon Chicago 2011
Drupal Theme Development - DrupalCon Chicago 2011Ryan Price
 
EuroPython 2017 - Bonono - Simple ETL in python 3.5+
EuroPython 2017 - Bonono - Simple ETL in python 3.5+EuroPython 2017 - Bonono - Simple ETL in python 3.5+
EuroPython 2017 - Bonono - Simple ETL in python 3.5+Romain Dorgueil
 

Similaire à Drupal 8: A story of growing up and getting off the island (20)

Php introduction
Php introductionPhp introduction
Php introduction
 
Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010Advanced Php - Macq Electronique 2010
Advanced Php - Macq Electronique 2010
 
REST APIs in Laravel 101
REST APIs in Laravel 101REST APIs in Laravel 101
REST APIs in Laravel 101
 
Drupal Camp Porto - Developing with Drupal: First Steps
Drupal Camp Porto - Developing with Drupal: First StepsDrupal Camp Porto - Developing with Drupal: First Steps
Drupal Camp Porto - Developing with Drupal: First Steps
 
PHP Basics and Demo HackU
PHP Basics and Demo HackUPHP Basics and Demo HackU
PHP Basics and Demo HackU
 
Drupal module development
Drupal module developmentDrupal module development
Drupal module development
 
Top 8 Improvements in Drupal 8
Top 8 Improvements in Drupal 8Top 8 Improvements in Drupal 8
Top 8 Improvements in Drupal 8
 
Modern php
Modern phpModern php
Modern php
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Yahoo is open to developers
Yahoo is open to developersYahoo is open to developers
Yahoo is open to developers
 
Python: an introduction for PHP webdevelopers
Python: an introduction for PHP webdevelopersPython: an introduction for PHP webdevelopers
Python: an introduction for PHP webdevelopers
 
Rapid Prototyping with Solr
Rapid Prototyping with SolrRapid Prototyping with Solr
Rapid Prototyping with Solr
 
Phphacku iitd
Phphacku iitdPhphacku iitd
Phphacku iitd
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Python and Oracle : allies for best of data management
Python and Oracle : allies for best of data managementPython and Oracle : allies for best of data management
Python and Oracle : allies for best of data management
 
PHP-03-Functions.ppt
PHP-03-Functions.pptPHP-03-Functions.ppt
PHP-03-Functions.ppt
 
PHP-03-Functions.ppt
PHP-03-Functions.pptPHP-03-Functions.ppt
PHP-03-Functions.ppt
 
Drupal Theme Development - DrupalCon Chicago 2011
Drupal Theme Development - DrupalCon Chicago 2011Drupal Theme Development - DrupalCon Chicago 2011
Drupal Theme Development - DrupalCon Chicago 2011
 
JS Essence
JS EssenceJS Essence
JS Essence
 
EuroPython 2017 - Bonono - Simple ETL in python 3.5+
EuroPython 2017 - Bonono - Simple ETL in python 3.5+EuroPython 2017 - Bonono - Simple ETL in python 3.5+
EuroPython 2017 - Bonono - Simple ETL in python 3.5+
 

Plus de Angela Byron

Lessons Learned From Scaling An Open Source Community By 10,000%
Lessons Learned From Scaling An Open Source Community By 10,000%Lessons Learned From Scaling An Open Source Community By 10,000%
Lessons Learned From Scaling An Open Source Community By 10,000%Angela Byron
 
Webchick's Personal User Manual
Webchick's Personal User ManualWebchick's Personal User Manual
Webchick's Personal User ManualAngela Byron
 
Creating a Project Priority Matrix
Creating a Project Priority MatrixCreating a Project Priority Matrix
Creating a Project Priority MatrixAngela Byron
 
From Imposter Syndrome to Core Committer: A GSoC Journey
From Imposter Syndrome to Core Committer: A GSoC JourneyFrom Imposter Syndrome to Core Committer: A GSoC Journey
From Imposter Syndrome to Core Committer: A GSoC JourneyAngela Byron
 
Collaboration Needs of Massive Open Source Communities
Collaboration Needs of Massive Open Source CommunitiesCollaboration Needs of Massive Open Source Communities
Collaboration Needs of Massive Open Source CommunitiesAngela Byron
 
Tales of Drupal Past: Origin Stories of Contributors
Tales of Drupal Past: Origin Stories of ContributorsTales of Drupal Past: Origin Stories of Contributors
Tales of Drupal Past: Origin Stories of ContributorsAngela Byron
 
The Evolution of Drupal's governance
The Evolution of Drupal's governanceThe Evolution of Drupal's governance
The Evolution of Drupal's governanceAngela Byron
 
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 updateDrupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 updateAngela Byron
 
OCTO On-Site Off-Site Update on D8 Roadmap
OCTO On-Site Off-Site Update on D8 RoadmapOCTO On-Site Off-Site Update on D8 Roadmap
OCTO On-Site Off-Site Update on D8 RoadmapAngela Byron
 
Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8
Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8
Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8Angela Byron
 
From Troubled Waters to Water Under the Bridge
From Troubled Waters to Water Under the BridgeFrom Troubled Waters to Water Under the Bridge
From Troubled Waters to Water Under the BridgeAngela Byron
 
Drupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths DebunkedDrupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths DebunkedAngela Byron
 
Acquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAcquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAngela Byron
 
Drupal's competition
Drupal's competitionDrupal's competition
Drupal's competitionAngela Byron
 
Drupal 8 Initiatives
Drupal 8 InitiativesDrupal 8 Initiatives
Drupal 8 InitiativesAngela Byron
 
The potential in Drupal 8.x and how to realize it
The potential in Drupal 8.x and how to realize itThe potential in Drupal 8.x and how to realize it
The potential in Drupal 8.x and how to realize itAngela Byron
 
Acquia Drupal 8 Hackathon Demo 2015
Acquia Drupal 8 Hackathon Demo 2015Acquia Drupal 8 Hackathon Demo 2015
Acquia Drupal 8 Hackathon Demo 2015Angela Byron
 
Drupal 8 - Build Week Update
Drupal 8 - Build Week UpdateDrupal 8 - Build Week Update
Drupal 8 - Build Week UpdateAngela Byron
 
Plain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsPlain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsAngela Byron
 

Plus de Angela Byron (20)

Lessons Learned From Scaling An Open Source Community By 10,000%
Lessons Learned From Scaling An Open Source Community By 10,000%Lessons Learned From Scaling An Open Source Community By 10,000%
Lessons Learned From Scaling An Open Source Community By 10,000%
 
Webchick's Personal User Manual
Webchick's Personal User ManualWebchick's Personal User Manual
Webchick's Personal User Manual
 
Creating a Project Priority Matrix
Creating a Project Priority MatrixCreating a Project Priority Matrix
Creating a Project Priority Matrix
 
From Imposter Syndrome to Core Committer: A GSoC Journey
From Imposter Syndrome to Core Committer: A GSoC JourneyFrom Imposter Syndrome to Core Committer: A GSoC Journey
From Imposter Syndrome to Core Committer: A GSoC Journey
 
Collaboration Needs of Massive Open Source Communities
Collaboration Needs of Massive Open Source CommunitiesCollaboration Needs of Massive Open Source Communities
Collaboration Needs of Massive Open Source Communities
 
Tales of Drupal Past: Origin Stories of Contributors
Tales of Drupal Past: Origin Stories of ContributorsTales of Drupal Past: Origin Stories of Contributors
Tales of Drupal Past: Origin Stories of Contributors
 
The Evolution of Drupal's governance
The Evolution of Drupal's governanceThe Evolution of Drupal's governance
The Evolution of Drupal's governance
 
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 updateDrupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
 
OCTO On-Site Off-Site Update on D8 Roadmap
OCTO On-Site Off-Site Update on D8 RoadmapOCTO On-Site Off-Site Update on D8 Roadmap
OCTO On-Site Off-Site Update on D8 Roadmap
 
Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8
Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8
Drupal 9 and Backwards Compatibility: Why now is the time to upgrade to Drupal 8
 
From Troubled Waters to Water Under the Bridge
From Troubled Waters to Water Under the BridgeFrom Troubled Waters to Water Under the Bridge
From Troubled Waters to Water Under the Bridge
 
Drupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths DebunkedDrupal 8 Adoption Myths Debunked
Drupal 8 Adoption Myths Debunked
 
Acquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTOAcquia Company Update on Drupal 8.2/8.3/OCTO
Acquia Company Update on Drupal 8.2/8.3/OCTO
 
Drupal's competition
Drupal's competitionDrupal's competition
Drupal's competition
 
Drupal 8 Initiatives
Drupal 8 InitiativesDrupal 8 Initiatives
Drupal 8 Initiatives
 
The potential in Drupal 8.x and how to realize it
The potential in Drupal 8.x and how to realize itThe potential in Drupal 8.x and how to realize it
The potential in Drupal 8.x and how to realize it
 
Acquia Drupal 8 Hackathon Demo 2015
Acquia Drupal 8 Hackathon Demo 2015Acquia Drupal 8 Hackathon Demo 2015
Acquia Drupal 8 Hackathon Demo 2015
 
Ux testing recap
Ux testing recapUx testing recap
Ux testing recap
 
Drupal 8 - Build Week Update
Drupal 8 - Build Week UpdateDrupal 8 - Build Week Update
Drupal 8 - Build Week Update
 
Plain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticalsPlain english guide to drupal 8 criticals
Plain english guide to drupal 8 criticals
 

Dernier

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 

Dernier (20)

Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

Drupal 8: A story of growing up and getting off the island

  • 1. Drupal 8 A Story of Growing Up and Getting Off the Island Angela "@webchick" Byron php[world] November 13, 2014
  • 2. Who the heck are you? @webchick
  • 3. What the heck are we talking about? • A brief intro to Drupal • Then vs. now • Re-writing your code base: a how-to guide • Lessons learned
  • 4. Once upon a time… …in a dorm room far away (Antwerp, Belgium)…
  • 5. Once upon a time… DRIES BUYTAERT …in a dorm room far away (Antwerp, Belgium)…
  • 6. Once upon a time… DRIES BUYTAERT IKEA furniture …in a dorm room far away (Antwerp, Belgium)…
  • 7. Once upon a time… Chess board DRIES BUYTAERT IKEA furniture …in a dorm room far away (Antwerp, Belgium)…
  • 8. Once upon a time… Chess board DRIES BUYTAERT Stamp collection IKEA furniture …in a dorm room far away (Antwerp, Belgium)…
  • 9. …A domain name registration was mis-typed… (Fun fact: Dries meant to register 'dorp.org,' which is Dutch for village, and accidentally found that drop.org was available.)
  • 10. …And a project called "Drupal" was born. (Fun fact: "Drupal" is an Anglicization of the word "druppel" which is Dutch for "drop.")
  • 11. What is Drupal? (Some context setting)
  • 12. A content management system (to get you 80% there)
  • 13. A content management system (to get you 80% there) Turn on features ("modules")
  • 14. A content management system (to get you 80% there) Turn on features ("modules") Build content model ("entities" and "fields")
  • 15. A content management system (to get you 80% there) Turn on features ("modules") Build content model ("entities" and "fields") Create custom listings ("views")
  • 16. A content management system (to get you 80% there) Turn on features ("modules") Build content model ("entities" and "fields") Create custom listings ("views") Make it purdy ("themes")
  • 17. A content management system (to get you 80% there) Turn on features ("modules") …zero lines of code. Build content model ("entities" and "fields") Create custom listings ("views") Make it purdy ("themes")
  • 18. A content management framework (for that last ~20%) Add/extend functionality, integrate with third-party systems
  • 19. An awesome community! (1.1M+ users, 35K+ developers, 2,400+ core contributors) Lots from non-traditional backgrounds, self-taught PHP via Drupal
  • 20. Powering 2% of the web
  • 21. Welcome to the Isle of Drupal!
  • 23. Back then, OO PHP support wasn't stellar
  • 24. So we had to invent creative ways to extend without OOP… …and many of these workarounds persist to this day.
  • 25. Hooks user.module ... foreach (module_list() as $name) { module_invoke($module_name, 'permission'); } ... ! example.module ! function example_permission() { return array('administer examples'); }
  • 26. Hooks user.module ... foreach (module_list() as $name) { module_invoke($module_name, 'permission'); } ... ! example.module ! function example_permission() { return array('administer examples'); }
  • 27. Hooks user.module ... foreach (module_list() as $name) { module_invoke($module_name, 'permission'); } ... ! example.module ! function example_permission() { return array('administer examples'); }
  • 28. Magically Named "Mystery Meat" Functions funecxtiaomn epxalemp.lme_ofodrmu(l)e { $form['greeting'] = array( '#type' => 'textfield', '#title' => t('Enter a greeting'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Greet me'), ); return $form; } ! function example_form_validate($form, &$form_state) { // Validate logic. } ! function example_form_submit($form, &$form_state) { // Submit logic. }
  • 29. Magically Named "Mystery Meat" Functions funecxtiaomn epxalemp.lme_ofodrmu(l)e { $form['greeting'] = array( '#type' => 'textfield', '#title' => t('Enter a greeting'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Greet me'), ); return $form; } ! function example_form_validate($form, &$form_state) { // Validate logic. } ! function example_form_submit($form, &$form_state) { // Submit logic. }
  • 30. Magically Named "Mystery Meat" Functions funecxtiaomn epxalemp.lme_ofodrmu(l)e { $form['greeting'] = array( '#type' => 'textfield', '#title' => t('Enter a greeting'), ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Greet me'), ); return $form; } ! function example_form_validate($form, &$form_state) { // Validate logic. } ! function example_form_submit($form, &$form_state) { // Submit logic. }
  • 31. Build/Alter Pattern example.module function example_menu() { $items['example'] = array( 'title' => 'Example page', 'page callback' => 'example_page', 'access callback' => 'user_access', 'access arguments' => array('administer foo'), ); return $items; } ! ! custom.module function custom_menu_alter(&$items) { $items['example']['access arguments'] = array('view content'); }
  • 32. Build/Alter Pattern example.module function example_menu() { $items['example'] = array( 'title' => 'Example page', 'page callback' => 'example_page', 'access callback' => 'user_access', 'access arguments' => array('administer foo'), ); return $items; } ! ! custom.module function custom_menu_alter(&$items) { $items['example']['access arguments'] = array('view content'); }
  • 35. Pain Points • Requires "unlearning" • ArrayPIs • Drupalisms • "Not Invented Here" • Talent pool
  • 37. Re-joining the rest of the #phpworld! Composer Components PSR-4 OOP Twig YAML Services
  • 39. "Hello D8 World" example.info.yml name: Example description: "Example module" core: 8.x type: module example.routing.yml example.hello: path: '/hello' defaults: _content: 'DrupalexampleExampleController::hello' requirements: _permission: 'access content'
  • 40. "Hello D8 World" src/ExampleController.php <?php namespace Drupalexample; use DrupalCoreControllerControllerBase; /** * Returns responses for Example module routes. */ class ExampleController extends ControllerBase { public function hello() { return array('#markup' => $this->t('Hello world.')); } }
  • 41. "Hello D8 World" src/ExampleController.php <?php namespace Drupalexample; use DrupalCoreControllerControllerBase; /** * Returns responses for Example module routes. */ class ExampleController extends ControllerBase { public function hello() { return array('#markup' => $this->t('Hello world.')); } }
  • 42. How did we get here? And how can lessons learned be applied to other projects?
  • 43. There are two sides to any massive migration Code
  • 44. There are two sides to any massive migration Code People
  • 45. There are two sides to any massive migration Code People ignore this side at your GREAT peril!
  • 46. 0. Set the stage Pre-requisites to have in place first
  • 47. Get your user base onto a modern platform (Fun fact: The GoPHP5 movement—a coalition of open source projects and hosts to expedite dropping support for PHP4 in 2007—was founded by Drupalistas! :))
  • 48. Add metric butt-loads of automated test coverage Including continuous integration, so you can fix failures before commit (Fun fact: Drupal's 50K+ tests stayed 100% passing throughout D8's development)
  • 49. Introduce a "taste" of the future db_update('example') ->condition('id', $id) ->fields(array('field2' => 10)) ->execute(); Introduce concepts of OO and external libraries, get people comfortable with basics before going all out.
  • 50. 1. Set ambitious goals There's going to be a lot of pain before the pay-off; make the pay-off worth it.
  • 51. Drupal 8 initiatives configuration management Mobile AUTHORING EXPERIENCE Multilingual Views web services
  • 52. Refactor as part of achieving those goals
  • 53. The most successful initiatives had leaders who… • Communicated "early and often"! • Documented decision-making • Built a team around them! • And genuinely valued that team • Sought ways to "scale" themselves! • Delegation • Re-usable training material http://hojtsy.hu/blog/2014-oct-17/authority-drupal-andor-open-source-general
  • 54. 2. Major change needs major buy-in Winning hearts and minds
  • 55. Get the right people in the right room Web Services sprint: • Drupal and Symfony project leads • Initiative leads • Community voices • Detractors http://buytaert.net/the-future-is-a-restful-drupal
  • 56. Detractors? Huh? • "Pure" trolls rarely exist! • But people feeling unheard, frustrated do • Provide outlet to air legitimate concerns! • Who knows; they might actually be right! • Build trust; remove defensiveness! • Ownership in process can turn detractors into advocates
  • 57. Show your work! (Just like in math class. :)) • Can't just come back with a "decree" and expect people to fall in line.! • Folks need to understand and trust in your thought process • Transparency++ • "Issue queue or it didn't happen"
  • 58. 3. Git 'er done Iterate, iterate, iterate.
  • 59. Shameless rip-off time! :) Thanks, Larry! Go check out the whole thing: http://www.palantir.net/presentations/lsp14-eating-elephpants/
  • 60. How does one eat an elePHPant?
  • 61. One bite at a time…
  • 63. …with lots of friends
  • 64. For new functionality "Writing code should not be the first response. Finding if shared code exists should be the first response. — Beth Tucker-Long, Editor-in-Chief, php[architect]
  • 65. For existing functionality • Refactor your app, don't replace it • Replace your component, don't refactor it • Especially cryptography! • Build new code as components, share with yourself • However! If ain't broke, don't fix it.
  • 68. Remember: Incremental progress is still progress!
  • 69. 4. Recognize that major change is scary Empathy is your friend
  • 70. Fear of losing investment in platform Particularly if it's your code that's being replaced.
  • 71. Fear of going back to "square one" and being unable to catch up Especially pertinent for an aging community; hard to spend nights and weekends learning new things with kids and a mortgage
  • 72. Fear of the unknown Not just OO, Symfony, but also entire toolchain; IDE vs. simple text editor/grep
  • 73. Fear of losing what makes your community "you" Will hobbyists, non-techies be able to make the transition?
  • 74. What helps? • Connecting: talking it out, sprints, planning meetings • Documentation: "conceptual" overviews, detailed API docs, books • Training: presentations, examples, blog posts • Tools: inspectors, scaffolding, automated code porting • DX (Developer Experience): eliminate boilerplate code, consistency/learnability of patterns • Reinforce that OO practices are used everywhere, may as well learn on a platform they already know!
  • 75. When "stuff" hits the fan…
  • 76. 5 tips on handling a fork • Resist reacting. Instead, listen. • Dispel FUD, but take the high road • Help existing devs accentuate the positive • Try and maintain relationship with forkers • If concerns resonate, address them
  • 77. Example: Semantic Versioning • Feature releases every 6 months • Backwards compatibility preserved • Both core devs and users working on same code base! • Drupal 9? Not until there's enough to warrant breaking BC
  • 78. 5. Avoid common pitfalls
  • 79. Learn from our mistakes! Please! • The perfect is the enemy of the better. • "All you can eat" gives you a tummy-ache. • Don't be afraid to say "no." • Make decisions early and explicitly
  • 80. In Summary 1. Set the stage 2. Set ambitious goals 3. Major change needs major buy-in 4. Recognize that major change is scary 5. Avoid common pitfalls
  • 81. We're not out of the woods yet…
  • 82. …but we're thrilled to once again re-join the PHP world :)
  • 83. Thank you! https://joind.in/11919 Angela "@webchick" Byron php[world] November 13, 2014