SlideShare ist ein Scribd-Unternehmen logo
1 von 44
About me
RMIT Bachelor of Software
Engineering.
Development team leader.
With Butterfly for 4.5 years.
10 years experience
Top tips
A Standard Install improves
project start up time
Tip 1
What is a “Standard Install”?
“Skeleton” Joomla code.
Based on latest stable package
release.
More than just a base template.
Lightweight – only shared code allowed.
Butterfly Standard Install features
HTML5 base template.
Base styles and assets.
Common 3rd party components.
Baked-in WCAG standards.
Custom Butterfly additions
Custom SASS framework.
Custom extensions.
Template overrides.
Contact & search forms implemented.
Example from our Standard install
Why use a Standard Install?
Centralised base code.
Time saving – implement once,
continuously reuse.
Maintenance time is reduced.
Follow a good SASS structure
and naming convention
Tip 2
Why follow a structure?
No structure = messy code.
No need to reimplement the same code over and over.
Developers all do things differently.
Standardise development processes.
Good vs. bad
It’s relative to the project.
No structure – all in one big CSS file: Bad
Changing structure from project to project: Bad
Flexible & extensible structure: Good
We made our own framework
Based on inuitcss SASS framework1.
We don’t use bootstrap – wanted more control.
Following BEM naming convention.
Compiled with GULP.
1 https://github.com/inuitcss/inuitcss for reference
css/
├── settings
├── tools
├── generic
├── base
├── objects
├── blocks
├── pages
└── trumps
The structure
Settings
Variables initialisations (eg. colours, base
font sizes and layout defaults).
Tools
Mixins and other functions (E.g. breakpoint
calculation mixin, font CSS mixin).
css/
├── settings
├── tools
├── generic
├── base
├── objects
├── blocks
├── pages
└── trumps
The structure
Generic & Base
High level styles. Site foundation styling
and HTML cross-browsers resets.
Objects
Grouped styles for reusable elements.
Blocks
Styles for standard code blocks and
extensions.
css/
├── settings
├── tools
├── generic
├── base
├── objects
├── blocks
├── pages
└── trumps
The structure
Pages
Custom styles for particular pages (E.g. home
page, search page, contact page).
Trumps
Utility and helper CSS styles.
How to choose what to use?
Find a structure that:
– Suits your team.
– Suits your projects.
Make sure you can extend when needed.
If no good options – make your own!
Reusing utility classes?
Make a library
Tip 3
Why a library?
Share across all extensions.
Joomla framework lends itself
to making libraries.
Promotes code reusability.
Code maintenance is easier.
Example: BFToolkit
Recent project requirements:
– Simple event management.
– Custom searching functionality.
The solution:
– A new custom events component.
– Our custom search component.
Example: BFToolkit cont.
Custom date range field built for events.
High potential for reuse.
Components refactored to use library.
Moved the field class to “BFToolkit” library.
Outcomes of using a library
Independent extension usage.
No bloat within either component,
only use what is needed.
Better user experience.
Maintenance time is faster.
Examples from BFToolkit
Custom fields
Date range field, used within our custom
components as a filter.
Helper classes
Extended Joomla Tags helper.
Base API Client
Generic REST API client. Wrapper for
CURL methods, retrieving data and
logging.
When to make a library?
Using same code multiple times. Yes
Potential for reuse. Yes
Use code without needing entire component. Yes
Extension context is required. No
Build extensions with future
implementations in mind
Tip 4
Forward thinking helps
Follow a good solution design.
Understanding requirements is key.
I ask myself:
– Can we reuse this in future?
– How can I build this to be extensible/flexible in future?
– What is not going to be reusable?
E.g. Butterfly API Component
The problem
Salesforce and Joomla integration.
Map data from Salesforce to Joomla Articles.
Preferably real time.
+
E.g. Butterfly API Component
The solution
Custom REST API component.
API endpoints configurable
through Joomla backend.
Configurable data parameters.
E.g. Butterfly API Component
Example of configurable parameters
E.g. Butterfly API Component
The future thinking
Created base resource class.
Developers can create subclasses
as needed.
Reusable for other 3rd party
integrations.
Don’t keep reinventing the wheel
Shared team mindset.
Reusable solutions = time saver.
Easier for team to learn.
Perfect, rather than reinvent.
Good development process =
better team collaboration & code
Tip 5
My experience at Butterfly
Intern 4.5 years ago.
Not many development processes.
Ad-hoc development cycles, every project fixed price (Waterfall).
My experience at Butterfly cont.
Moved to Support/Small projects team.
Increased client knowledge.
Learnt to build small extensions efficiently.
Understanding of issues that commonly arise.
My experience at Butterflycont.
Moved to Development team when
graduated.
Learnt to build larger extensions.
Worked on larger projects.
Shared my learnings to my new team.
Development processes created.
Our standards and processes
The outcomes of collaboration
Good processes = greater team
understandability.
Best practice actively encouraged.
Improvements shared more regularly.
Reduction in development support
queries.
Tips Summary
Butterfly’s top tips
Having a Standard Install improves project start up time
Follow a good SASS structure and naming convention
Reusing utility classes? Make a library
Build extensions with future implementations in mind
Good development processes = better team collaboration & code quality
Dylan McTaggart
E: dylan.mctaggart@butterfly.com.au
Ph: 03 9009 9601 ext. 666
Rachel Purdie
E: rachel.purdie@butterfly.com.au
Ph: 03 9009 9620
Contact details
Check out our website!
https://www.butterfly.com.au
Presentation resources
https://github.com/Butterfly-Developer/joomladay-2017
Thank you!

Weitere ähnliche Inhalte

Was ist angesagt?

Inside eCommerce - MicksGarage -Content is king - Rob King
Inside eCommerce - MicksGarage -Content is king - Rob KingInside eCommerce - MicksGarage -Content is king - Rob King
Inside eCommerce - MicksGarage -Content is king - Rob KingJohn Walsh
 
5 common mistakes in seo (and 6 good ideas!)
5 common mistakes in seo (and 6 good ideas!)5 common mistakes in seo (and 6 good ideas!)
5 common mistakes in seo (and 6 good ideas!)Lisagan_SEO
 
Five common SEO mistakes (and six good ideas!)
Five common SEO mistakes (and six good ideas!)Five common SEO mistakes (and six good ideas!)
Five common SEO mistakes (and six good ideas!)Mohammed Tanveer
 
Web Design 101
Web Design 101Web Design 101
Web Design 101T.S. Lim
 
Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015
Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015
Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015Diana Koshedzhiyska
 
Website designing company in mumbai
Website designing company in mumbaiWebsite designing company in mumbai
Website designing company in mumbaiCss Founder
 
Six Steps to Help With Your Website Redesign
Six Steps to Help With Your Website RedesignSix Steps to Help With Your Website Redesign
Six Steps to Help With Your Website RedesignSynecore
 
POSTGOPHER REVIEW - GET INSIGHT PRODUCT
POSTGOPHER REVIEW - GET INSIGHT PRODUCTPOSTGOPHER REVIEW - GET INSIGHT PRODUCT
POSTGOPHER REVIEW - GET INSIGHT PRODUCTthuan le cong
 
SEO Checklist 2018 - Ranking in the first page of SERP organically.
SEO Checklist 2018 - Ranking in the first page of SERP organically.SEO Checklist 2018 - Ranking in the first page of SERP organically.
SEO Checklist 2018 - Ranking in the first page of SERP organically.AVIK BAL
 
A Complete Guide To SEO
A Complete Guide To SEOA Complete Guide To SEO
A Complete Guide To SEOSeema Gupta
 
Web Development Life Cycle - Tihalt
Web Development Life Cycle - TihaltWeb Development Life Cycle - Tihalt
Web Development Life Cycle - TihaltTihalt
 
Guest posting service
Guest posting serviceGuest posting service
Guest posting serviceJobair Islam
 
Basic SEO Structural Issues
Basic SEO Structural IssuesBasic SEO Structural Issues
Basic SEO Structural IssuesR2integrated
 
Website designing company in delhi
Website designing company in delhiWebsite designing company in delhi
Website designing company in delhiCss Founder
 
Onpage SEO Essentials
Onpage SEO EssentialsOnpage SEO Essentials
Onpage SEO EssentialsSEOBANK
 
WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!
WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!
WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!Small Business Marketing Professional
 
Strategic Digital Marketing Guide
Strategic Digital Marketing GuideStrategic Digital Marketing Guide
Strategic Digital Marketing GuideLauren Price
 

Was ist angesagt? (20)

Inside eCommerce - MicksGarage -Content is king - Rob King
Inside eCommerce - MicksGarage -Content is king - Rob KingInside eCommerce - MicksGarage -Content is king - Rob King
Inside eCommerce - MicksGarage -Content is king - Rob King
 
5 common mistakes in seo (and 6 good ideas!)
5 common mistakes in seo (and 6 good ideas!)5 common mistakes in seo (and 6 good ideas!)
5 common mistakes in seo (and 6 good ideas!)
 
Five common SEO mistakes (and six good ideas!)
Five common SEO mistakes (and six good ideas!)Five common SEO mistakes (and six good ideas!)
Five common SEO mistakes (and six good ideas!)
 
Web Design 101
Web Design 101Web Design 101
Web Design 101
 
Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015
Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015
Marketing Automation Needs YOU! WordCamp Barcelona 25 April 2015
 
Website designing company in mumbai
Website designing company in mumbaiWebsite designing company in mumbai
Website designing company in mumbai
 
Six Steps to Help With Your Website Redesign
Six Steps to Help With Your Website RedesignSix Steps to Help With Your Website Redesign
Six Steps to Help With Your Website Redesign
 
Above the fold
Above the foldAbove the fold
Above the fold
 
POSTGOPHER REVIEW - GET INSIGHT PRODUCT
POSTGOPHER REVIEW - GET INSIGHT PRODUCTPOSTGOPHER REVIEW - GET INSIGHT PRODUCT
POSTGOPHER REVIEW - GET INSIGHT PRODUCT
 
SEO Checklist 2018 - Ranking in the first page of SERP organically.
SEO Checklist 2018 - Ranking in the first page of SERP organically.SEO Checklist 2018 - Ranking in the first page of SERP organically.
SEO Checklist 2018 - Ranking in the first page of SERP organically.
 
A Complete Guide To SEO
A Complete Guide To SEOA Complete Guide To SEO
A Complete Guide To SEO
 
Web Development Life Cycle - Tihalt
Web Development Life Cycle - TihaltWeb Development Life Cycle - Tihalt
Web Development Life Cycle - Tihalt
 
Guest posting service
Guest posting serviceGuest posting service
Guest posting service
 
Basic SEO Structural Issues
Basic SEO Structural IssuesBasic SEO Structural Issues
Basic SEO Structural Issues
 
eCommerce SEO
eCommerce SEOeCommerce SEO
eCommerce SEO
 
Website designing company in delhi
Website designing company in delhiWebsite designing company in delhi
Website designing company in delhi
 
Onpage SEO Essentials
Onpage SEO EssentialsOnpage SEO Essentials
Onpage SEO Essentials
 
WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!
WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!
WordPress Web Design MasterClass for Small Business Owners - EVERYWHERE!
 
Strategic Digital Marketing Guide
Strategic Digital Marketing GuideStrategic Digital Marketing Guide
Strategic Digital Marketing Guide
 
Blogging to Market Your Business
Blogging to Market Your BusinessBlogging to Market Your Business
Blogging to Market Your Business
 

Ähnlich wie Top tips from what we've learned from our 10 years experience

Building resuable and customizable Vue components
Building resuable and customizable Vue componentsBuilding resuable and customizable Vue components
Building resuable and customizable Vue componentsFilip Rakowski
 
Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017
Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017
Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017La Drupalera
 
Single sourcing to the max
Single sourcing to the maxSingle sourcing to the max
Single sourcing to the maxNeil Perlin
 
Workshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfWorkshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfTobiasGoeschel
 
Implementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing CompanyImplementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing CompanyMarcos Labad
 
Contributing to Drupal
Contributing to DrupalContributing to Drupal
Contributing to DrupalChris Skene
 
Professionalizing the Front-end
Professionalizing the Front-endProfessionalizing the Front-end
Professionalizing the Front-endJordi Anguela
 
Cleaning Up the Mess: Modernizing Your Dev Team’s Outdated Workflow
Cleaning Up the Mess: Modernizing Your Dev Team’s Outdated WorkflowCleaning Up the Mess: Modernizing Your Dev Team’s Outdated Workflow
Cleaning Up the Mess: Modernizing Your Dev Team’s Outdated WorkflowBohyun Kim
 
Learning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails LaunchLearning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails LaunchThiam Hock Ng
 
CUST-3 Document Management with Share
CUST-3 Document Management with ShareCUST-3 Document Management with Share
CUST-3 Document Management with ShareAlfresco Software
 
The Drupal 7 Worst Practices Catalogue
The Drupal 7 Worst Practices CatalogueThe Drupal 7 Worst Practices Catalogue
The Drupal 7 Worst Practices CatalogueAlexandre Israël
 
Agile collaborative practices
Agile collaborative practicesAgile collaborative practices
Agile collaborative practicesSreejith Madhavan
 
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...Luis Valencia
 
System design for Web Application
System design for Web ApplicationSystem design for Web Application
System design for Web ApplicationMichael Choi
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure rupeshchanchal
 
SharePoint development 2017 wrap-up
SharePoint development   2017 wrap-upSharePoint development   2017 wrap-up
SharePoint development 2017 wrap-upJoel Rodrigues
 
Instagram filters (8 24)
Instagram filters (8 24)Instagram filters (8 24)
Instagram filters (8 24)Ivy Rueb
 
Chicago Code Camp 2014 TFS Care and Feeding
Chicago Code Camp 2014   TFS Care and FeedingChicago Code Camp 2014   TFS Care and Feeding
Chicago Code Camp 2014 TFS Care and FeedingAngela Dugan
 
Developing for the unknown lavacon
Developing for the unknown   lavaconDeveloping for the unknown   lavacon
Developing for the unknown lavaconNeil Perlin
 
Developing for the unknown lavacon
Developing for the unknown   lavaconDeveloping for the unknown   lavacon
Developing for the unknown lavaconNeil Perlin
 

Ähnlich wie Top tips from what we've learned from our 10 years experience (20)

Building resuable and customizable Vue components
Building resuable and customizable Vue componentsBuilding resuable and customizable Vue components
Building resuable and customizable Vue components
 
Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017
Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017
Efficiently theming a multi-site Drupal 8 portal - Drupal Dev Days Seville 2017
 
Single sourcing to the max
Single sourcing to the maxSingle sourcing to the max
Single sourcing to the max
 
Workshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdfWorkshop - The Little Pattern That Could.pdf
Workshop - The Little Pattern That Could.pdf
 
Implementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing CompanyImplementing a Symfony Based CMS in a Publishing Company
Implementing a Symfony Based CMS in a Publishing Company
 
Contributing to Drupal
Contributing to DrupalContributing to Drupal
Contributing to Drupal
 
Professionalizing the Front-end
Professionalizing the Front-endProfessionalizing the Front-end
Professionalizing the Front-end
 
Cleaning Up the Mess: Modernizing Your Dev Team’s Outdated Workflow
Cleaning Up the Mess: Modernizing Your Dev Team’s Outdated WorkflowCleaning Up the Mess: Modernizing Your Dev Team’s Outdated Workflow
Cleaning Up the Mess: Modernizing Your Dev Team’s Outdated Workflow
 
Learning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails LaunchLearning Web Development with Ruby on Rails Launch
Learning Web Development with Ruby on Rails Launch
 
CUST-3 Document Management with Share
CUST-3 Document Management with ShareCUST-3 Document Management with Share
CUST-3 Document Management with Share
 
The Drupal 7 Worst Practices Catalogue
The Drupal 7 Worst Practices CatalogueThe Drupal 7 Worst Practices Catalogue
The Drupal 7 Worst Practices Catalogue
 
Agile collaborative practices
Agile collaborative practicesAgile collaborative practices
Agile collaborative practices
 
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
Typescript design patterns applied to sharepoint framework - Sharepoint Satur...
 
System design for Web Application
System design for Web ApplicationSystem design for Web Application
System design for Web Application
 
Software Development Standard Operating Procedure
Software Development Standard Operating Procedure Software Development Standard Operating Procedure
Software Development Standard Operating Procedure
 
SharePoint development 2017 wrap-up
SharePoint development   2017 wrap-upSharePoint development   2017 wrap-up
SharePoint development 2017 wrap-up
 
Instagram filters (8 24)
Instagram filters (8 24)Instagram filters (8 24)
Instagram filters (8 24)
 
Chicago Code Camp 2014 TFS Care and Feeding
Chicago Code Camp 2014   TFS Care and FeedingChicago Code Camp 2014   TFS Care and Feeding
Chicago Code Camp 2014 TFS Care and Feeding
 
Developing for the unknown lavacon
Developing for the unknown   lavaconDeveloping for the unknown   lavacon
Developing for the unknown lavacon
 
Developing for the unknown lavacon
Developing for the unknown   lavaconDeveloping for the unknown   lavacon
Developing for the unknown lavacon
 

Mehr von JoomlaDay Australia

Developing a prize-giveaway style component
Developing a prize-giveaway style componentDeveloping a prize-giveaway style component
Developing a prize-giveaway style componentJoomlaDay Australia
 
The integration of joomla with the internet of things concept
The integration of joomla with the  internet of things conceptThe integration of joomla with the  internet of things concept
The integration of joomla with the internet of things conceptJoomlaDay Australia
 
Ecwid: shopping cart solution to meet business need
Ecwid: shopping cart solution to meet business needEcwid: shopping cart solution to meet business need
Ecwid: shopping cart solution to meet business needJoomlaDay Australia
 
Mobile First Development by Shayne Bartlett
Mobile First Development by Shayne BartlettMobile First Development by Shayne Bartlett
Mobile First Development by Shayne BartlettJoomlaDay Australia
 
20 common mistakes you should avoid while handling an e-marketing campaign
20 common mistakes you should avoid while handling an e-marketing campaign20 common mistakes you should avoid while handling an e-marketing campaign
20 common mistakes you should avoid while handling an e-marketing campaignJoomlaDay Australia
 
Speed up Your Joomla Site for Ultimate Performance
Speed up Your Joomla Site for Ultimate PerformanceSpeed up Your Joomla Site for Ultimate Performance
Speed up Your Joomla Site for Ultimate PerformanceJoomlaDay Australia
 
Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2JoomlaDay Australia
 

Mehr von JoomlaDay Australia (10)

Building Templates for Joomla
Building Templates for JoomlaBuilding Templates for Joomla
Building Templates for Joomla
 
Developing a prize-giveaway style component
Developing a prize-giveaway style componentDeveloping a prize-giveaway style component
Developing a prize-giveaway style component
 
The integration of joomla with the internet of things concept
The integration of joomla with the  internet of things conceptThe integration of joomla with the  internet of things concept
The integration of joomla with the internet of things concept
 
A tale of two sites
A tale of two sitesA tale of two sites
A tale of two sites
 
Ecwid: shopping cart solution to meet business need
Ecwid: shopping cart solution to meet business needEcwid: shopping cart solution to meet business need
Ecwid: shopping cart solution to meet business need
 
Mobile First Development by Shayne Bartlett
Mobile First Development by Shayne BartlettMobile First Development by Shayne Bartlett
Mobile First Development by Shayne Bartlett
 
Responsive design
Responsive designResponsive design
Responsive design
 
20 common mistakes you should avoid while handling an e-marketing campaign
20 common mistakes you should avoid while handling an e-marketing campaign20 common mistakes you should avoid while handling an e-marketing campaign
20 common mistakes you should avoid while handling an e-marketing campaign
 
Speed up Your Joomla Site for Ultimate Performance
Speed up Your Joomla Site for Ultimate PerformanceSpeed up Your Joomla Site for Ultimate Performance
Speed up Your Joomla Site for Ultimate Performance
 
Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2Rapid application development using Akeeba FOF and Joomla 3.2
Rapid application development using Akeeba FOF and Joomla 3.2
 

Kürzlich hochgeladen

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样umasea
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsAhmed Mohamed
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...Technogeeks
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceBrainSell Technologies
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Natan Silnitsky
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEEVICTOR MAESTRE RAMIREZ
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...OnePlan Solutions
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaHanief Utama
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio, Inc.
 

Kürzlich hochgeladen (20)

办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
办理学位证(UQ文凭证书)昆士兰大学毕业证成绩单原版一模一样
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
Unveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML DiagramsUnveiling Design Patterns: A Visual Guide with UML Diagrams
Unveiling Design Patterns: A Visual Guide with UML Diagrams
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...What is Advanced Excel and what are some best practices for designing and cre...
What is Advanced Excel and what are some best practices for designing and cre...
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
CRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. SalesforceCRM Contender Series: HubSpot vs. Salesforce
CRM Contender Series: HubSpot vs. Salesforce
 
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
Taming Distributed Systems: Key Insights from Wix's Large-Scale Experience - ...
 
Cloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEECloud Data Center Network Construction - IEEE
Cloud Data Center Network Construction - IEEE
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
Maximizing Efficiency and Profitability with OnePlan’s Professional Service A...
 
EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva2.pdf Ejercicios de programación competitiva
2.pdf Ejercicios de programación competitiva
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
React Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief UtamaReact Server Component in Next.js by Hanief Utama
React Server Component in Next.js by Hanief Utama
 
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed DataAlluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
Alluxio Monthly Webinar | Cloud-Native Model Training on Distributed Data
 

Top tips from what we've learned from our 10 years experience

  • 1.
  • 2. About me RMIT Bachelor of Software Engineering. Development team leader. With Butterfly for 4.5 years.
  • 3.
  • 5. A Standard Install improves project start up time Tip 1
  • 6. What is a “Standard Install”? “Skeleton” Joomla code. Based on latest stable package release. More than just a base template. Lightweight – only shared code allowed.
  • 7. Butterfly Standard Install features HTML5 base template. Base styles and assets. Common 3rd party components. Baked-in WCAG standards.
  • 8. Custom Butterfly additions Custom SASS framework. Custom extensions. Template overrides. Contact & search forms implemented.
  • 9. Example from our Standard install
  • 10. Why use a Standard Install? Centralised base code. Time saving – implement once, continuously reuse. Maintenance time is reduced.
  • 11. Follow a good SASS structure and naming convention Tip 2
  • 12. Why follow a structure? No structure = messy code. No need to reimplement the same code over and over. Developers all do things differently. Standardise development processes.
  • 13. Good vs. bad It’s relative to the project. No structure – all in one big CSS file: Bad Changing structure from project to project: Bad Flexible & extensible structure: Good
  • 14. We made our own framework Based on inuitcss SASS framework1. We don’t use bootstrap – wanted more control. Following BEM naming convention. Compiled with GULP. 1 https://github.com/inuitcss/inuitcss for reference
  • 15. css/ ├── settings ├── tools ├── generic ├── base ├── objects ├── blocks ├── pages └── trumps The structure Settings Variables initialisations (eg. colours, base font sizes and layout defaults). Tools Mixins and other functions (E.g. breakpoint calculation mixin, font CSS mixin).
  • 16. css/ ├── settings ├── tools ├── generic ├── base ├── objects ├── blocks ├── pages └── trumps The structure Generic & Base High level styles. Site foundation styling and HTML cross-browsers resets. Objects Grouped styles for reusable elements. Blocks Styles for standard code blocks and extensions.
  • 17. css/ ├── settings ├── tools ├── generic ├── base ├── objects ├── blocks ├── pages └── trumps The structure Pages Custom styles for particular pages (E.g. home page, search page, contact page). Trumps Utility and helper CSS styles.
  • 18.
  • 19.
  • 20. How to choose what to use? Find a structure that: – Suits your team. – Suits your projects. Make sure you can extend when needed. If no good options – make your own!
  • 21. Reusing utility classes? Make a library Tip 3
  • 22. Why a library? Share across all extensions. Joomla framework lends itself to making libraries. Promotes code reusability. Code maintenance is easier.
  • 23. Example: BFToolkit Recent project requirements: – Simple event management. – Custom searching functionality. The solution: – A new custom events component. – Our custom search component.
  • 24. Example: BFToolkit cont. Custom date range field built for events. High potential for reuse. Components refactored to use library. Moved the field class to “BFToolkit” library.
  • 25. Outcomes of using a library Independent extension usage. No bloat within either component, only use what is needed. Better user experience. Maintenance time is faster.
  • 26. Examples from BFToolkit Custom fields Date range field, used within our custom components as a filter. Helper classes Extended Joomla Tags helper. Base API Client Generic REST API client. Wrapper for CURL methods, retrieving data and logging.
  • 27. When to make a library? Using same code multiple times. Yes Potential for reuse. Yes Use code without needing entire component. Yes Extension context is required. No
  • 28. Build extensions with future implementations in mind Tip 4
  • 29. Forward thinking helps Follow a good solution design. Understanding requirements is key. I ask myself: – Can we reuse this in future? – How can I build this to be extensible/flexible in future? – What is not going to be reusable?
  • 30. E.g. Butterfly API Component The problem Salesforce and Joomla integration. Map data from Salesforce to Joomla Articles. Preferably real time. +
  • 31. E.g. Butterfly API Component The solution Custom REST API component. API endpoints configurable through Joomla backend. Configurable data parameters.
  • 32. E.g. Butterfly API Component Example of configurable parameters
  • 33. E.g. Butterfly API Component The future thinking Created base resource class. Developers can create subclasses as needed. Reusable for other 3rd party integrations.
  • 34. Don’t keep reinventing the wheel Shared team mindset. Reusable solutions = time saver. Easier for team to learn. Perfect, rather than reinvent.
  • 35. Good development process = better team collaboration & code Tip 5
  • 36. My experience at Butterfly Intern 4.5 years ago. Not many development processes. Ad-hoc development cycles, every project fixed price (Waterfall).
  • 37. My experience at Butterfly cont. Moved to Support/Small projects team. Increased client knowledge. Learnt to build small extensions efficiently. Understanding of issues that commonly arise.
  • 38. My experience at Butterflycont. Moved to Development team when graduated. Learnt to build larger extensions. Worked on larger projects. Shared my learnings to my new team. Development processes created.
  • 39. Our standards and processes
  • 40.
  • 41. The outcomes of collaboration Good processes = greater team understandability. Best practice actively encouraged. Improvements shared more regularly. Reduction in development support queries.
  • 42. Tips Summary Butterfly’s top tips Having a Standard Install improves project start up time Follow a good SASS structure and naming convention Reusing utility classes? Make a library Build extensions with future implementations in mind Good development processes = better team collaboration & code quality
  • 43. Dylan McTaggart E: dylan.mctaggart@butterfly.com.au Ph: 03 9009 9601 ext. 666 Rachel Purdie E: rachel.purdie@butterfly.com.au Ph: 03 9009 9620 Contact details Check out our website! https://www.butterfly.com.au Presentation resources https://github.com/Butterfly-Developer/joomladay-2017

Hinweis der Redaktion

  1. Hello and welcome everyone! My name is Dylan McTaggart from the digital agency Butterfly, and today I will be sharing some of what we have learnt working with Joomla.
  2. Firstly, a bit about myself: I’ve a Bachelor in Software Engineering from RMIT university I am a Development Team Leader of 11 developers at Butterfly, as well as senior developer on our larger projects. I have been with the company for four and a half years now, starting off as an intern while studying at uni. Due to this, I’ve really been able to witness first-hand, and even contribute to, some of the learnings mentioned within this presentation.
  3. Just a quick overview of where I work: Butterfly is a digital agency centralised in the Melbourne CBD, with clients from all around Australia. In total, we’ve been working with Joomla for 10 years, building on and extending since the earliest versions of Joomla itself. Over the last couple years, we’ve adopted the Agile methodology SCRUM and have been applying it to our projects. All of our team are in-house, allowing us to collaborate a lot easier and helped with introducing SCRUM. A couple of notable recognitions: BRW Fast 100 2012 & 2016 APAC CIO Outlook magazine - top 25 most promising agile solution providers of 2017 joomla.org.au site
  4. So, as mentioned earlier, my topic for today is “Top tips about what Butterfly have learnt from our 10 years of experience.” The reason we decided to present on this comes back to us having celebrated the company’s 10 year anniversary a few months ago. Having seen how far everything has come over the years, it was realised that collectively we have learnt so much in our time working with Joomla. We’ve gone from being a tiny business to one of Australia’s largest Joomla companies, and felt it right to give back to the community that has helped to get us to where we are today. So I have compiled a list of top 5 tips that will hopefully help individuals getting started with Joomla development, companies who are thinking of developing for Joomla, or even those who have been using it for just as long as us. Lets get started with..
  5. Tip 1: A Standard Install improves project start up time
  6. Your first question is probably “What even IS a Standard Install”? Well, the way we define our Joomla Standard Install: It is basically the same as the most stable package release of Joomla, but with extra additions to allow developers to start projects not from scratch, but rather with base “skeleton code” to get up and running a lot faster. It’s not just a custom base template – it is an entire Joomla install with either custom or third party extensions included. Typically anything that is continuously being used on projects in the same way will be implemented. Additionally, it should be lightweight – so it should not contain anything that is not going to be used within all or most projects. For example: project-specific styles should not be in a standard install.
  7. Some of our standard install features: HTML5 base template, allowing us to utilise modern web features Base assets and styles, such as: Heading styles Base HTML element styles Form element styles A number of 3rd party extensions we commonly use across projects such as: RSFirewall RSForms JCE Editor We have also included basic WCAG compliance for certain areas such as: Keyboard navigation Form accessibility
  8. We’ve also added in a number of our own bits and bobs, such as: Our own SASS framework in the template, of which I will talk about more shortly Custom extensions that we can reuse across multiple projects. For example: A plugin that allows modules to be assigned to component views as well as positions, for even more flexibility with layouts. Template overrides for standardising our layouts And a basic contact & search form set up and styled
  9. Here is an example from the “Standard internal” page from our standard install Basic heading and copy styling Menu styles Base layout setup Up top left, “Desktop” is one of our SASS trumps for debugging which media query is currently active
  10. But, why use a standard install? By having all your base code in one central place, you can significantly reduce project start up time. Developers don’t have to continuously reimplement something that they have been doing the same for years. As an example: when something is recognised as reusable across projects, we will discuss if it is worthy of our Standard Install, and implement if so, saving us time in future having to implement it again. You can assure that any fixes can be easily applied to all future projects.
  11. Tip 2: Follow a good SASS structure and naming convention
  12. Why should you follow a good SASS structure? And what classifies as “good” over “bad”? Well, to firstly address the why: Without a structure, template styles can become very messy and difficult to maintain. Easier to reuse code and styles across projects, as well as extend as needed. Developers all do things differently. Everyone has different experiences and backgrounds, everyone learnt how to code differently and will think their way is best. So by introducing a framework, you standardised your development processes and made it easier for anyone to pick up a project.
  13. As for good and bad structures - this is all relative. However, from what we’ve learnt: All CSS in one big file un-minified, not utilising any CSS extension languages: BAD. A SASS structure that majorly changes from project to project: BAD A SASS structure that is built with flexibility and extensibility in mind, providing developers the ability to add their own styles in the same way every time: GOOD 
  14. With all that in mind, when it came to us implementing a framework, we decided to make our own. It is based on the inuitcss SASS framework We wanted more control than what bootstrap offered, so decided against using it. Mainly we didn’t always want to be locked into the bootstrap structure and methods for extending. Following BEM (Block, Element, Modifier) naming convention, to help standardise how backend and frontend developers create element classes. And we use GULP to compile and minify to CSS
  15. This is the directory structure of our framework. To go into detail about what each directory contains: Settings Variables initialisations (eg. colours, base font sizes and layout defaults) Tools Mixins and other functions (E.g. breakpoint calculation mixin, font CSS mixin)
  16. Generic & Base High level CSS styles. Within here will be site foundation CSS and HTML cross-browsers styles. Objects Thinking of HTML elements in the same sense as object-oriented objects: they have one role and one set style. An example of these objects styles within this directory are button styles. Blocks Styles for standard code blocks and extensions (E.g. Header and footer blocks).
  17. Pages Custom styles for particular pages (E.g. home page, search page, contact page). Trumps Utility/helper CSS classes and styles (E.G. clearfix CSS, our code to help debug responsive styling). These should be able to be used anywhere, and override anything.
  18. As well as this, we also have a base style.scss file which imports everything from these directories, and is what GULP uses to compile to CSS. Here is an example of the style.scss file from a project. You can see how we have also broken this file up into different sections, however not just for clarity. This is also because the framework adheres to an inheritance hierarchy, which when compiled to CSS follows the top-down inheritance built into the CSS language.
  19. This reverse pyramid diagram helps to demonstrate better how this inheritance works. The files at the top in settings, tools and generic are more broad. They are the highest level and set up your foundation. Moving further down into base and objects, these start overriding your foundation styles and are becoming more specific. Moving into components (in our framework we’ve broken this section into “blocks” and “pages”), your styles are becoming even more specific to certain pages/areas of the page. Finally arriving at trumps, which do just that: trump all other styles when needed, as they are the lowest level and are included last.
  20. I’ll finish this tip on a couple of ways to choose a SASS structure that will work for you. Make sure that, whatever you do end up using, it works for you. Whether you are a team of one or a team of ten, you all need to be across how the structure works, and how to code within it. Make sure it’s not more work than what your projects need. If you are following simple designs, maybe an even more lightweight structure than ours will work for you. Make sure you can extend it when needed. You don’t want to be having to completely change it every time you need to introduce something new. And finally, if you really cannot find any options that work for you, follow our lead and build your own!
  21. Tip 3: Reusing utility classes? Make a library!
  22. Why a library? Allows for sharing utility and helper classes and code across all the work we do. Joomla’s namespace registration method (using JLoader) lends itself to creating libraries Allows for autoloading our classes when needed Makes us follow a naming standard that is compatible with Joomla’s loading framework Promotes code reusability, meaning you can implement once and be assured that it will work the same way across everything. Same for applying a patch for maintenance. As extensions will pull code from the same place, you can be assured that the fix will be reflected throughout.
  23. To better demonstrate why to use a library, here is an example from one of our recent projects. A recent project had two requirements: Simple event creation and management on the site Custom searching functionality (not only for events, but all content on the site) Our solution for these requirements were: To create a new custom events component And to use our existing custom search component (built using Sphinx search)
  24. We built a date range field for the events component for simple filtering, but quickly realised we could also use this within the search component, as well as other potential components. Instead of duplicating the field class and adding to the search component, we refactored both components to use our custom library “BFToolkit” we have in our Standard Install. We then moved the field class to the library, and had each component import from here.
  25. Some of the outcomes of implementing the library in this way are: Both extensions can be used independently still, only including the field if required on a project. This ensures that both components can remain lightweight, but still highly customisable when required. We standardise the field, making it work the same across both components. This helps to have good UX within the site. And by reusing the same code, if we need to fix a bug or add a feature we can be sure it is reflected across all extensions at the same time, rather than having to fix each one.
  26. Here are a couple other examples of what we have included within BFToolkit Custom fields such as the date range field mentioned before. Helper classes, such as an extended Joomla tag helper. We do quite a lot of work utilising the tag manager, and required more flexibility with how we use tags within extensions. And a base API client, which is just a generic class that has wrappers for the relevant CURL methods needed to make REST API calls.
  27. I’ll finish up here with some tips as to when you should make a library, and when you shouldn’t. If you find you are reusing the same code many times, across multiple different extensions, then yes. If you think that the class or helper you’ve created could be used again in future, yes. You want to be able to use classes such as field without needing to install and include an entire component, then yes. However, if your class requires a custom extension to work correctly, then there is no real benefit.
  28. Tip 4: Build extensions with future implementations in mind
  29. While this seems good in theory, it can often be difficult to implement in practice without a properly though out solution design. Really understanding what is required for the project can also help with making good design decisions. Something flagged as not necessary now may become relevant in future, so it is better to at least consider it when implementing your solution. I ask myself the following while on a project: Can we reuse this in future? How can I build this to be extensible/flexible in future? What is not going to be reusable? Asking these questions, if anything, gets me in the right mindset from the start, and allows me to properly consider other better implementations, rather than just the one that gets the job done fastest.
  30. Here’s an example where we built a component with future implementations in mind. The problem For a project, we needed to integrate with Salesforce to allow the client to push content down to Joomla. Data would need to be mapped to Joomla content for easy viewing and modification. Preferably real time, not polling for changes.
  31. The solution We built a REST API component that dynamically created endpoints for Salesforce to push data to. The API end point resources and CRUD methods are all configurable within the administrator section of the component. As well as this, you can set up the data expected by each end point for mapping Salesforce events data to Joomla articles.
  32. Here is also an example of how you can configure dynamically the different parameters accepted by the end point. You can see it is utilising the subform field introduced in Joomla 3.6.
  33. The future thinking We built a base resource class that can be extended and assures that the correct REST methods are implemented. Using the base class, we allowed for a developer to create different resource classes as needed, not just the one we originally did for events. This component can now be reused to allow for other 3rd party applications to push to Joomla without major code rework.
  34. With your team sharing this mindset, you don’t need to keep reinventing the wheel. You save time by delivering reusable solutions that can be modified to work for other projects. By building extensions that are reusable, your whole team can become familiar with them. As well as this, your team will also be able to improve upon and perfect what already exists.
  35. Tip 5: Good development process = better team collaboration & code
  36. To best demonstrate why good development processes are important, I’m going to share with you all a bit about my experience at Butterfly. As mentioned earlier, I started as an intern 4.5 years ago doing front end work only, while still studying at university. We didn’t have many processes for development at this time. Development of our extensions was often times ad-hoc and very reliant on senior developers converting old custom built extensions to work with newer projects.
  37. Once my internship finished, and while finishing my degree, I was kept on and moved to the support/small projects team. In this team, I gained a better understanding of all our sites. As well as this, I also learnt how to build simple extensions such as modules and plugins in an efficient way, due to small projects typically going for a week at most. This is where I began to see more similarities in the work we do, as well as understand better where the issues were with reusing code.
  38. When I graduated, I moved to the development team full time, which I have now stayed and moved to a team leader position. Here I learnt how to build more complex extensions, e.g. components, as well as worked on some of our largest projects. Utilising my experience in support, I shared to my new team the issues we commonly saw in support with custom work we did, as well as the efficiencies I used while creating smaller extensions. This created a feedback loop that was missing before. We all worked together to put in place processes to avoid such issues coming up again, as well as began to share knowledge more within the team to help better our processes.
  39. Just a couple examples of the processes and standards we now follow: We have these posters around our development area. They aren’t hard rules, but rather serve as a reminder at to what we all want to work towards as a standard.
  40. Another process that was worked upon and improved once we started to collaborate more was our git structure. As git is so central to our development & deployment of sites, we needed to ensure that we were following a standard process when working with it. This process is quite typical for development teams, consisting of feature, staging and master branches.
  41. To finish up, here are some of the high level outcomes of our increased collaboration: With processes in place, we can now assure that the code we write is understandable and maintainable by anyone within the team. By encouraging best practice, we also found team members would share their ideas more when they feel something can be improved. Over time we have seen a reduction in the development-related support queries as a result to improvements in the development team.
  42. So, to summarise all of Butterfly’s top tips: Having a Standard Install improves project start up time Follow a good SASS structure and naming convention If you find yourself reusing utility classes, make a library Build extensions with future implementations in mind Good development processes = better team collaboration & code quality
  43. That’s everything from me today! If anyone has any questions, feel free to come and have a chat with either myself or Rachel, who is also here from Butterfly today, or get in contact via email. Also check out our website and our Github for some of the resources mentioned in the presentation.