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

Time Driven Development

Time Driven Development

Working with companies from early-stage startups to Fortune 500, I’ve seen first hand how the architecture approach affects team performance. It’s as easy to overengineer a simple app if you rely too heavily on good design principles, as it is to create a very coupled architecture if you don’t. In this presentation, we’ll cover different scenarios and try to choose the proper architecture depending on the business requirements. We’ll see how the time we spend on development is defined by our design choices and how that impacts the overall performance of the team.

6165f5bae67e249133eba24da4b93780?s=128

Katerina Trajchevska

August 30, 2019
Tweet

Transcript

  1. TIME DRIVEN DEVELOPMENT @ktrajchevska Katerina Trajchevska, Laracon EU

  2. Exclusive Developers’ Network Katerina Trajchevska • Software Engineer & Mozilla

    Tech Speaker • Co-founder of Adeva, an exclusive developers’ network. • Consultant with startups and Fortune 500 @ktrajchevska
  3. @ktrajchevska I often leave the office 1-2 hours later than

    my co-workers after polishing some piece of ultimately meaningless code. This is time I don’t spend with my family. Because I’ve learned to care about Clean Code. - Johannes Broadwall, Forget about Clean Code, let’s embrace Compassionate Code
  4. @ktrajchevska ⚠ “Refactor away from SRP”

  5. @ktrajchevska We fully test our software. or We practice TDD.

    or We follow SOLID principles. The bottom line is simply that we go home every night, look in the mirror, and are proud of what we accomplished that day. - Uncle Bob, The Obligation of the Programmer
  6. We’ve created a toxic environment that values the usage of

    good design pracNces above creaNng value for the user.
  7. @ktrajchevska

  8. Why Time Driven Development?

  9. Example #1 Adeva PlaVorm: Building developers’ profiles.

  10. None
  11. App\ZohoCandidate.php

  12. App\Http\Controllers\CandidateController.php Controller knows too much and is open for modificaNon.

    Methods depend directly on the CRM storage and their naming convenNons.
  13. profile.blade.php View uses arrays that should be replaced with CollecNons

    in future.
  14. @ktrajchevska What does it take to switch the storage? 1.

    Add Eloquent models to use with MySQL. 2. Change controller dependencies from CRM class to Eloquent. 3. Use Eloquent instead of CRM to pull data for the view. 4. Switch all variables to the new naming convention. 5. Change the way we access data in the views. 6. Adjust the unit tests to work accordingly.
  15. How can we save time by improving the code design?

  16. 1. Don’t depend on concrete implementaNons.

  17. App\Repositories\Interfaces\CandidateRepositoryInterface.php

  18. App\Http\Controllers\CandidateController.php

  19. 2. Be mindful about what your program expects.

  20. App\Crm\Candidate.php

  21. profile.blade.php

  22. 3. Bind abstractions with concrete implementation.

  23. App\Providers\AppServiceProvider.php

  24. @ktrajchevska What does it take to switch the storage? 1.

    Add Eloquent models to use with MySQL. 2. Create MysqlCandidateRepository that implements CandidateRepositoryInterface. 3. Change the binding for CandidateRepositoryInterface in AppServiceProvider.
  25. Example #2: Adeva PlaVorm: Pulling data from Github

  26. Integrations\VersionControl\VersionControlFactory.php

  27. App\Integrations\Interfaces\AbstractVersionControl.php

  28. Integrations\VersionControl\Github.php

  29. App\Http\Controllers\Admin\CandidateController.php

  30. @ktrajchevska

  31. Is there a better way to do it?

  32. App\Http\Controllers\Admin\CandidateController.php

  33. @ktrajchevska Why Time Driven Development? • Software design practices come

    with trade-offs. Know them. • Software design principles should simplify your life, not complicate it. • Thinking about the bigger picture will help you create more than just software. It will help you create value.
  34. @ktrajchevska How to start pracDcing Time Driven Development? • Talk

    to your lead to understand the business goals before proposing an architecture. • Always have the context in mind when designing soeware. • Don’t shame others for not adhering to “the best” soeware design pracNces.
  35. Soeware Design Principles are your tools, not your goals.

  36. Thank you! @ktrajchevska adeva.co Exclusive developers’ network.