The Power of Working Code and Designers Who Develop (with Aaron Shekey) - 360iDev Denver, August 2015

The Power of Working Code and Designers Who Develop (with Aaron Shekey) - 360iDev Denver, August 2015

I presented with Aaron Shekey, the designer of and my partner in crime on Hum, about our process and what it's like for a developer and a designer who develops to work together.

http://justhum.com

C4861b1dfdf3bbb21faec4a1acdf183d?s=128

Ellen Shapiro

August 19, 2015
Tweet

Transcript

  1. 5.
  2. 7.
  3. 9.
  4. 15.

    UNDERSTAND YOUR CRAFT 2 “Hunter S. Thompson re-typed The Great

    Gatsby just to get the feel of writing a great novel.” Everything is a Remix
  5. 19.

    Be passionate Build tiny prototypes Embrace trial and error Be

    fearless in your incompetence HOW TO LEARN TO CODE 1 2 3 4
  6. 26.

    Iterate on UI quickly and easily Forces you to keep

    your code clear Lets you focus on the hard parts THE GOOD PARTS 1 2 3
  7. 28.

    FOCUS ON THE HARD PARTS 3 Fixes for #557: Crash

    when trying to delete from search view Possible fixes for #554: IOOB crash when a song stops Fixes for #555: The static waveform view is bad at math Fixes for #543: Inline player disappears after going to background
  8. 29.

    FOCUS ON THE HARD PARTS 3 Using updated model to

    regenerate CoreData files Updating MOGenerator script to use new model. Add new CoreData model and setup / test automatic migration Updating JSON parsing for recordings and songs. Dropbox Wrapper, take 1
  9. 30.

    FOCUS ON THE HARD PARTS 3 Using updated model to

    regenerate CoreData files Updating MOGenerator script to use new model. Add new CoreData model and setup / test automatic migration Updating JSON parsing for recordings and songs. Dropbox Wrapper, take 1 Dropbox Wrapper, take 1 bfb89e2 E Mar 10, 2014, 9:08 PM 1.4 Build 29d63cc A Feb 10, 2015, 6:06 PM
  10. 31.

    So many lines of “working code” Huge, unruly methods Not

    quite the MVC I’d been taught THE NOT SO GOOD PARTS 1 2 3
  11. 32.

    SO MANY LINES OF “WORKING CODE” 1 UIImageView *soundSoft =

    [[UIImageView alloc] initWithFrame:CGRectMake(-27, 8, 17, 18)]; soundSoft.image = [UIImage imageNamed:@"soundSoft.png"];
  12. 33.

    SO MANY LINES OF “WORKING CODE” 1 UIImageView *soundSoft =

    [[UIImageView alloc] initWithFrame:CGRectMake(-27, 8, 17, 18)]; soundSoft.image = [UIImage imageNamed:@"soundSoft.png"];
  13. 37.

    “Some of the worst code I’ve ever written has been

    in my most successful projects.” –Jared Sinclair Judicious Use of Shitty Code
  14. 38.

    “If, in the end, the code looks easy — unimpressive,

    even, as if a middle-school kid could have written it — then good.” –Brent Simmons How Not To Crash #9: Mindset
  15. 39.
  16. 40.
  17. 42.

    continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event Aaron’s if ( touchLocation.x < self.segment

    ) { CGRect tick01Frame = self.tick01.frame; tick01Frame.origin.y = -2.5; [UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.6f initialSpringVelocity:0.0f options:UIViewAnimationOptionCurveLinear animations:^{ self.tick01.frame = tick01Frame; } completion:^(BOOL finished) { } ]; } else { CGRect tick01Frame = self.tick01.frame; tick01Frame.origin.y = 2.5; [UIView animateWithDuration:0.5 delay:0 usingSpringWithDamping:0.6f initialSpringVelocity:0.0f options:UIViewAnimationOptionCurveLinear animations:^{ self.tick01.frame = tick01Frame; } completion:^(BOOL finished) { } ]; }
  18. 43.

    - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event { [self popTickIfNeededFromTouch:touch]; return [super

    continueTrackingWithTouch:touch withEvent:event]; } continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event Ellen’s
  19. 44.

    - (void)popTickIfNeededFromTouch:(UITouch *)touch { // Figure out where the hell

    the thumb is. CGRect trackRect = [self trackRectForBounds:self.bounds]; CGRect thumbRect = [self thumbRectForBounds:self.bounds trackRect:trackRect value:self.value]; CGFloat sliderLoc = CGRectGetMidX(thumbRect); // Animate tick based on the thumb location for (NSInteger i = 0; i < self.tickViews.count; i++) { [self animateTickIfNeededAtIndex:i forTouchX:sliderLoc]; } } continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event Ellen’s
  20. 47.

    Talk about how to break things up Build AutoLayout Helper

    Methods Have empathy and patience FOR DEVELOPERS 1 2 3
  21. 48.

    Talk about how to break things up Build AutoLayout Helper

    Methods Have empathy and patience FOR DEVELOPERS 1 2 3
  22. 49.
  23. 50.

    “If your goal is to build a successful business, then

    stop trying to impress your heroes. Learn as you go. Be messy. Don’t use new technologies. Don’t use new languages for their own sake. Don’t waste time trying to think of the most elegant way to break an egg. Just smash it on the counter and leave a FIXME: comment and move on. The only question that matters: is this app fun or what?” –Jared Sinclair