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. @carlosble
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
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?
It's all about communication... let's talk!
- Books & Authors:
- Gojko Adzic (3 books)
- The Cucumber Book (Matt & Aslak)
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. @carlosble
Gherkin language: What, not how
Given Fred has bought a microwave
And the microwave costs 100€
When we refund the microwave
Then Fred should be refunded 100€
Source: Liz Keogh -
http://www.slideshare.net/lunivore/behavior-driven-development-11754474
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)
10. @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
11. @carlosble
Building the software right
Clean Code:
Does it matter? - Cleancoders.com and the book
Low coupling, high cohesion, dependencies.
SOLID design principles:
Single Responsibility
Open/Closed
Liskov Substitution
Interface Segregation
Dependency Injection
TDD and Pair programming:
Minimalistic, goal driven, precise
12. @carlosble
Building the software right
OU?!
em,.. . DO Y
tr ol syst
ersion c on
v
ou h ave a
So y
14. @carlosble
eXtreme Programming
It's about VALUES:
●
Simplicity
●
Communication
●
Feedback
●
Courage → Honesty
- Book: Extreme Programming Explained: Embrace change
2nd edition, Kent Beck
15. @carlosble
The TDD Mantra
RED:
Before writing the code,
express your intent in
the form of a test Books:
> Test Driven –
Lasse Koskela
GREEN:
Don't 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. @carlosble
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
ODE
I TY C
UAL
HI GH Q
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. @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
19. @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
20. @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
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. @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. @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
24. @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.
25. @carlosble
Related presentations
http://www.slideshare.net/carlosblejurado/best-practicesjsria
http://www.slideshare.net/carlosble/charla-tdd-uji-032010
http://www.slideshare.net/carlosblejurado/bdd-workshop-for-javascript-developers