Designing for the future Architecting code and systems

  • Slides: 27
Download presentation
Designing for the future Architecting code and systems with long-term growth and development in

Designing for the future Architecting code and systems with long-term growth and development in mind Brian Belhumeur Front End Developer, craigslist. org Twitter: @JSArtisan

The most important thing: Meet your users’ needs

The most important thing: Meet your users’ needs

Consistency “CRAIG, STOP SCREWING WITH THE FORMAT! YOU IDIOTS CAN'T LEAVE WELL ENOUGH ALONE?

Consistency “CRAIG, STOP SCREWING WITH THE FORMAT! YOU IDIOTS CAN'T LEAVE WELL ENOUGH ALONE? ” - CL User Twitter: @JSArtisan

Twitter: @JSArtisan

Twitter: @JSArtisan

Program with the programmer in mind ● Comments should explain the purpose of your

Program with the programmer in mind ● Comments should explain the purpose of your code USEFUL USELESS Twitter: @JSArtisan

Program with the programmer in mind ● Clarity > tiny bit of efficiency Number(item)

Program with the programmer in mind ● Clarity > tiny bit of efficiency Number(item) vs. +item Boolean(flag) vs. !!flag String(thing) vs. “” + thing ● Weed the garden ● Red diffs ● Read “The Two Pillars of Java. Script” by Eric Elliott Twitter: @JSArtisan

Modularity is a MUST ● Adaptability ● Optimized loading ● Isomorphism ● Testing ●

Modularity is a MUST ● Adaptability ● Optimized loading ● Isomorphism ● Testing ● Wide range of implementations Twitter: @JSArtisan

Quasi-Modularity encapsulate expose module interface pass in anything needed from outside scope Twitter: @JSArtisan

Quasi-Modularity encapsulate expose module interface pass in anything needed from outside scope Twitter: @JSArtisan

Quasi-Modularity Twitter: @JSArtisan

Quasi-Modularity Twitter: @JSArtisan

Modularity is a MUST Modularize based on volatility - what’s likely to change O’Reilly

Modularity is a MUST Modularize based on volatility - what’s likely to change O’Reilly webcast: “Zen of Software Architecture” Twitter: @JSArtisan

Computers are smart 2015 2046? Twitter: @JSArtisan

Computers are smart 2015 2046? Twitter: @JSArtisan

Let machines do what they do best Use templates } Use a build system

Let machines do what they do best Use templates } Use a build system EJS Twitter: @JSArtisan

Test “wings”: You need just the right size and shape to fly Probability of

Test “wings”: You need just the right size and shape to fly Probability of bug x Cost of bug > Cost of writing, maintaining and running the test? Twitter: @JSArtisan

Growth & Scaling $$$$ $ $$ Twitter: @JSArtisan

Growth & Scaling $$$$ $ $$ Twitter: @JSArtisan

Growth & Scaling ● Caching ● Project growth curve and upgrade 12 -18 months

Growth & Scaling ● Caching ● Project growth curve and upgrade 12 -18 months out ● Think globally and massive ● Unicode Twitter: @JSArtisan

Growth & Scaling Some things that vary internationally… ● $ vs £ vs €

Growth & Scaling Some things that vary internationally… ● $ vs £ vs € ● 1, 000. 00 vs 1. 000, 00 ● 4: 00 PM vs 16: 00 ● Time zone ● First day of the week ● Pluralization ● Gendered language ● Did you know? vs ¿Sabías? ● Standard vs metric, etc Twitter: @JSArtisan

Growth & Scaling ● Expanding audience ● Changing product scope ● Keep high quality

Growth & Scaling ● Expanding audience ● Changing product scope ● Keep high quality users, drop low quality users ● Build your tools! Twitter: @JSArtisan

Improving user experience Faster is always better. Twitter: @JSArtisan

Improving user experience Faster is always better. Twitter: @JSArtisan

Improving user experience Twitter: @JSArtisan

Improving user experience Twitter: @JSArtisan

Improving user experience Iterative development 1. Make it work (prototype) 2. Make it work

Improving user experience Iterative development 1. Make it work (prototype) 2. Make it work right (debug) 3. Make it fast (optimize) 4. Make it pretty (polish) 5. Let it go! (release) Twitter: @JSArtisan

Improving user experience Users want it. . . ● Easier ● More efficient ●

Improving user experience Users want it. . . ● Easier ● More efficient ● Better? ? ? Twitter: @JSArtisan

But what are they actually doing with your product? ● Log parsing ● Analytics

But what are they actually doing with your product? ● Log parsing ● Analytics ● Real User Measurement ● Social media feedback ● Direct feedback Twitter: @JSArtisan

Users’ expectations change over time ● “Googlization”: Users have been trained not to provide

Users’ expectations change over time ● “Googlization”: Users have been trained not to provide context ● Sharing via all manner of social network ● Maps and location awareness ● Incremental refinement Twitter: @JSArtisan

Users’ expectations change over time Twitter: @JSArtisan

Users’ expectations change over time Twitter: @JSArtisan

Users’ expectations change over time View modes LOTS of filters Twitter: @JSArtisan Saved searches

Users’ expectations change over time View modes LOTS of filters Twitter: @JSArtisan Saved searches

Resources Zen of Software Architecture webcast: http: //www. oreilly. com/pub/e/3281 The Two Pillars of

Resources Zen of Software Architecture webcast: http: //www. oreilly. com/pub/e/3281 The Two Pillars of Java. Script - Eric Elliott ● Prototypal inheritance https: //medium. com/javascript-scene/the-two-pillars-of-javascript-ee 6 f 3281 e 7 f 3 ● Functional programming https: //medium. com/javascript-scene/the-two-pillars-of-javascript-pt-2 functional-programming-a 63 aa 53 a 41 a 4 Internationalization ● http: //www. localeplanet. com/support/howto-localize-js. html ● https: //github. com/wikimedia/jquery. i 18 n ● http: //formatjs. io/ ● Pluralization http: //alistapart. com/article/pluralization-for-javascript Ilya Grigorik ● Critcal rendering path: https: //developers. google. com/web/fundamentals/performance/critical-renderingpath/index ● High Performance Browser Networking: http: //chimera. labs. oreilly. com/books/1230000000545 Twitter: @JSArtisan

Thanks! Brian Belhumeur Twitter: @JSArtisan

Thanks! Brian Belhumeur Twitter: @JSArtisan