Applied craftsmanship

478 views

Published on

We've been discussing software craftsmanship for years. But does it match the realities of a business? How?

This is a story about applying the ideas and practices of software craftsmanship for a real project in a difficult context. The conclusion? It helped us, it might help you as well.

Published in: Software, Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
478
On SlideShare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Applied craftsmanship

  1. 1. Applied Craftsmanship In A Real Project A talk by Alex Bolboaca & Claudia Ro uș alex.bolboaca@mozaicworks.com claudia.rosu@mozaicworks.com
  2. 2. The Challenge
  3. 3. 5 topics ● Starting with a new technology ● Apprenticeship ● Consistency ● Testing Strategy ● Adapting to the Customer
  4. 4. About Us ● Software crafter ● Experience with Java ● Active in communities ● Polyglot programmer ● Trainer ● Coach
  5. 5. Background ● Innovative eHealth application for a GP association ● Started in March 2013 with Alex part time ● First picked the right technologies ● Claudia joined September 2013 full time ● Alex half time
  6. 6. Constraints ● Demo twice a week – Because client is very involved in the process ● Had to use Java technologies – Because of specific needs for eHealth applications ● Limited monthly budget ● Web-based, usable on tablet
  7. 7. 1. Starting with a New Technology
  8. 8. How it started ● Evaluation of Java frameworks ● Evaluation of UI libraries
  9. 9. How it started (cont'd) ● Templating: Client vs. Server side? ● Javascript library
  10. 10. Deferred decisions ● Database engine: working with in-memory database ● Authentication and authorization: picked Shiro in Jan 2014 ● Public API
  11. 11. How We Improved ● Self-assessment ● Identified weak points ● Learned and practiced them ● Applying in production – New code: written based on new understanding – Refactoring when revisiting old code – Test First Programming => TDD
  12. 12. Self-Assessment
  13. 13. Conclusions ● Learning a new technology is challenging ● Build upon strong points! – Alex: Polyglot programming, Training and coaching experience, Strong knowledge of design and technical practices – Claudia: Unit testing, Java, Java Web Development – Eager to improve ● Learning should be included in the development process
  14. 14. 2. Apprenticeship
  15. 15. Why ● Now: Deliver twice a week ● Near future: Coordinate own team
  16. 16. Structure ● Self-assessment (project-related) ● Identify necessary skills to achieve the goal (professional growth) ● 121 meetings every 2 weeks – Discuss progress – Define next actions – reading, watching videos, coding kata etc. – Coaching, mentoring
  17. 17. Skills
  18. 18. How ● Learn grails, javascript through katas ● Include refactoring in daily work ● Test First Programming => TDD ● Growing knowledge on software design – Reviews, discussions, articles, videos etc. ● Continuous – Pair programming – Review sessions
  19. 19. Code - Tests
  20. 20. Code - Production
  21. 21. 3. Consistency
  22. 22. Why ● Facilitate decisions ● Enable user-centric conversations
  23. 23. The User View ● User perspective = “storymap” ● UI – Same type of info presented in the same way – Same actions in different places look the same
  24. 24. The Code View ● Same concept should have same name – Eg: doctor *, physician, personalGP... ● The concept should be named in business terms – Eg. current encounter, consultation *
  25. 25. The Design View ● Separate responsibilities – Exception handling – Controller only renders, Service works with data – Client side – refresh UI and minimal UI logic ● Tests organization – Avoid duplication in tests
  26. 26. Conclusion ● Consistency helps us make decisions, have meaningful conversations ● Consistency requires attention to detail ● Consistency is a general design principle
  27. 27. 4. Testing Strategy
  28. 28. Why ● Keep the development rhythm ● Structure tests for maximum efficiency ● Ideally: – One test per behavior – No duplication between tests
  29. 29. Pyramid of Tests
  30. 30. How we started
  31. 31. Where we are
  32. 32. Acceptance Tests
  33. 33. Acceptance Tests Report
  34. 34. Controller Unit Tests
  35. 35. Service Unit Tests
  36. 36. Javascript Tests
  37. 37. Conclusion ● The testing strategy evolved based on what we learned ● We improved test and application design ● Acceptance tests – help us structure our work – allow customer to understand the complexity
  38. 38. 5. Adapting to the Customer
  39. 39. Benefits ● Optimize our work based on reality ● Increase customer satisfaction
  40. 40. How we started
  41. 41. Where We Are
  42. 42. Transparency
  43. 43. Results ● Excellent feedback – “Very good” – “You show a lot of care for my money” – “Very beautiful application” ● Improved collaboration
  44. 44. 3 Core Ideas 1.High Quality, Fast Feedback At All Levels 2.Continuous Improvement 3.Attention to Details We believe this is software craftsmanship.
  45. 45. Your Questions? “The important thing is not to stop questioning”
  46. 46. Photo Attribution http://3.bp.blogspot.com/-_wmj16Vjb3Y/Uckwv7kSQJI/AAAAAAAAAik/RC6Hat- 2dLo/s1600/Casa_batllo_2.jpg http://s1ngal.files.wordpress.com/2012/11/up.jpg http://www.wallsave.com/wallpapers/1920x1080/new-technology/2313189/new- technology-hd-hdpaperz-com-2313189.jpg http://www.trendecoration.com/wp-content/uploads/fantastic-idea-for-interior-design-and- decoration-by-gaudi.jpg http://2.bp.blogspot.com/- jy6M3uYUgtM/UgJShTrwtfI/AAAAAAAAI4M/jM7w39ed8xg/s1600/1290462608-gaudi5- 1000x864.jpg https://lh6.googleusercontent.com/- jl4_nEiEsog/TXtvoKGClxI/AAAAAAAAAC0/SaUP996hmPw/s1600/IMG_1591.JPG

×