Effective entrepreneurship for developers


Published on

  • Be the first to comment

No Downloads
Total Views
On Slideshare
From Embeds
Number of Embeds
Embeds 0
No embeds

No notes for slide

Effective entrepreneurship for developers

  1. 1. Effective entrepreneurship for software developers in the mobile age Carlos Ble carlosble.com - @carlosble Presented at: Sociedad de Promoción Econónica de Gran Canaria (SPEGC). Gran Canaria, 20 abril 2013
  2. 2. @carlosbleBuilding the right software - Entrepreneurship - Lean startup & Impact Mapping - Agile, SbE & BDDBuilding the software right - Clean code & craftsmanship - SOLID design & architecture - TDD, and other XP practices - Continuous delivery - Native, HTML5+JavaScript, Xamarin...? - Mobile testingInteractive hands-on session : - Code with me on the randori kata
  3. 3. @carlosbleAre you really an entepreneur?
  4. 4. @carlosbleLet s bu ild t he r ight soft ware
  5. 5. @carlosble Building the right software● Lean startup:- Fail fast- Validated learning - Market discovery- Avoid waste- Book: Lean startup by Eric Ries● SBE, BDD: What do we need and why? Its all about communication... lets talk! - Books & Authors: - Gojko Adzic (3 books) - The Cucumber Book (Matt & Aslak)
  6. 6. @carlosble Building the right software● User stories: Title (one line describing the story) Narrative: As a [role] I want [feature] So that [benefit] Source: Dan North - http://dannorth.net/whats-in-a-story/● Personas (personajes in Spanish)● Impact mapping (impactmapping.org)● Planning & Analysis : Discover to Deliver [.com] (book)
  7. 7. @carlosble Gherkin language: What, not howGiven Fred has bought a microwaveAnd the microwave costs 100€When we refund the microwaveThen Fred should be refunded 100€Source: Liz Keogh -http://www.slideshare.net/lunivore/behavior-driven-development-11754474
  8. 8. @carlosble Cucumber and step definitions[Given(“Fred has bought a microwave”)]public void GivenMicrowaveIsBought(){...}[And(“the microwave costs (.*)€”)]public void AndMicrowaveCosts(int cost){...}[When(“we refund the microwave”)]public void WhenWeRefundTheMicrowave(){...}[Then(“Fred should be refunded (.*)€”)]public void ThenShouldBeRefunded(int amount){    Assert...} Step definitions using C# with SpecFlow (Cucumber for .Net)
  9. 9. @carlosbleLet s bu ild t he s oftw are righ t
  10. 10. @carlosble Building the software rightSoftware craftsmanship manifesto:● Not only working software,             but also well­crafted software● Not only responding to change,             but also steadily adding value● Not only individuals and interactions,             but also a community of professionals● Not only customer collaboration,             but also productive partnerships“The only way to go fast, is to go well” - Robert C. Martin
  11. 11. @carlosble Building the software rightClean Code:Does it matter? - Cleancoders.com and the bookLow coupling, high cohesion, dependencies.SOLID design principles: Single Responsibility Open/Closed Liskov Substitution Interface Segregation Dependency InjectionTDD and Pair programming:Minimalistic, goal driven, precise
  12. 12. @carlosble Building the software right OU?! em,.. . DO Y tr ol syst ersion c on v ou h ave aSo y
  13. 13. @carlosble Building the software rightRemove duplication Good naming
  14. 14. @carlosble eXtreme Programming Its about VALUES: ● Simplicity ● Communication ● Feedback ● Courage → Honesty - Book: Extreme Programming Explained: Embrace change2nd edition, Kent Beck
  15. 15. @carlosble The TDD MantraRED: Before writing the code, express your intent in the form of a test Books: > Test Driven – Lasse KoskelaGREEN: Dont think, just make > Growing object the test pass oriented software guided by tests – with the minimun effort, Freeman & Pryce the simplest way > Diseño agil con TDD –REFACTOR: Carlos Ble & co. Remove duplication Improve naming SOLID
  16. 16. @carlosblePair programming or... maximizing the amount of work NOT done ● The bottleneck of the project is not the keyboard. ● Incredibly effective way of eliminating waste. ● Best enemy of defects. ● I always prefer to pair than coding alone (except on those days when I dont feel any good). ● Sinergy: 1+1 = 4 ODE I TY C UAL HI GH Q
  17. 17. @carlosble If you are in a team...● Code reviews.● Continuous integration.● Be a good team player: do your best always.● And before anything else... stick to the principles and understand the values.
  18. 18. @carlosble ArchitectureBook: Code Complete, Steve McConnell● Major classes● Data Design● Business Rules● User Interface Design● Resource Management● Security● Performance● Scalability● Interoperability● Internationalization/Localization (i18n, l10n)● Input/Output● Error Processing● Fault Tolerance● Good architecture allows you to defer decisions
  19. 19. @carlosble Design patternsBook: Head first design patternsWhat I use the most: ● Factory ● Template method ● Wrapper ● Observer ● Mediator ● Singleton ● MVVM / MVP / Passive View● Let them emerge from your designs
  20. 20. @carlosble Exploratory testing & UX● Even if youve got 100% test coverage, your app canbe broken (and it will).● Exploratory testing is always necessary.● Try to get the application tested by real testers.● Invite beta testers.● Dont forget about usability and User eXperience: Books: Dont make me think – Steve Krug User interface design for programmers - Spolsky
  21. 21. @carlosble Native or not native?● Some specialists are making good money and native apps perform better than HTML+JS, but...● What do you need? ● Powerful visual effects? ● Targeting multiple platforms?● What are your skills? And your resources? ● Are you productive with JavaScript? ● Do you have to maintain it in the long run?● There are alternatives : - PhoneGap + frameworks like jQuery mobile. - Sencha Touch. - Xamarin (C# development). - Appcelerator. - ...
  22. 22. @carlosble Automated testing in the mobile world● Calabash (multiplatform): http://calaba.sh (Cucumber friendly!) - Demo: http://skillsmatter.com/podcast/java-jee/cross-platform-and-end-to-end-bdd-for-mobile● Frank (iOS): http://testingwithfrank.com/ (Cucumber friendly!)● Robolectric (Android): unit testing But remember... the mobile is just a delivery mechanism!● Book: Responsible design for Android - J.B. Rainsberger (leanpub)
  23. 23. @carlosble Want to be a good developer?● Seek continuous improvement - Read books (specially in English) - Attend to conferences - Listen to podcasts - Share with the local communities - Write a blog - Work on some open source project - Practice with code katas or pet projects - Teach others● Improve your communications skills● Master your tools. Some examples: - Can you type without looking at the keyboard? - Do you know common shortcuts?● Be a good teammateBook: Apprenticeship patterns – Hoover & Oshineye
  24. 24. @carlosble Conclusions● Its not about money, just do your best as aprofessional and work for a better world.● Dont worry to much about a particular technology,learn about principles, patterns and techniques.● Although being a technology specialist might help youmake a lot of money in the short term.● Build the right software != Build the software right● Improve your communication skills because that is asimportant as programming.● A great professional is always learning.
  25. 25. @carlosble Related presentationshttp://www.slideshare.net/carlosblejurado/best-practicesjsriahttp://www.slideshare.net/carlosble/charla-tdd-uji-032010http://www.slideshare.net/carlosblejurado/bdd-workshop-for-javascript-developers
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.