SlideShare a Scribd company logo
www.vardot.com
Agile Jordan | January 2018
Don't Repeat Yourself
(DRY),


Be Agile
Agile Jordan | January 2018
Mohammed J. Razem
CEO & Founder at Vardot
m.razem@vardot.com

@moerazem

Agile Jordan | January 2018
• Enterprise Open Source Products Built on
Drupal
• github.com/Vardot
• drupal.org/Vardot
Our Clients
What’s DRY (Don’t
Repeat Yourself)
In Context
Agile Jordan | January 2018
Every piece of knowledge must
have a single, unambiguous,
authoritative representation in
the system
- Wikipedia (https://www.wikiwand.com/en/Don't_repeat_yourself)
Agile Jordan | January 2018
Don’t Repeat Yourself
• One of the most important Programming
Principles
• Proper OOP is a direct application of DRY
• Especially important in multi-tier
architectures
Agile Jordan | January 2018
Don’t Repeat Yourself
• Repetition is the root of
all software evil
• Duplication in logic
should be eliminated
via abstraction
• Duplication in process
should be eliminated
via automation
What is Drupal?

And Why as a Case
Study?
In Context
Agile Jordan | January 2018
Agile Jordan | January 2018
Drupal is…
• Doesn’t have a good reputation
• Drupal 5, 6, 7, was repeating it self
• Not OOP
• Doesn’t reuse popular software
components
Agile Jordan | January 2018
Drupal 8 is Built on DRY
• Drupal 8 uses OOP methodologies
that implement DRY principle: i.e.
Interfaces, Abstract Classes,
Services, Service Containers …etc.
Agile Jordan | January 2018
Proudly
Built
Elsewhere
Agile Jordan | January 2018
Site Life Cycle
Perspectives
T E ST E R
( QA )
T H E M E RD E V E LO P E RD E S I G N E R
Agile Jordan | January 2018
Designer Perspective
• Introduction of “front-end framework” is all
about DRY - and Agile
• Use Atomic Design
• Consider Bootstrap, UI Kit, Material Design
Agile Jordan | January 2018
Designer Perspective
DRY ✔ Not Applying DRY ✘
• Design atoms, molecules,
organisms, templates, then
pages
• Design “canvas” or “pages”
• Use Material Design or
Bootstrap Extensions in
Sketch to design
• Design in Photoshop
Agile Jordan | January 2018
Designer Perspective
• Consider:
• Bootstrap, Material Design, or UI Kit
• Atomic Design Principles: http://patternlab.io/
• Sketch not Photoshop
Agile Jordan | January 2018
Developer Perspective
• Using Composer in your
project
• Build your distribution or
package instead of starting
from scratch every time
• Using proper APIs, and entities
for new system objects
Agile Jordan | January 2018
Developer Perspective
DRY ✔ Not Applying DRY ✘
• Use Composer to include
modules/components in your
project
• Commit contrib modules and
components in your repository
• Build a distribution or
package for your own needs
• Every time you have a new site,
you download Drupal and other
module/themes/libraries
• Use proper Drupal 8 API.

i.e. Services, Service
containers, controllers, …etc.
• Not using Drupal 8 API.

Creating custom DB table with
custom PHP code to write to it
Agile Jordan | January 2018
Developer Perspective
• Consider:
• Composer
• Libraries in Drupal 8
Agile Jordan | January 2018
Themer Perspective
• Use “Base themes”. i.e.
Bootstrap
• Theming for “View Modes” and
global styling first
• Use Libraries instead of custom
inclusions
• Using Less/Sass CSS to write
CSS
Agile Jordan | January 2018
Themer Perspective
DRY ✔ Not Applying DRY ✘
• Use Bootstrap as base theme
 • Build your custom theme from
scratch
• Theme view modes with
consistent and global styling.
Theme for general CSS
classes
• Theme fields. Theme specific
classes. Each newly created
view will need new theming
• Use “Libraries” in Drupal to
provide front-end specific
functionality
• Embed a custom JavaScript in
your theme to provide front-
end specific functionality
Agile Jordan | January 2018
Themer Perspective
DRY ✔ Not Applying DRY ✘
• Use Less/Sass CSS
variables, mixing, nested
rules …etc.
• Write regular (standard) CSS
Agile Jordan | January 2018
Themer Perspective
• Consider:
• Less/Sass vs CSS
• Libraries in Drupal 8
Agile Jordan | January 2018
Tester (QA) Perspective
• Testing is a process. Therefore,
we need to automate the
process
• Using automated functional
testing
• Using Continuous Integration
Agile Jordan | January 2018
Tester (QA) Perspective
DRY ✔ Not Applying DRY ✘
• Write an automated functional
test and test by running it

• Manually execute the test every
time
• Run a Continuous Integration
build, that will run all
automated tests
• Everytime you release, test the
whole system!!!
Agile Jordan | January 2018
Tester (QA) Perspective
• Consider:
• Behat tests
• Continuous Integration build
Agile Jordan | January 2018
Agile Jordan | January 2018
Conclusion
Agile Jordan | January 2018
• Agile Software Development is tightly
coupled with reusing software components
• Spend more time researching working
software than building your custom one
• Automate processes: Automated testing
• Use Front-end Frameworks and Package
Managers
Agile Jordan | January 2018
Thank You!

More Related Content

PDF
How to become an Android developer
PPTX
Design p atterns
PPTX
Creating Custom HTML Helpers in ASP.NET MVC
PPTX
Novidades do ASP.NET e do Visual Studio 2013
PPTX
WordPress Optimization - Pubcon Las Vegas 2014
PPTX
Using JavaScript Libraries like D3.js with WordPress
PPTX
TypeScript and Angular2 (Love at first sight)
PPTX
Making Visualforce RemoteActions Bulletproof with TypeScript
How to become an Android developer
Design p atterns
Creating Custom HTML Helpers in ASP.NET MVC
Novidades do ASP.NET e do Visual Studio 2013
WordPress Optimization - Pubcon Las Vegas 2014
Using JavaScript Libraries like D3.js with WordPress
TypeScript and Angular2 (Love at first sight)
Making Visualforce RemoteActions Bulletproof with TypeScript

What's hot (20)

PDF
Making Visualforce RemoteAction Bulletproof with TypeScript
PDF
2018 05-24 CopenhagenJS meetup - Titanium Alloy
KEY
Semi Automatic Code Review
PPTX
Creating Custom HTML Helpers In ASP.NET MVC
KEY
Designing and building for the editor experience
PPTX
Codestock 2015 - Visual Studio 2015 for Web Developers slides
PPTX
Swagger - make your API accessible
PDF
Cross platform Native apps with JavaScript - Helsinki 2018-04
PDF
Lessons learned: Choosing your documentation system
PPS
Ng Sydney Dynamic Templates Talk - 18 April 2018
PPTX
Azure Integration DTAP Series, How to go from Development to Production – Par...
PDF
Breathe New Life into Your Existing JavaScript Applications with Web Components
PDF
Deccan ruby-conf-talk
PPTX
Ember JS - Why Ember Matches My Wavelength
PPTX
Swagger in the API Lifecycle
PDF
Introduction to Django
PDF
Design Driven API Development
PDF
Frontend as a first class citizen
PDF
Sweet Sassafras: A Designer's Dive into Sass
PPTX
Azure Integration DTAP Series, How to go from Development to Production – Par...
Making Visualforce RemoteAction Bulletproof with TypeScript
2018 05-24 CopenhagenJS meetup - Titanium Alloy
Semi Automatic Code Review
Creating Custom HTML Helpers In ASP.NET MVC
Designing and building for the editor experience
Codestock 2015 - Visual Studio 2015 for Web Developers slides
Swagger - make your API accessible
Cross platform Native apps with JavaScript - Helsinki 2018-04
Lessons learned: Choosing your documentation system
Ng Sydney Dynamic Templates Talk - 18 April 2018
Azure Integration DTAP Series, How to go from Development to Production – Par...
Breathe New Life into Your Existing JavaScript Applications with Web Components
Deccan ruby-conf-talk
Ember JS - Why Ember Matches My Wavelength
Swagger in the API Lifecycle
Introduction to Django
Design Driven API Development
Frontend as a first class citizen
Sweet Sassafras: A Designer's Dive into Sass
Azure Integration DTAP Series, How to go from Development to Production – Par...
Ad

Similar to Don't Repeat Yourself, Be Agile (20)

PDF
Using DRY (Don't Repeat Yourself) Principle in Drupal 8 Site Life Cycle
KEY
Agile toolkit present 2012
KEY
Agile toolkit present 2012
PPTX
f8db413453b33e4ffrointend development bbasics.pptx
PPTX
Agile presentation
PPTX
Professionalizing the Front-end
PDF
Agile or Awkward
PPTX
Feature driven agile oriented web applications
PDF
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
DOCX
The Technical Side of Harvard.edu Redesign
PPT
Building Rich User Experiences Without JavaScript Spaghetti
KEY
jsDay - Javascript as a programming language
KEY
Single Page Applications - Desert Code Camp 2012
PPSX
20141109 Agile Dev East 2014 Conf Lean Documentation
PPTX
How a Top Retailer Brought Together UX Design and Agile Development (and got ...
PPTX
UXCampDC 2010 - Agile UX
PPTX
PRAKHAR-Building-the-Web.pptx on web development
PDF
L21 Architecture and Agile
PDF
Ultimate Skills Checklist for Your First Front-End Developer Job
PPTX
Using DRY (Don't Repeat Yourself) Principle in Drupal 8 Site Life Cycle
Agile toolkit present 2012
Agile toolkit present 2012
f8db413453b33e4ffrointend development bbasics.pptx
Agile presentation
Professionalizing the Front-end
Agile or Awkward
Feature driven agile oriented web applications
Building Enterprise Grade Front-End Applications with JavaScript Frameworks
The Technical Side of Harvard.edu Redesign
Building Rich User Experiences Without JavaScript Spaghetti
jsDay - Javascript as a programming language
Single Page Applications - Desert Code Camp 2012
20141109 Agile Dev East 2014 Conf Lean Documentation
How a Top Retailer Brought Together UX Design and Agile Development (and got ...
UXCampDC 2010 - Agile UX
PRAKHAR-Building-the-Web.pptx on web development
L21 Architecture and Agile
Ultimate Skills Checklist for Your First Front-End Developer Job
Ad

Recently uploaded (20)

PDF
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
PDF
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
PDF
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
PDF
Salesforce Agentforce AI Implementation.pdf
PDF
Digital Systems & Binary Numbers (comprehensive )
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
CapCut Video Editor 6.8.1 Crack for PC Latest Download (Fully Activated) 2025
PDF
AI-Powered Threat Modeling: The Future of Cybersecurity by Arun Kumar Elengov...
PPTX
Oracle Fusion HCM Cloud Demo for Beginners
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PPTX
history of c programming in notes for students .pptx
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPTX
AMADEUS TRAVEL AGENT SOFTWARE | AMADEUS TICKETING SYSTEM
PDF
17 Powerful Integrations Your Next-Gen MLM Software Needs
PDF
iTop VPN Free 5.6.0.5262 Crack latest version 2025
PDF
Autodesk AutoCAD Crack Free Download 2025
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
PDF
How AI/LLM recommend to you ? GDG meetup 16 Aug by Fariman Guliev
CCleaner Pro 6.38.11537 Crack Final Latest Version 2025
How to Make Money in the Metaverse_ Top Strategies for Beginners.pdf
Product Update: Alluxio AI 3.7 Now with Sub-Millisecond Latency
Salesforce Agentforce AI Implementation.pdf
Digital Systems & Binary Numbers (comprehensive )
CHAPTER 2 - PM Management and IT Context
CapCut Video Editor 6.8.1 Crack for PC Latest Download (Fully Activated) 2025
AI-Powered Threat Modeling: The Future of Cybersecurity by Arun Kumar Elengov...
Oracle Fusion HCM Cloud Demo for Beginners
Design an Analysis of Algorithms II-SECS-1021-03
Adobe Illustrator 28.6 Crack My Vision of Vector Design
history of c programming in notes for students .pptx
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
AMADEUS TRAVEL AGENT SOFTWARE | AMADEUS TICKETING SYSTEM
17 Powerful Integrations Your Next-Gen MLM Software Needs
iTop VPN Free 5.6.0.5262 Crack latest version 2025
Autodesk AutoCAD Crack Free Download 2025
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
How AI/LLM recommend to you ? GDG meetup 16 Aug by Fariman Guliev

Don't Repeat Yourself, Be Agile

  • 1. www.vardot.com Agile Jordan | January 2018 Don't Repeat Yourself (DRY), 
 Be Agile
  • 2. Agile Jordan | January 2018 Mohammed J. Razem CEO & Founder at Vardot m.razem@vardot.com
 @moerazem

  • 3. Agile Jordan | January 2018 • Enterprise Open Source Products Built on Drupal • github.com/Vardot • drupal.org/Vardot
  • 5. What’s DRY (Don’t Repeat Yourself) In Context
  • 6. Agile Jordan | January 2018 Every piece of knowledge must have a single, unambiguous, authoritative representation in the system - Wikipedia (https://www.wikiwand.com/en/Don't_repeat_yourself)
  • 7. Agile Jordan | January 2018 Don’t Repeat Yourself • One of the most important Programming Principles • Proper OOP is a direct application of DRY • Especially important in multi-tier architectures
  • 8. Agile Jordan | January 2018 Don’t Repeat Yourself • Repetition is the root of all software evil • Duplication in logic should be eliminated via abstraction • Duplication in process should be eliminated via automation
  • 9. What is Drupal?
 And Why as a Case Study? In Context
  • 10. Agile Jordan | January 2018
  • 11. Agile Jordan | January 2018 Drupal is… • Doesn’t have a good reputation • Drupal 5, 6, 7, was repeating it self • Not OOP • Doesn’t reuse popular software components
  • 12. Agile Jordan | January 2018 Drupal 8 is Built on DRY • Drupal 8 uses OOP methodologies that implement DRY principle: i.e. Interfaces, Abstract Classes, Services, Service Containers …etc.
  • 13. Agile Jordan | January 2018 Proudly Built Elsewhere
  • 14. Agile Jordan | January 2018 Site Life Cycle Perspectives T E ST E R ( QA ) T H E M E RD E V E LO P E RD E S I G N E R
  • 15. Agile Jordan | January 2018 Designer Perspective • Introduction of “front-end framework” is all about DRY - and Agile • Use Atomic Design • Consider Bootstrap, UI Kit, Material Design
  • 16. Agile Jordan | January 2018 Designer Perspective DRY ✔ Not Applying DRY ✘ • Design atoms, molecules, organisms, templates, then pages • Design “canvas” or “pages” • Use Material Design or Bootstrap Extensions in Sketch to design • Design in Photoshop
  • 17. Agile Jordan | January 2018 Designer Perspective • Consider: • Bootstrap, Material Design, or UI Kit • Atomic Design Principles: http://patternlab.io/ • Sketch not Photoshop
  • 18. Agile Jordan | January 2018 Developer Perspective • Using Composer in your project • Build your distribution or package instead of starting from scratch every time • Using proper APIs, and entities for new system objects
  • 19. Agile Jordan | January 2018 Developer Perspective DRY ✔ Not Applying DRY ✘ • Use Composer to include modules/components in your project • Commit contrib modules and components in your repository • Build a distribution or package for your own needs • Every time you have a new site, you download Drupal and other module/themes/libraries • Use proper Drupal 8 API.
 i.e. Services, Service containers, controllers, …etc. • Not using Drupal 8 API.
 Creating custom DB table with custom PHP code to write to it
  • 20. Agile Jordan | January 2018 Developer Perspective • Consider: • Composer • Libraries in Drupal 8
  • 21. Agile Jordan | January 2018 Themer Perspective • Use “Base themes”. i.e. Bootstrap • Theming for “View Modes” and global styling first • Use Libraries instead of custom inclusions • Using Less/Sass CSS to write CSS
  • 22. Agile Jordan | January 2018 Themer Perspective DRY ✔ Not Applying DRY ✘ • Use Bootstrap as base theme • Build your custom theme from scratch • Theme view modes with consistent and global styling. Theme for general CSS classes • Theme fields. Theme specific classes. Each newly created view will need new theming • Use “Libraries” in Drupal to provide front-end specific functionality • Embed a custom JavaScript in your theme to provide front- end specific functionality
  • 23. Agile Jordan | January 2018 Themer Perspective DRY ✔ Not Applying DRY ✘ • Use Less/Sass CSS variables, mixing, nested rules …etc. • Write regular (standard) CSS
  • 24. Agile Jordan | January 2018 Themer Perspective • Consider: • Less/Sass vs CSS • Libraries in Drupal 8
  • 25. Agile Jordan | January 2018 Tester (QA) Perspective • Testing is a process. Therefore, we need to automate the process • Using automated functional testing • Using Continuous Integration
  • 26. Agile Jordan | January 2018 Tester (QA) Perspective DRY ✔ Not Applying DRY ✘ • Write an automated functional test and test by running it • Manually execute the test every time • Run a Continuous Integration build, that will run all automated tests • Everytime you release, test the whole system!!!
  • 27. Agile Jordan | January 2018 Tester (QA) Perspective • Consider: • Behat tests • Continuous Integration build
  • 28. Agile Jordan | January 2018
  • 29. Agile Jordan | January 2018
  • 31. Agile Jordan | January 2018 • Agile Software Development is tightly coupled with reusing software components • Spend more time researching working software than building your custom one • Automate processes: Automated testing • Use Front-end Frameworks and Package Managers
  • 32. Agile Jordan | January 2018 Thank You!