Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Long Term. Expensive. Painful. iOS application

Long Term. Expensive. Painful. iOS application

#oleksiiholub #svitlaiosmeetup #iosdevelopment #iosmeetup
Classical psychoanalytic psychology implies that each personality has such concepts as Libido and Thanatos that are responsible for creation and destruction. Let’s try to convert more Thanatos into Libido and reduce the amount of pain passed on to the next generation developers and the customers
The main part of the speech: https://www.youtube.com/watch?v=vRVci7eiV8c
The Q&A part of the speech: https://www.youtube.com/watch?v=dtNmcK8ZZWA

Avatar for Oleksii Holub

Oleksii Holub

April 24, 2019
Tweet

More Decks by Oleksii Holub

Other Decks in Programming

Transcript

  1. Classical psychoanalytic psychology implies that each personality has such concepts

    as Libido and Thanatos that are responsible for creation and destruction. Let’s try to convert more Thanatos into Libido and reduce the amount of pain passed on to the next generation developers and the client
  2. Always code as if the person who ends up maintaining

    your code is a violent psychopath who knows where you live. John F. Woods
  3. * KISS * SOLID * Patterns/Antipatterns * Best practices of

    language/platform
 * Common conventions of language/platform Basic rules of “common sense”
  4. * KISS * Patterns/Antipatterns * Best practices of language/platform
 *

    Common conventions of language/platform Basic rules of “common sense”
  5. * KISS * Patterns/Antipatterns * Best practices of language/platform
 *

    Common conventions of language/platform Basic rules of “common sense”
  6. * KISS * Patterns/Antipatterns * Best practices of language/platform
 *

    Common conventions of language/platform Basic rules of “common sense”
  7. Main criteria of understanding that everything I do right now

    is NOT breaking common sense is the final price of the chosen solution
  8. Main criteria of understanding that everything I do right now

    is NOT breaking common sense is the final price of the chosen solution
  9. So, how to calculate the final price of the chosen

    technical solution? It’s basically how expensive it becomes for your customer if you leave the company
  10. So, how to calculate the final price of the chosen

    technical solution? - what value does the solution bring to the business? - is it bigger than a cost of hiring or onboarding new team members with such skill? - how heavily the project will rely on the solution? - is it well known and popular in the industry? - how good it’s already tested by a community? Is it well documented and supported by maintainers? - did it prove stability/performance and/or all other requirements for the developed system? - are the downsides of the solution already known and it’s possible to evaluate them against their advantages? - Bus factor is not equal one! - TEAM performance is more important than the MEMBER performance
  11. • TOP 5 TIME/EFFORT/EMOTIONS DEVOURERS • 5. Projects without tests

    • 4. Reckless multithreading • 3. Alternative architectures and VIPER • 2. Reactive Programming • 1. NO SOLID
  12. • unit-tests save an enormous amount of time/ efforts in

    the future of development/maintaining the project. But they do not make sense without CI and team test culture in general. • if customer don’t understand the value of tests - it is a red flag for you, but “golden trap” for him • every code you write right now and not cover with tests - is a Legacy Code • if there is no need for tests - do not write them! 5. Projects without tests
  13. • unit-tests save enormous amount of time/efforts on future of

    development/maintaining project. But they do not make sense without CI and team test culture in general • if the customer doesn't understand the value of tests - it's a red flag for you and a “golden trap” for him • every code you write right now and not cover with tests - is a Legacy Code • if there is no need for tests - do not write them! 5. Projects without tests
  14. • unit-tests save enormous amount of time/efforts on future of

    development/maintaining project. But they do not make sense without CI and team test culture in general • if the customer doesn't understand the value of tests - it's a red flag for you and a “golden trap” for him • every code you write right now and not cover with tests - is a Legacy Code • if there is no need for tests - do not write them! 5. Projects without tests
  15. • unit-tests save enormous amount of time/efforts on future of

    development/maintaining project. But they do not make sense without CI and team test culture in general • if the customer doesn't understand the value of tests - it's a red flag for you and a “golden trap” for him • every code you write right now and not cover with tests - is a Legacy Code • if there is no need for tests - don't write them! 5. Projects without tests
  16. • TOP 5 TIME/EFFORT/EMOTIONS DEVOURERS • 5. Projects without tests

    • 4. Reckless multithreading • 3. Alternative architectures and VIPER • 2. Reactive Programming • 1. NO SOLID
  17. • Please, always KISS! • The only rule to use

    multithreading: 4. Reckless multithreading use it only when user does something and program should do something else simultaneously
  18. • Please, always KISS! • The only rule to use

    multithreading: 4. Reckless multithreading use it only when the user does something and program should do something else simultaneously
  19. • TOP 5 TIME/EFFORT/EMOTIONS DEVOURERS • 5. Projects without tests

    • 4. Reckless multithreading • 3. VIPER • 2. Reactive Programming • 1. NO SOLID
  20. • that’s not a KISS! • very tight integration in

    the project • the storyboard becomes an issue • you can't avoid view controller usage • too much boilerplate code • a lot of absolutely identical routers • too transparent (maybe even unnecessary) Presenter • UI components responsibility domain - ViewController or Interactor->Presenter? • in some implementations the Interactor is called through a Presenter • in fast changing startup environment you’ll have to rewrite a lot of stuff • your Junior developers will struggle 3. VIPER what they don’t tell you
  21. • TOP 5 TIME/EFFORT/EMOTIONS DEVOURERS • 5. Projects without tests

    • 4. Reckless multithreading • 3. VIPER • 2. Reactive Programming • 1. NO SOLID
  22. • customization of non-standard cases may require overcomplicated parts of

    code • that’s not a KISS! • very tight integration in a project • even popular 3rd party libraries have too much extensions • you’ll probably read more code than write • your Junior developers will struggle • the reason that functional-reactive way of programming exists in iOS - it’s only because we can 2. Reactive programming what they don’t tell you
  23. • TOP 5 TIME/EFFORT/EMOTIONS DEVOURERS • 5. Projects without tests

    • 4. Reckless multithreading • 3. VIPER • 2. Reactive Programming • 1. NO SOLID
  24. • there is no such thing as SOLID being considered

    an overengineering • It's incredible that for some projects it works without SOLID! • older skilled developers are writing SOLID without the knowledge of it • borndead NO SOLID projects exist. 90% of such job is placed on the freelance markets and only lives there • which means that you should test heavily iOS candidates with excessive freelance experience • please, force your Junior developers to use SOLID without exceptions 1. NO SOLID