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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Francisco Díaz
December 14, 2017
Programming
150
1
Share
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
30
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
170
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
運用エージェントは "作る" から "育てる" へ - 記憶と自己進化の3層設計パターン / self-evolving-agents-three-layer-agent-design
gawa
12
3.2k
権限チェックの一貫性を型で守る TypeScript による多層防御
mnch
4
930
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
130
AI Agent と正しく分析するための環境作り
yoshyum
3
630
AIエージェントと協働するCLI開発 — BunとOpenClawで学んだこと
yoshikouki
1
220
ReactとSvelteのその先、Ripple-TS / Beyond React and Svelte: Ripple-TS
ssssota
3
1.6k
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
210
tsserverとは何だったのか、これからどうなるのか
nowaki28
1
410
Migrations : C'est une question d'hygiène !
vinceamstoutz
0
2.4k
Old Dog, New Tricks: The Java 25 Reinvention - JNation
bazlur_rahman
0
130
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
2.9k
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
160
Featured
See All Featured
The Curious Case for Waylosing
cassininazir
1
360
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
3.2k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
430
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
WCS-LA-2024
lcolladotor
0
610
Google's AI Overviews - The New Search
badams
0
1k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Building Adaptive Systems
keathley
44
3k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
290
Paper Plane (Part 1)
katiecoart
PRO
0
8k
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?