Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Effective entrepreneurship for developers


Published on

  • Be the first to comment

Effective entrepreneurship for developers

  1. 1. Effective entrepreneurship for software developers in the mobile age Carlos Ble - @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 -● Personas (personajes in Spanish)● Impact mapping (● 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 -
  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? - 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): (Cucumber friendly!) - Demo:● Frank (iOS): (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 presentations