Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Definiendo límites
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Francisco Díaz
December 14, 2017
Programming
150
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Definiendo límites
Presentado en iOS Love en Diciembre, 2017
Francisco Díaz
December 14, 2017
More Decks by Francisco Díaz
See All by Francisco Díaz
Inteligencia Artificial en PedidosYa - Una mirada pragmática
fdiaz
0
32
Working effectively at scale
fdiaz
4
320
I hate public speaking. So why do I keep doing it?
fdiaz
0
160
Si odio hablar en público. ¿Por qué lo sigo haciendo?
fdiaz
2
180
Move fast and keep your code quality
fdiaz
1
420
De qué hablo cuando hablo de trabajo remoto
fdiaz
1
180
Setting Boundaries
fdiaz
1
190
Swift Values
fdiaz
0
170
Sisifo o Cómo empezar de nuevo - y otra vez.
fdiaz
0
160
Other Decks in Programming
See All in Programming
jQueryをバージョンアップする前に使いたいjQuery Migrate
matsuo_atsushi
0
200
The Arts and Crafts of Work in the AI Era — Toward Mastery in Software Development
kuranuki
1
740
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.6k
Why Laravel apps break—Mastering the fundamentals to keep them maintainable
kentaroutakeda
1
350
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
150
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
170
New "Type" system on PicoRuby
pocke
1
790
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
100
Modding RubyKaigi for Myself
yui_knk
0
910
コンテキストの使い捨てをやめる — ビジネスルール駆動開発と miko —
ioki
0
180
AIエージェントの隔離技術の徹底比較
kawayu
0
470
Semantic Version 単位で戦略を柔軟に変えて、パッケージアップデートを自動化する
daitasu
0
200
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.2k
Faster Mobile Websites
deanohume
310
31k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
Ethics towards AI in product and experience design
skipperchong
2
310
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
300
A Soul's Torment
seathinner
6
2.9k
Thoughts on Productivity
jonyablonski
76
5.2k
The Cost Of JavaScript in 2023
addyosmani
55
10k
Digital Projects Gone Horribly Wrong (And the UX Pros Who Still Save the Day) - Dean Schuster
uxyall
0
1.7k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
The SEO Collaboration Effect
kristinabergwall1
1
480
Designing for Performance
lara
611
70k
Transcript
DEFINIENDO LIMITES
Francisco Díaz franciscodiaz.cl
None
3 desarrolladores iOS 28 horas 1 projecto
EVA BC programs provide vital support to anti- violence programs
and communities across BC. — Ending Violence Association ONG
None
Features: → Botón de pánico → Today widget → Knock
Botón de pánico: Al presionar el botón → Reportar
Today widget: Al presionar el botón → Reportar
Knock Al golpear el teléfono → Reportar
División de trabajo
Por feature → 1 Dev: Pantalla con botón en iOS
app → 1 Dev: Today widget → 1 Dev: Knock
None
None
None
❌ Una persona por "feature" ✅ Una persona por "capa"
None
Dependencias
Dependency inversion
protocol ReportCreator { func createReport() throws -> Report }
class SuccessReportCreator: ReportCreator { func createReport() throws -> Report {
return Report(id: "1", date: Date()) } } class ErrorReportCreator: ReportCreator { func createReport() throws -> Report { throw ReportCreationError.fakeError } }
class BigPanicButtonViewController: UIViewController { private let reportCreator: ReportCreator init(reportCreator: ReportCreator)
{ self.reportCreator = reportCreator } func didTapBigPanicButton() { do { // Handle Report let report = try reportCreator.createReport() } catch { // Handle error } } }
class BigPanicButtonViewController: UIViewController { init(reportCreator: ReportCreator = SuccessReport()) { ...
} }
¿Si el usuario no tiene internet?
None
None
None
None
protocol APIRequester { func createReport() throws -> JSON } protocol
SMSHandler { func sendSMS() throws -> SMS } protocol ConnectivityListener { var isConnected: Bool { get } }
Nada existe aún, pero podemos probar si funciona
Demo
Recap → Movernos independientemente → Reducir conflictos → No hay
necesidad de esperar para integrar código.
¿Preguntas?