An Agile Front End Workflow
Eric Smith
@ericgsmith
Welcome etc. FED story.
How many people are excited about the agile part?
How many people are excited about the front end part?
Intro... I'm a developer and I get excited about solutions...
What I'll be showing you in the next 40 minutes is our new way of working
Talking about process, technology, etc.
Project Timeline
Explain sprint 0, typical project lifetime.
Explain what typical scaling up is.
Ticket Workflow
Talk through peer review, qa, done.
The old way
The way things have always been done.
Give examples eg a view (simple), search results (complex)
Talk about arrow = gap.
The Process Problem
Development is a bottleneck
Theming at the end creates pressure
Themer twiddles thumbs at start of the project.
This creates a gap - this increases over the life of the project.
Themer goes insane at the end of the project.
The Historical Problems
Drupal - A million ways to die
CSS is a one man game
Hell is other people's CSS
Adding things to the end of stylesheet
Time taken to deliver a page that looks the same
Onboarding time for new developers
Historical problems we want to solve, not related to the old way.
Preprocess functions, theme functions, templates, ctools style plugins, display suite, etc..
CSS is a one man game is a myth
Ask devs if they have ever done this
Interact with PMs re page the looks the same - views news / blog example
The Target
A development team not an individual
An efficient workflow
Deliver amazing results and value each sprint
Link last point to the old way gap - this is just the opposite to the problems
Sprint 0
Theme setup
Drupal's CSS / markup
CSS Methodology / Architecture
Documentation
Automation
Assets
Testing
Definition of done
Team structure
Explain the checklist.
Explain the PM's role / awareness for devs.
Clarify it's making decisions not always developing.
CSS Foundations
Talk about responsibilities of the leaders.
Interact with crowd, get people to stand up if they are front end
devs, sit down if they don't use a preprocessor.
Mention references at end of talk, briefly cover smaccs.
SMACCS - this is the bit where we build something and
tell drupal about it.
Talk about pattern libraries / components.
Talks about folder structure scaffold
Coding standards
Drupal has CSS coding standards
The rest of the web has coding standards
There are tools to help you enforce coding standards
Most people know the php coding standards
Things like line length, spacing, naming conventions.
It is there for consistency - most historical problems are there
due to inconsistency or bad css.
Learn from sass coding standards. Again, we are building
something and telling drupal about it - so learn from
the other 98%
Will my team mates understand this?
Project readme is essential.
All setup info, e.g bundler / npm need to be explicit.
Don't assume everybody will know.
Don't be afraid to point out the obvious. E.g. I can't
remember how to compile less files?
Documenting CSS
PHP Tell the why, not what.
CSS Tell the what / when / how / why / where and why.
Story about generating html from css.
Hologram syntax
title: Alert
name: alert
I am a comment
``` html_example
<div class="alert">I am the example code</div>
```
*/
Explain parent / category relationship.
Explain how to set up and what you will show next.
PatternLab
talk about how we've used it.
plug github repo
talk about how it might impact d8
Benefits
Visibility within the dev team
Visibility for the client
You can test the style guide
You can theme without Drupal
Give team benefit example.
Give estimation / double checking with client example re forms
Regression testing / responsive testing
Briefly mention Gary / bringing in a front end dev. Explain
that is a possibility, not what happened.
Doubts
Duplication of markup
A solution for any project size?
Yet another tool to learn
Sprint 1 onwards...
We can start themeing / building css without drupal markup
What we did wrong
3 User stories
Theme: no dependency
Functionality: no dependency
Integrate: dependent on both
Talk about ticket structure / child tasks
Give examples of different stages of the project
(e.g kickoff through to ecommerce)
What we did right
1 User story - up to 3 sub tasks
Theme
Functionality
Integrate
Talk about how PO can perceive this
The new way
The gap is smaller, it should never go over one sprint.
Theme tickets
Look to the style guide for existing styles
Estimate new components / prototype
Bring up previous story - this is agile, client might be happy
to reuse than to create extra work.
Talk about whose job it is to estimate components
Prototyping inside Drupal
Not tied to functionality
Designer can sign off mid sprint
HTML / CSS is integrated once signed off (and functionality is developed)
Prototyping does not mean throwing your work away or duplicate effort.
Same CSS is used as its within the website.
Give example of building something quickly in the first sprint.
Simple module that is essentially a serious of page callbacks, templates and a theme function.
Not tied to functionality: unblocks the themer and reinforces good practise to not rely on build classes
Interactive / responsive elements clarified in browser during the sprint
function sage_statics_menu () {
$items = array ();
$items ['statics/%' ] = array (
'page callback' => 'sage_statics_page' ,
'page arguments' => array (1 ),
'access arguments' => array ('access content' ),
);
return $items ;
}
/**
* Page callback: Statics pages
*/
function sage_statics_page ($page) {
switch ($page) {
case SageStatics::PAGE_BOOK_PRODUCT:
return theme (SageStatics::THEME_BOOK_PRODUCT) ;
}
}
Development tickets
(Mostly) Unchanged
Explain communication with themer, possibly picking
out classes if it is simple enough.
Make sure all data is available for the front end.
Integration tickets
Available when theme and dev work is complete
Can be shared amongst the team
Typically just merging the markup from the statics into the actual theme.
AbstractThemeProcessor
abstract class AbstractThemeProcessor {
private $vars ;
private function __construct (&$vars ) {
$this ->vars = &$vars ;
if ($this ->isApplicable ()) {
$this ->execute ();
}
}
public static function process (&$vars ) {
return new static ($vars );
}
abstract public function execute () ;
abstract public function isApplicable () ;
}
Article Processor
class ArticleNodeProcessor extends AbstractNodeProcessor {
const VAR_EXAMPLE = 'example' ;
const VAR_EXAMPLE_FROM_NODE = 'example_node' ;
public function isApplicable () {
return $this ->isNodeType (ArticleController::getClassEntityBundle());
}
public function execute () {
$this ->articleController = example_article_factory()->initWithEntity ($this ->getVar ('node' ));
$this ->addExtraDisplayItems ();
}
public function addExtraDisplayItems () {
$this ->setVar (self ::VAR_EXAMPLE, 'Variable value' );
$this ->setVar (self ::VAR_EXAMPLE_FROM_NODE, $this ->articleController ->getExampleValue ());
}
}
function example_preprocess_node (&$vars ) {
ArticleNodeProcessor ::process ($vars) ;
ArticleNodeTeaserProcessor ::process ($vars) ;ß
BlogNodeProcessor ::process ($vars) ;
CarouselItemNodeProcessor ::process ($vars) ;
}
Another Problem
"That hover colour isn't right"
"That slide transition is too slow"
Build up the story with example of complex backend development.
Feedback loop
Early Feedback
@todo: TEST!
Refactoring will happen often.
Questions?
Mail: eric.smith@cameronandwilding.com
Twitter: ericgsmith
An Agile Front End Workflow
Eric Smith
@ericgsmith
Welcome etc. FED story.
How many people are excited about the agile part?
How many people are excited about the front end part?
Intro... I'm a developer and I get excited about solutions...
What I'll be showing you in the next 40 minutes is our new way of working
Talking about process, technology, etc.