umbraco development across large and distributed teams

36
BEST PRACTICE DEVELOPMENT for large and distributed teams

Upload: janusz-stabik

Post on 14-Jan-2017

110 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Umbraco development across large and distributed teams

BEST PRACTICE DEVELOPMENT

for large and distributed teams

Page 2: Umbraco development across 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

Page 3: Umbraco development across large and distributed teams

Challenges

● Co-Working

○ Multiple devs on same project

○ Distributed teams

○ Disparate physical locations

○ Agency Collaboration

● Process / Project Management

● Tooling

● Documentation

Page 4: Umbraco development across large and distributed teams

INFRASTRUCTURE

Page 5: Umbraco development across large and distributed teams

What are we trying to achieve?

● Prevent Downtime

○ Developer

○ Server Infrastructure / Websites

● Ensure a high level of productivity / efficiency

Page 6: Umbraco development across large and distributed teams

● 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

Page 7: Umbraco development across large and distributed teams

● VPS / Cloud / Dedicated / IAAS

● Looking for:

○ No / limited hardware outages of any environment

○ Scalability:

■ Vertical: More resources (CPU’s, RAM)

■ Horizontal: More servers

Infrastructure

Page 8: Umbraco development across large and distributed teams

● 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

Page 9: Umbraco development across large and distributed teams

● 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

Page 10: Umbraco development across large and distributed teams

DEVELOPMENT

Page 11: Umbraco development across large and distributed teams

Challenges

● Efficient development

● Efficient deployments

● A maintainable codebase

Page 12: Umbraco development across large and distributed teams

● 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

Page 13: Umbraco development across large and distributed teams

● 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

Page 14: Umbraco development across large and distributed teams

Source Control

● Don’t include:

○ Solution dll’s in bin

○ umbraco.config

○ Examine indexes

○ .suo

○ /obj

○ .csproj.user

○ /media

○ Temp files

○ Log files

Page 15: Umbraco development across large and distributed teams

● 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

Page 16: Umbraco development across large and distributed teams

● 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

Page 17: Umbraco development across large and distributed teams

● 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

Page 18: Umbraco development across large and distributed teams

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”?

Page 19: Umbraco development across large and distributed teams
Page 20: Umbraco development across large and distributed teams

● 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

Page 21: Umbraco development across large and distributed teams

uSync

Page 22: Umbraco development across large and distributed teams

uSync

Page 23: Umbraco development across large and distributed teams

PROJECT MANAGEMENT

Page 24: Umbraco development across large and distributed teams

Challenges

● Communication

● Productivity / across teams

● Difference in standards / process between

teams

Page 25: Umbraco development across large and distributed 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

Page 26: Umbraco development across large and distributed teams

● 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

Page 27: Umbraco development across large and distributed teams

● 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

Page 28: Umbraco development across large and distributed teams

● “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

Page 29: Umbraco development across large and distributed teams

● 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

Page 30: Umbraco development across large and distributed teams

● Have difficult conversations up-front

● Process

○ Dependencies

● Terminology

○ You say “Template”, I say “templato”

● Documentation

○ Spec

○ Standards (FE, BE, Patterns)

○ Sign-Off

Collaboration

Page 31: Umbraco development across large and distributed teams

STANDARDS

Page 32: Umbraco development across large and distributed teams

Challenges

● CONSISTENCY

● Ensure standards across teams

● Being efficient in applying standards

● Ensure newcomers can “run quickly”

Page 33: Umbraco development across large and distributed teams

● Defined and understood

○ Design patterns

○ Accessibility

○ Browser compatibility

○ Frameworks

● PULL REQUESTS

● Pro-active & reactive

● Automate!

○ Stylecop

○ Resharper

○ C.I.

Dev Standards

Page 34: Umbraco development across large and distributed teams

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

Page 35: Umbraco development across large and distributed teams

Thanks - Any questions?

Page 36: Umbraco development across large and distributed teams

THANKS