Building Massive Angular 
Apps 
Gordon Bockus 
@gordonk66 
gbockus@spanning.com
Who is this guy? 
Client side lead at Spanning Cloud Apps 
Building web applications for over 10 years 
Dojo, jQuery, ExtJS, Angular, Node 
Self proclaimed build nerd 
Selfies are OK with facial hair
What are We talking about? 
Building a large enterprise class web application 
How to enable your team to succeed 
Tools 
Techniques (angular)
Building Massive SPAs is 
hard 
Team 
Complexity 
Technology 
Time
The Goods 
Tools: Assume we are starting with nothing 
The Hard Stuff 
Build 
Angular specifics
The Hard Stuff 
Coding standards 
Documentation 
Spacing 
Naming conventions 
Code syntax (some) 
Code Review Technique 
Formatter (A guy can dream)
Standards Examples
Yeoman 
http://yeoman.io 
Scaffolding apps 
Generators 
Build 
Package Manager
The POWER!
Yeoman 
Excellent start 
Developer friendly 
Production ready 
Not perfect
angular-generator 
node server 
live reload 
compass/sass 
ngmin/minification 
bower injection (wiredep) 
jshint 
Test ready (karma/jasmine)
Customizations 
Configure jshint 
grunticon (ie8) 
live reload https 
support 
Update npm 
modules
html2js 
https://github.com/karlgoldstein/grunt-html2js 
html2js 
templates live with code 
compiles at build time 
populates Angular $templateCache
ngAnnotate 
https://github.com/olov/ng-annotate/karlgoldstein/grunt-html2js 
Replaces 
deprecated ngmin 
Annotates 
Angular Core +
Angular (about time) 
Additional modules 
ui-router 
ui-bootstrap 
angular-lodash 
angular-moment
States 
Flexible routing 
Nested view 
Complex but worth it 
ui-router 
https://github.com/angular-ui/ui-router
ui-bootstrap 
http://angular-ui.github.io/bootstrap/ 
Bootstrap 3 directives 
Custom builds 
no JQuery required
Code Organization 
Organize code by state 
Pull out common code to a standalone location 
services 
directives 
filters 
http 
interceptors 
modules/grouping modules
Other Concepts 
Services vs Factories 
Promises 
resolve in routing 
Directives 
Testing
Final Thoughts 
Learn your tools 
Keep up with releases 
Adjust as necessary 
Enhance often 
Test!
THANKS 
! 
Now go build something!
Repo for sample application: 
https://github.com/gbockus/yeomanAngularApp 
Links to tools used in to the update can be found in 
the application.

Building Massive AngularJS Apps

Editor's Notes

  • #4 What classifies a massive application? It’s more not what you will release initially, but how long will it remain in development? If it’s a tool that will have a team of engineers working on it for years it’s definitely going to end up massive. The tool and techniques describe can be used in any angular application, it focuses on maintainability and quality. It enables teams to move fast by providing a strong baseline to develop against. The backstory: Last year I was tasked with figuring out if we should move away from our current front end technologies in our next product. My team and I did a lot of research around emerging client side technologies and ultimately decided that Angular was the right choice for us. The primary deciding factor at the time was the focus on testing provided by angular as it and Ember were basically equivalent otherwise. Ember guys control yourself, this was over a year ago and I’m sure things have changed. So from here I will describe the tools and techniques used to ramp up that project as they have been working well for us.
  • #5 There are several factors that impact that complexity of projects. There first is the number of people on the team developing the product. When you have several developers all working on the same code base you have to pay close attention to how the code is being written. There are simple things that can be done that make maintaining and developing the project simpler and more enjoyable.
  • #6 Image 1: This is what the developers think they are developing. Image 2: This is what the PM has planned for the project (secretly hoping to get there before shipping the MVP product). Image 3: This is what the designers want to build Image 4: 2 years later this is what you end up with based on customer demand.
  • #8 A salmon swimming upstream was the only image that came to mind for this task. The salmon is the lowly developer trying to sell the team on using tabs vs spaces or semicolons or something.
  • #14 jshint options: http://www.jshint.com/docs/options/ grunticon home: https://github.com/filamentgroup/grunticon nom-check-updates: https://github.com/tjunnone/npm-check-updates