Umbraco development across large and distributed teams
-
Upload
janusz-stabik -
Category
Technology
-
view
109 -
download
1
Transcript of Umbraco development across large and distributed teams
BEST PRACTICE DEVELOPMENT
for large and distributed teams
About Us
● Original founders of Mayfly
● Gone our separate ways
● Continue to work together
● Team has expanded
● We collaborate:
○ With each other
○ With other agencies
○ With freelancers / contractors
● This presents operational challenges
Janusz StabikMD, Mayfly@mayflymedia
Thanks to Emma, James, Mike, Simon, Callum, Jon
Carl SargunarTech Director, Koan@csmadethis
Challenges
● Co-Working
○ Multiple devs on same project
○ Distributed teams
○ Disparate physical locations
○ Agency Collaboration
● Process / Project Management
● Tooling
● Documentation
INFRASTRUCTURE
What are we trying to achieve?
● Prevent Downtime
○ Developer
○ Server Infrastructure / Websites
● Ensure a high level of productivity / efficiency
● Wired LAN (don’t use WIFI)
● Reliable / fast internet connection
○ Leased Line
● Fast computers
○ 50 builds x 1 minute x day rate!
● Reliable computers
● Lease, lease, lease!
○ Dell, PcWorld, Smart Plan etc
Infrastructure
● VPS / Cloud / Dedicated / IAAS
● Looking for:
○ No / limited hardware outages of any environment
○ Scalability:
■ Vertical: More resources (CPU’s, RAM)
■ Horizontal: More servers
Infrastructure
● IAAS doesn't play very nicely when
horizontally scaling Umbraco
○ Master / Slave / Indexes / Media
Folder etc
○ Addresses hidden (“hacks” to get
around this)
○ Shannon's CG15 talk on Load
Balancing
● So why use it?
○ Spin up new instances on check-in
○ Githooks / CI
Infrastructure
● We use VPS’s
○ Azure / AWS / Rackspace / Outsourcery
○ Less custom code
○ Fault tolerance with Hyper V
○ Vertical Scalability (need Hyper V on Windows 2013)
● Looking forward to
○ UAAS
○ Umbraco 7.3
Infrastructure
DEVELOPMENT
Challenges
● Efficient development
● Efficient deployments
● A maintainable codebase
● Who’s doing the F/E integration???
○ F/E dev?
○ B/E dev?
○ Another agency?
● Front-devs working with back-end tools
○ Views are easy!
○ Don’t throw over the wall
● Front-end dev’s Umbraco trained (L1)
● ROI
Front-End
● Just having Source Control isn’t enough
● Branching strategy
○ Feature / Environment Branches
○ Whole team (even PM’s) understand it in full
○ Build into standards / process document
● Consistent ignore file’s
● Cloud based - don’t manage in-house
○ Bitbucket / GitHub
Source Control
Source Control
● Don’t include:
○ Solution dll’s in bin
○ umbraco.config
○ Examine indexes
○ .suo
○ /obj
○ .csproj.user
○ /media
○ Temp files
○ Log files
● Strongly Typed “Doc Types” / Models
○ Ditto: https://goo.gl/LizRlQ
● Standard Umbraco Setup
○ In source control - fork for new projects
○ Home / Global / Settings - standard doc types
○ Don’t got too far!
● Config Transforms for environments
○ on all .configs - not just web.config
○ Within CI and local environments
○ SlowCheetah
○ <Target Name="BeforeBuild">
<TransformXml Source="Web.Base.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
Umbraco
● Shared /media folder
○ May need a domain controller
○ Speeds up QA process
● Selenium (UI) tests in source control
● Content Modelling
○ Plan it - Mind Map
○ Use consistent patterns
● Nuget
○ Umbraco packages
○ Umbraco itself
● Do the training!!!!!
○ There’s a right and lots of wrong ways to
configure Umbraco
Umbraco
● We’re looking for:
○ Build on check-in / merge
○ Single click deployments - in line with branching
strategy
○ Run Unit Tests / Selenium Tests / Style Cop rules etc
● Build
○ Team City / Jenkins / Bamboo - loads to choose from
○ Anthony Dang talk on automation 2012
● Deploy
○ MSDeploy
○ Octopus Deploy
Builds and Continuous Integration
Database - To share or not to share?
Shared
● Pro’s
○ Synchronisation
● Con’s
○ Access (local / VPN)
○ Destructive changes
Not Shared (local)
● Pro’s
○ Access
● Con’s
○ Synchronisation
○ Who has the “head”?
● Source control your Umbraco config
● Serialize to text files (XML)
○ Can be merged
● Deployed through CI
● Issues
○ Merges can be complex
○ Complex data types can be tricky
● 7.3 re-written from ground up
○ Dashboard: uSync from the back office.
○ Tracker: see what’s changing before
import
○ API
uSync
uSync
uSync
PROJECT MANAGEMENT
Challenges
● Communication
● Productivity / across teams
● Difference in standards / process between
teams
● Regular communication
○ Agile / waterfall - whatever
works!
● Project Owner / single point of contact
● Client Services
○ Separate from PM
● Ownership and involvement
○ Everyone involved at every stage
● Efficient tooling - whatever works
○ Basecamp, Podio, Zendesk,
Trello, Slack, Jira etc
○ Single reference for project
comms
Project Management
● Define Process & Deliverables
○ From Pre-Sales -> Support
○ Client Contact / presentations
○ Systems (setup / data entry)
○ Sprint 0 (env setup, CI, Front End)
○ Sprint Process
○ QA, UAT, Warranty
○ Retrospectives
○ Loads more…..
● Use it as a checklist
● Ensure every member of team knows inside out
Process, Process, Process
● Right people at the right stage
○ Predict rather than respond
○ Tactical Holidays based around dates
■ QA, release etc
■ Make sure QA is not away during UAT!
○ Resource Guru
● Balance of Seniors / Juniors
● Handovers
○ Define a format
Resourcing
● “Need a comprehensive document that means the same thing to all parties and is watertight to
build, test and sign-off from”
● Behaviour Driven Development (BDD)
● Removes Ambiguity
● Tie together Wires / Func / Tech
● Understood by all parties
○ Dev’s
○ BA’s
○ QA’s
○ PM’s
○ Client!
Specification
● User Stories -> Acceptance Criteria
● “Given When Then” scenario
○ Given [Initial Context]
○ When [event occurs]
○ Then [ensure outcome]
“Given I am a user
When I click on an image in the banner
Then I should be redirected to the offers page”
Behaviour Driven Development
● Have difficult conversations up-front
● Process
○ Dependencies
● Terminology
○ You say “Template”, I say “templato”
● Documentation
○ Spec
○ Standards (FE, BE, Patterns)
○ Sign-Off
Collaboration
STANDARDS
Challenges
● CONSISTENCY
● Ensure standards across teams
● Being efficient in applying standards
● Ensure newcomers can “run quickly”
● Defined and understood
○ Design patterns
○ Accessibility
○ Browser compatibility
○ Frameworks
● PULL REQUESTS
● Pro-active & reactive
● Automate!
○ Stylecop
○ Resharper
○ C.I.
Dev Standards
If all else fails:
● Have you committed (to GIT)?
● Have you pushed (to GIT)?
● Have you pulled (from GIT)?
● Have you merged (from GIT)?
● Have you built (in Visual Studio)?
● Have you deleted your Umbraco.config file?
● Have you cleared your browser cache?
● Have you published (in Umbraco)?
● Have you Re-Indexed (your examine indexes)?
ref: Kevin Blake - http://goo.gl/jCRCnI
Thanks - Any questions?
THANKS