cto school w Michael Nygard 

http://www.meetup.com/ctoschool/events/220150196/
@mtnygard

“are you unintentionally coupling critical features to non important features?” @mtnygard
EG: take an order and send and email – if email fails
3rd party items can just hang
alex note: remember logentries
http://www.michaelnygard.com/blog/2015/04/the-perils-of-semantic-coupling/

HR problems
tipped from 50% to 100% when moving from RoR to clojure – poaching was a big deal
how do you value contributions when you’re not working on the new hotness?
no great answers?
be clear to people that they would still be alumni/etc and they’d help them rather than let them feel left behind
small company: “everyone feel like family” but then there’s a time when none of those people are there.

testing strategy recommendations:
unit tests + simulation tests, ignore the middle
https://github.com/mtnygard/simulant-example
simulation tests too heavy for CIT, must be nightly build

“state space” – nice term

disrupt connection via tool like Bane
https://github.com/danielwellman/bane
to test unexpected API situations

“devops was inevitable with cloud systems”
problem: take existing applications, forklift to cloud.
you can detect this company if they have a “devops team”
some set ups are more conducive:
EG: PHP is good (change files, done). .net is bad (compile, restart, blah)

“dev is production”
development tools are a production concern – can’t take down CIT, etc.

future of devops
breaking things apart. containers are good.
if microservices are good, are “nanoservices” better?
deploy without downtime is key – this requires solid isolation.

microservices
Martin Fowler’s monolith first http://martinfowler.com/bliki/MonolithFirst.html
with microservices: premium keeping track of the overhead/contracts. no good tooling at present for keeping track of all connections.
services help break up teams – if you don’t need to break up teams, maybe you don’t need microservices.

“maneuverable” vs “agile”
agile doesn’t scale?
maneuverable (fighter jets) = ability to gain or shed momentum faster than your opponent.  less demanding than agile.

what is systems thinking?
look at cause-effect relationship
feedback loops / reinforcement loops
“root cause” analysis misses the loops created
Team is a complex system.  How do you use this for directed change?  Use systems thinking to break the loop.  Causal loop diagram.  Current reality tree -> future reality tree.

Videos from prev sessions: https://vimeo.com/ctoschool

Advice for early technical leaders?
Don’t stop coding, but don’t spend all your time coding.  Politics and leadership – soft skills are difficult.
How does the whole company work?  Alignment is difficult.
Always hire better than you.  Don’t hire assholes.  OK to have false negatives.
Hiring process is not perfect, it’s less important than firing someone when it is time to. Challenge person: give them an assignment, excuses or code?
Learn how to give feedback well.

Getting people up to speed
“architectural decision record” – options, decisions, consequences.  good for getting up to speed (the whys).