Storm Threequal js vs ruby
The E myth Org chart for yourself
QFD = ideas into actionable items Wants and weights Technical requirements (guesses) Target values Relationship strength (positive or negative to wants) Flip it and do it again
Don't measure process Don't feel comfortable just because you're following a process
Consumer options != life options, see above
Methods should do one thing Match abstraction levels
Mind mapping
Don't hate; iterate
Delaying admittance of failure prolongs positive iteration
Product managers shouldn't create products without measurable goals
Measure everything
Smoothing algorithms and aberration detection
Outsource what you're bad at Document Communicate Delegate Measure Organize
Where are we? Where do we want to be? What to do to get there?
JSLint knows about good parts and bad parts It will hurt your feelings
Prefer forms that are error resilient
Fallthrough is bad (switch)
That hardly ever happens = it happens
Style is about better programs and reducing errors
Never use with(){} confusion must be avoided
Always use threequal in js, double does coersion
Multiline string literals suck
a lot
Programs should look like what they do Don't test for boolean in an assignment
Write in the language you're writing in
Var is function scope Let is block scope
bad++ good += 1
Forms that can hide defects are defective
Language subsets are good
Backbone is lowest common denominator
Ember is
- data binding
- computed properties
- data-bound celarative templates
- Mvc structure
- ember-data, rest built in
Apis are less consistent than sql
Weekend projects and large corporate projects peril Ember is in the middle
Optimized for developer happiness
Apis become frozen Performance can always be refactored
Objects! Classes! Mixins! Super! Namespaces!
Uniform access is great for refactoring (computed properties)
Intermediate state or bindings Browser events wait for all to finish Other events use setTimeout
Templates can exist in script tags in the body, good for prototyping
Upcoming
- Routers
- state managers
- persistence
- improved debugging
- docs
- rails
Mobile is shipped software Users control their updates
Humans only voice complaints
- Products
- People
- Process
- Consultant (depends on cookie-cutter-ness of app)
- train your best engineers
- hire young guns
- engineering managers with shipping experience
- go to where mobile engineers are
- simplify (most important, reduce scope to bare minimum)
- prepare
- plan
- build, test, build, test
- test again as a user
- release
- party
QA + Developer = Feature team
Partner with internal teams
Send all of your developers to major confernces
- Retention
- Skills
- Networking
Reach out to Apple and Google
Use the cloud for hard stuff
Use native platform capabilities and abstractions, sometimes denying feature requests from product managers to maintain simplicity
Founded by 4 dudes in a coffee shop/bar/somewhere Side project Still had fulltime jobs Had to work async Forced to be distributed, flexible, happy Improve your company Zachholman.com
Hours are bullshit Creative people don't fit in a 9-5 Crafting code is hugely creative Design environment for artists You can't force creativity to happen Best solutions happen when you're in the zone When youre not in the zone, do something else (not work) Embrace flexibility 90 hours a week and loving it = bad programmers, bade of foolishness Pushing code = do it all over again anyway Best work happens when people are happy
First principle What are we trying to solve Solve it the bet way Ignore what people have ben doing
Huge cost to having people leave
Trust your employees Biggest problem in large companies Programmers do this because they love it Youhiredthem
Reaganism: trust but verify
Weekly beer company talk Broadcast and recorded
Recorded required 5 min talks
Team building summits
No offices, required desk switching ~monthly
Stay in the zone Minimize distractions Hey i got a question = worst thing ever Headphones are a good indicator
No meetings ever Few person chats are ok No managers, everyone is a manager Managers only distract Self-forming teams
Many teams Encouraged to stay in team til shipped Shipping culture, unshipped is nothing Can be on multiple teams Chat room per team
Minimal process Fuck agile, standups, xp, retrospectives, chickens and pigs Software answers these Does this generic process work for us? Minimum viable process
Get feedback quickly internally (chat) Pull requests for code review Wikis, internal cht Make it ok to say no (alternative is shitty ideas shipping)
Ideas repo, shareable by everyone, comments, etc. Everyone. This distills good ideas to the top Again, make it ok to say something sucks
Master is always deployable Master deploys to production after CI automatically Pull request' someone else sign off, merge Deploy multiple times a day Quicker deploys mean smaller bugs 3 weeks of code released = 3 weeks of fuckups Have a simple rollback Partial deploys, staff only, certain servers, etc
Git-flow is complicated and sucks Complication screws non-technical people
Fast tests! Slow test is a regression
Graph everything Custom dashboards
Only use staging sparingly Tests are more important than staging Make it automated If something breaks, write a test! Don't just fix it.
Optimize for happiness
0 employees have left Institutional knowledge would go with them Hiring is expensive, people leaving either more Offering more money to people leaving never works Happy programmers are twice as productive
Foster exploration Shared side projects
Give kindles to everyone Give fitbits to everyone
Employees don't go to conferences alone, fly someone else out with them
Shared music system, streams to people at home Helps bonding
Bring people together on fresh and new stuff
Ideation needs people to say it sucks
Artificial constraints Lack of 9-5 still applies Find your minimum viable process
Pages are mostly the same Lots of redundancy Speed matters
Pushstate for urls
Problems Multiple content areas Titles Hidden changes Context switching Computers should do it for us
Auto-Pjax for Django
Hashbangs suck
Security is important
Load url Pass pjax and current Sever does diff Return json Client replaces