Effective entrepreneurshipfor 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
Building the right software- Entrepreneurship- Lean startup & Impact Mapping- Agile, SbE & BDD
Building the software right- Clean code & craftsmanship- SOLID design & architecture- TDD, and other XP practices- Continuous delivery- Native, HTML5+JavaScript, Xamarin...?- Mobile testing
Interactive hands-on session: - Code with me on the randori kata
@carlosble
@carlosble
Are you Are you really anreally an
eenntteepprreenneeuur?r?
Let's build the right software
Let's build the right software
@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? It's all about communication... let's talk! - Books & Authors: - Gojko Adzic (3 books) - The Cucumber Book (Matt & Aslak)
@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)
@carlosble
Gherkin language: What, not how
Given 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
@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)
@carlosble
Let's build the software right
Let's build the software right
@carlosble
Building the software right
Software craftsmanship manifesto:
● Not only working software, but also wellcrafted 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
@carlosble
Building the software right
Clean Code:Does it matter? - Cleancoders.com and the book
Low coupling, high cohesion, dependencies.
SOLID design principles:Single ResponsibilityOpen/ClosedLiskov SubstitutionInterface SegregationDependency Injection
TDD and Pair programming:Minimalistic, goal driven, precise
@carlosble
Building the software right
So you have a version control system,... DO YOU?!
@carlosble
Building the software right
Remove duplicationRemove duplication
Good namingGood naming
@carlosble
eXtreme Programming
It's about VALUES:
● Simplicity
● Communication
● Feedback
● Courage Honesty→
- Book: Extreme Programming Explained: Embrace change 2nd edition, Kent Beck
@carlosble
The TDD Mantra
@carlosble
RED: Before writing the code,
express your intent in the form of a test
GREEN: Don't think, just make
the test pass with the minimun effort,
the simplest way
REFACTOR: Remove duplication
Improve naming SOLID
Books:
> Test Driven – Lasse Koskela
> Growing object oriented software guided by tests – Freeman & Pryce
> Diseño agil con TDD – Carlos Ble & co.
Pair 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 don't feel any good).
● Sinergy: 1+1 = 4
@carlosble
HIGH QUALITY CODE
HIGH QUALITY CODE
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.
@carlosble
Architecture Book: 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
@carlosble
Design patterns
Book: Head first design patterns
What I use the most:● Factory● Template method● Wrapper● Observer● Mediator● Singleton● MVVM / MVP / Passive View
● Let them emerge from your designs
@carlosble
Exploratory testing & UX● Even if you've got 100% test coverage, your app can be broken (and it will).
● Exploratory testing is always necessary.
● Try to get the application tested by real testers.
● Invite beta testers.
● Don't forget about usability and User eXperience: Books: Don't make me think – Steve Krug User interface design for programmers - Spolsky
@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 skil ls? 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. - ...
@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)
@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 teammate
Book: Apprenticeship patterns – Hoover & Oshineye
@carlosble
Conclusions● It's not about money, just do your best as a professional and work for a better world.
● Don't worry to much about a particular technology, learn about principles, patterns and techniques.
● Although being a technology specialist might help you make a lot of money in the short term.
● Build the right software != Build the software right
● Improve your communication skills because that is as important as programming.
● A great professional is always learning.
@carlosble
Related presentations
http://www.slideshare.net/carlosblejurado/best-practicesjsria http://www.slideshare.net/carlosble/charla-tdd-uji-032010http://www.slideshare.net/carlosblejurado/bdd-workshop-for-javascript-developers
@carlosble
Top Related