GorillaStack Arch Review

Agenda

  • Team
  • Philosophies
  • Practices
  • DevOps
  • Architecture
  • Future Plans

Team

we're pretty small

Philosophies

how we think

1. Don't let perfect get in the way of good

Perfectionism robs the customer of a solution.

We like to get things out quickly, even if we have to rush fixes out. That's a positive, the bugs demonstrate use and user intent.

 

So long as the feedback loop is tight and DevOps is good, it's really not that big of a deal to have a bug in production.

2. No Egos

We encourage divergent thinking.

 

From day 1 on the team, developers are encouraged to challenge the status quo. They also accept that they too will be challenged. Developers are then less married to their idea than finding the right solution.

 

I love it when the people in the team prove me wrong. I regularly ask for feedback on what we're collectively doing wrong, and what I'm individually doing wrong.

3. "Why Not" bias

We're "Why Not" people, not "Why" people.

Because we're not egotists, we welcome failure as an opportunity to learn.

In that environment, there is no reason not to try new ways of doing things, or explore new ideas.

4. Tight feedback loops

Keeping feedback loops tight means that we waste less time when we get things wrong, and know sooner when we get them right.

 

Developers are in direct contact with customers.

Developers are plugged into monitoring/operations.

I'm fundamentally accountable for the speed of the feedback loops, as this has the highest multiplier effect on team productivity.

5. Continuous Improvement

Everyone on the team is encouraged to identify their failings and share with the team.

 

We don't care about getting things right all the time, only about improving when we get them wrong.

 

We don't chew people out when they stuff up, they own it themselves and we all improve as a result.

6. Leadership by Example

We're still learning how to drive change through documentation and process design.

 

We currently lead by example. Any practice expected of the team, is demonstrated by the leader and mimicked naturally.

 

Whether how code review is done, how you test, how you estimate. It's all about leadership. Every developer is a leader. Everyone has to exhibit the right behaviours.

Practices

how we work

"Agile"

We used to be more agile when running off a kanban board with basic task kick-offs with me for each piece of work.

 

Now on a 2-week sprint cycle. Demo/Retro/Sprint Planning, async standups in Slack.

Noble Chats

Pioneered by Steven Noble, these chats are a randomised pairing of different developers to go over obstacles from the stand-up and do some pair programming where someone is stuck.

Dev Catchups

On a weekly basis we get together to discuss interesting lessons learnt from the week.

 

Developers are encouraged to share new ideas with the team. Some become DACIs and eventually new practices for the group.

Tech Debt Fridays

Technical debt is a reality. It must be paid down regularly and in decent amounts or you pay interest.

 

We occasionally dedicate Fridays to the squashing of bugs and technical debt. More of a challenge since implementing sprints.

Git Workflow

We use a simplified gitflow workflow. We hope to further simplify to eradicate the "develop" branch and go straight to production more regularly.

 

We do code reviews on small changesets, where the last reviewer merges. Squash into develop, rebase to master.

DevOps

how our work gets to the customer

1. Plan

- use JIRA for backlog/grooming/planning

- use DDD techniques like event storming for big picture work and process modeling

- Spikes and POCs to address hotspots and uncertainty

2. Create

- Use Github to host our code

- Use local environments or development sandboxes for feedback in while coding

- Open PRs for feedback/review

 

3. Build/Verify

- Use Buildkite for all build orchestration

- CI pipelines apply unit tests, integration tests, static code analysis (including style checks), dependency security audits and finally create a deployment artifact

- Have > 10,000 unit tests right now

 

4. Deploy

- Use Buildkite for all build orchestration

- CD pipelines take a verified deployment artifact and release them to an environment (production, preproduction, sandbox, depending on configuration)

5. Operate

- We do all our own Ops. No SREs in the team

- Not much to do in this phase, mostly monitoring, which comes next.

- We're looking at implementing canary releases in the future

6. Monitor

- All metrics, logs and traces go into Datadog

- Datadog alerts us around different metrics crossing thresholds we deem unacceptable, or anomalies detected

- Datadog pages us through VictorOps, which is set to escalate for a subset of monitors/alerts

- Rollbar gives us feedback on errors throw in applications and services

7. Feedback

- We take feedback from monitoring, from HEAP analytics and most importantly, direct from users and bring this into our backlog and tech debt register

Architecture

how we break things down

Evolutionary Architecture

  • Tools, technology, techniques are constantly changing
  • Needs are constantly changing
  • Technical debt and performance degradation accumulate in different areas over time

 

We look to support constant change, rather than architect nirvana

 

 

Context Diagram

Container Diagram

Next Evolution of Arch

Zoom in on RTE architecture

Future Plans

new practices we're looking at

Chaos Engineering

Bug Bounty Program

New Account/Subscription Trust Model

GorillaStack Arch Review

By em0ney

GorillaStack Arch Review

  • 455