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
잘 일하는 조직 만들기
Search
Seungmin 마량
February 04, 2022
Programming
0
75
잘 일하는 조직 만들기
2022년 2월 4일 NFT 뱅크에서 진행한 사내 조직문화 세미나의 발표자료 입니다. 실험과 테크스펙 문화에 대해 다루었습니다.
Seungmin 마량
February 04, 2022
Tweet
Share
More Decks by Seungmin 마량
See All by Seungmin 마량
대규모 트래픽을 처리하는 프론트 개발자의 전략
maryang
0
140
프론트엔드 개발자가 실제로 하는 일과 취업 준비 팁
maryang
0
34
나는 좋은 상사일까? 팀장은 꼭 봐야 할 리더십 공식
maryang
0
43
미국 교환학생 가서 무료 홈스테이 살면서 인턴 취업하기
maryang
0
130
글로벌 기업은 홈페이지에서 영어 번역을 어떻게 제공할까?
maryang
0
70
30살에 구글이 인정한 개발자가 될 수 있었던 공부법
maryang
0
170
좋은 서비스를 만들기 위한 제품팀 문화 이해하기
maryang
0
71
사수 없는 주니어 개발자가 성장하는 방법
maryang
0
390
개발자가 성과를 증명하는 방법 | A/B테스트 기반 개발
maryang
0
140
Other Decks in Programming
See All in Programming
TFLintカスタムプラグインで始める Terraformコード品質管理
bells17
2
210
XP, Testing and ninja testing ZOZ5
m_seki
3
720
品質ワークショップをやってみた
nealle
0
530
monorepo の Go テストをはやくした〜い!~最小の依存解決への道のり~ / faster-testing-of-monorepos
convto
2
500
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
230
詳しくない分野でのVibe Codingで困ったことと学び/vibe-coding-in-unfamiliar-area
shibayu36
3
5.1k
iOSエンジニア向けの英語学習アプリを作る!
yukawashouhei
0
200
3年ぶりにコードを書いた元CTOが Claude Codeと30分でMVPを作った話
maikokojima
0
550
実践Claude Code:20の失敗から学ぶAIペアプログラミング
takedatakashi
15
5.7k
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
1
310
Things You Thought You Didn’t Need To Care About That Have a Big Impact On Your Job
hollycummins
0
230
はじめてのDSPy - 言語モデルを『プロンプト』ではなく『プログラミング』するための仕組み
masahiro_nishimi
3
630
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Optimizing for Happiness
mojombo
379
70k
KATA
mclloyd
PRO
32
15k
The Illustrated Children's Guide to Kubernetes
chrisshort
49
51k
Testing 201, or: Great Expectations
jmmastey
45
7.7k
Building a Scalable Design System with Sketch
lauravandoore
463
33k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.6k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
34
2.3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Optimising Largest Contentful Paint
csswizardry
37
3.5k
Transcript
थ ߛ࢟۞٘ UX Strategy Product Manager GDE Android Korea
[email protected]
ੜ ੌೞח ઑ ٜ݅ӝ
ח… ߛ࢟۞٘ UX Strategy Product Manager Google Developers Experts
Android Korea
ੜੌೞח䞾ۆ
ੜੌೞח䞾ۆ بݽܰѷযਃ
ੜੌೞח䞾ۆ ઁ҃উী䞵 ݻо䟉Ҋࢤпೞחߑ䢲ٜਸҕਬ
प పझಖ
01 प
ӝദ -> ٣ੋ -> ѐߊ ࢲ࠺झ ѐߊ ࢎ
ӝദ -> ٣ੋ -> ѐߊ ࢲ࠺झ ѐߊ ࢎ
ࢲ࠺झ ѐߊ ࢎ ӝഥ ߊҷ -> оࢸ ࢸ -> प
-> ؘఠ ࠙ࢳ -> Ѿ
ࢲ࠺झ ѐߊ ࢎ ӝഥ ߊҷ -> оࢸ ࢸ -> प
-> ؘఠ ࠙ࢳ -> Ѿ
ࢲ࠺झ ѐߊ… ӏݽо ח ࢲ࠺झח ޖ Ҋ ѐࢶ೧ঠ ೞח ঌӝ
য۵णפ. Ӓېࢲ ؘఠܳ ࠁҊ ੋࢎܳ য ӝദ ഛبܳ ֫ৈঠ פ. ӏݽо ח ࢲ࠺झח ݅ٚ ӝמ ࢎਊо ਗೞח Ѫੋ ঌӝ য۵णפ. Ӓېࢲ पਵ۽ ࢎਊ ೯زਸ ஏೞҊ ഛܫ ֫ Ѿਸ ೧ঠ פ. ӏݽо ח ઑ ইޖܻ о ҙ જইب ݽٚ Ѫਸ Ѿೡ ࣻ হणפ. Ӓېࢲ ࣁࠗ ب ഛೠ ࢎѾਸ ೡ ࣻ ب۾ प೧ঠ פ.
0CTFSWBCJMJUZ 'FBUVSF'MBH &YQFSJNFOU
Observability
ؘఠܳ যڌѱ ݽਸ ࣻ ਸө ӝഥ ߊҷ -> оࢸ ࢸ
-> प -> ؘఠ ࠙ࢳ -> Ѿ ۽Ӧ (߮ ѐߊ)
۽Ӧۆ ࢎਊ ೯زਸ ӝ۾ ۽Ӧ೧ঠ ࢎਊ ೯ز ࠙ࢳ оמ
ࢎਊ ೯زۆ ࢎਊо ࢲ࠺झীࢲ ೞח ݽٚ ೯ز ചݶز, ܼ, ߑޙ,
ਖ਼ઓ, Ѿઁ, ஶబஎ ࢤࢿ ١
ࢎਊ ೯زۆ ࢎਊо ࢲ࠺झীࢲ ೞח ݽٚ ೯ز ࢎਊ ೯زਸ ࠙ࢳ
оמೠ ഋక۽ ೞݶ, ߮
߮ ѐߊ ࢎ ߮ -> ٘ बӝ
߮ ೞӝ ߮ -> ٘ बӝ ஏೞ۰ח ࢎਊ ೯زਸ
߮ ҳࢿ ചݶ ೯ز ఋ߁ য٣ীࢲ ೯زೞחо যڃ ೯زਸ ೞחо
ઁ ۽Ӧਸ ೡ Ѫੋо ܴ ചݶ, ೯ز, ఋ߁ਸ ೞա ܴਵ۽ അ ࣘࢿ э ೯زযب ܳ ࣻ ח ࢎਊ / ߮ ࢚ടਸ അ
߮ द No, ചݶ ࢎਊ ೯زҗ ఋ߁ ܴ ࣘࢿܴ
/ ч 1 ചݶ ੑ enter__assets_home 2 - زӝച ࢿҕ success__sync_assets 3 ٘୶ୌ ࢚ಿ ܼ click__product_card ܴ: id / ч: ࢚ಿ ই٣ ч द: 3425, 1829 ܴ: company / ч: ӝҙ ܴ ч द: नೠ٘, Ҵ٘ 4 ݽٚ ചݶ জ द ನӒۄ٘ ചݶ 0ѐীࢲ 1ѐо غח द open_app ܴ: os ч द: android, ios, web
߮ ؘఠ ࣠ೞӝ ߮ -> ٘ बӝ ߮ ߊࢤ
द ؘఠ ࣠
߮ ؘఠܳ ऺח ۖಬ
binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${houseLiveData.value.contact}")) ) }
fun logEvent(event: EventDefinition) { firebaseAnalytics.logEvent(event.eventName, Bundle()) amplitude.logEvent(event.eventName) } ߮ ٘ बӝ
binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${houseLiveData.value.contact}")) ) }
fun logEvent(event: EventDefinition) { firebaseAnalytics.logEvent(event.eventName, Bundle()) amplitude.logEvent(event.eventName) } ߮ ٘ बӝ ߡౡ ܼ द ߮ ࣠
binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${houseLiveData.value.contact}")) ) }
fun logEvent(event: EventDefinition) { firebaseAnalytics.logEvent(event.eventName, Bundle()) amplitude.logEvent(event.eventName) } ߮ ٘ बӝ Firebase, Amplitudeী ߮ ࣠
߮ ؘఠ ࣻೞӝ ೠ ߮о ߊࢤೞݶ, ब ٘о زೞݶ, ߮
ؘఠо ऺੑפ Firebase
ݽٚ ࢎਊ ೯زਸ ஏೡ ࣻח হ যڃ ߮ ؘఠܳ ࣻೡө?
2о ߮۽ ࢎਊ ೯ز ࠗ࠙ਸ ঌ ࣻ णפ Enter Click
Enter ߮ যڌѱ ҳഅೡө Base ചݶ ېझী ߮ ٘ ੑ
ചݶ߹۽ ߮ ܴ ചݶ ੑ ߮
Enter ߮ ٘ class BaseActivity : Activity() { protected open
var enterEvent: EventDefinition? = null override fun onResume() { super.onResume() if (enterEvent != null) { analyticsManager.logEvent(enterEvent!!) } } } class UploadTypeActivity : BaseActivity() { override var enterEvent: EventDefinition? = EnterEventDefinitions.uploadType() } class HouseListActivity : BaseActivity() { override var enterEvent: EventDefinition? = EnterEventDefinitions.houseList() }
Enter ߮ ٘ class BaseActivity : Activity() { protected open
var enterEvent: EventDefinition? = null override fun onResume() { super.onResume() if (enterEvent != null) { analyticsManager.logEvent(enterEvent!!) } } } class UploadTypeActivity : BaseActivity() { override var enterEvent: EventDefinition? = EnterEventDefinitions.uploadType() } class HouseListActivity : BaseActivity() { override var enterEvent: EventDefinition? = EnterEventDefinitions.houseList() } ചݶੑ ࢤݺӝী ߮ ٘ ੑ
Enter ߮ ٘ class BaseActivity : Activity() { protected open
var enterEvent: EventDefinition? = null override fun onResume() { super.onResume() if (enterEvent != null) { analyticsManager.logEvent(enterEvent!!) } } } class UploadTypeActivity : BaseActivity() { override var enterEvent: EventDefinition? = EnterEventDefinitions.uploadType() } class HouseListActivity : BaseActivity() { override var enterEvent: EventDefinition? = EnterEventDefinitions.houseList() } ചݶ݃ ܴ
Click ߮ যڌѱ ҳഅೡө UI ஹನքܳ ־ܰח ߮ Click Listenerী
߮ ٘ ੑ
binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${houseLiveData.value.contact}")) ) }
Click ߮ ٘
binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${houseLiveData.value.contact}")) ) }
ߡౡ ܼ द ߮ ࣠ Click ߮ ٘
Active User(AU) ӝળ ߮ ࢲ࠺झ ೨ब ߮ ‘জਸ ࢎਊೞҊ ח
ਬ’ܳ ౸ױೡ ࣻ ח ೯زਸ ೧ঠ פ. ࢲ࠺झо ਃೞѱ ࢤпೞח ೨ब ࢎਊ ೯زਸ ೧ঠ פ. ࢲ࠺झ ਃ ܳ ೞח ߮ܳ ೧ঠ פ
Active User(AU) ӝળ ߮ द झېद ചݶਸ ੑೞݶ AU۽ ನೣೠ
۽Ӓੋ റ ക ചݶী ੑೞݶ AU۽ ನೣೠ যڃ ചݶٚ ನӒۄ٘۽ ৢۄয়ݶ AU۽ ನೣೠ
ࢲ࠺झ ೨ब ߮ द ழݠझ ࢲ࠺झ۽ Ѿઁ ೯زਸ ਃ ߮۽
ஏೠ SNS۽ ஶబஎ ࢤࢿ ೯زਸ ਃ ߮۽ ஏೠ ࠗز ѐ ࢲ࠺झ۽ ࠗز োۅ ೯زਸ ਃ ߮۽ ஏೠ
ࢸ҅ೞҊ ѐߊೞৈ ߮ ؘఠܳ ऺও ߮ ؘఠܳ ࠙ࢳ೧ࢲ ࢲ࠺झ ੋࢎܳ
যࠇद
߮ ߊࢤ ࣻܳ ࠁח AU ࠙ࢳ enter - DAU 10݅ݺ
, 3݅ݺ Ѥъ ചݶী ٜযৡ user property - Ѥъ ചݶী ٜযয়ח 3݅ݺ 2݅ݺ ѤъѨ োز غয click - Ѥъ ചݶী ٜযয়ח 3݅ݺ , 1ୌݺ ߡౡਸ ׂ۞ ѤъѨ োزਸ दبೠ
AU ର द
߮ ߊࢤ ࣻܳ ࠁח AU ࠙ࢳ enter - DAU 10݅ݺ
, 3݅ݺ Ѥъ ചݶী ٜযৡ user property - Ѥъ ചݶী ٜযয়ח 3݅ݺ 2݅ݺ ѤъѨ োز غয click - Ѥъ ചݶী ٜযয়ח 3݅ݺ , 1ୌݺ ߡౡਸ ׂ۞ ѤъѨ োزਸ दبೠ Ѥъ ӝמ ਬ 30%о ࠁҊ, Ӓ 66%о োزغয োزغয ঋ ࢎਊ 10%о োزਸ दبೠ
ౠ ೯ز റ ੌ दр ٍ جইয়ח ܻబ࣌ ࠙ࢳ
োزਸ दب೮؍ ࢎۈ दبೞ ঋও؍ ࢎۈࠁ (Click) 7ੌ ղ জਸ ߑޙೞח ࠺ਯ (open_app) 10% ֫
ܻబ࣌ ର द
ౠ ೯ز റ ੌ दр ٍ جইয়ח ܻబ࣌ ࠙ࢳ
োزਸ दب೮؍ ࢎۈ दبೞ ঋও؍ ࢎۈࠁ (Click) 7ੌ ղ জਸ ߑޙೞח ࠺ਯ (open_app) 10% ֫ োزਸ औѱ दبೡ ࣻ ب۾ ѐࢶ೧ঠѷ
ױ҅߹۽ ఎܫਸ ࠁח ഐ ࠙ࢳ ഥਗоੑਸ ਤ೧ Ѣঠೞח 3ѐ ചݶ
ࠄੋੋૐਸ ೞח 2ߣ૩ ചݶীࢲ ఎ ݆
ഐ ର द
ഥਗоੑਸ ਤ೧ Ѣঠೞח 3ѐ ചݶ ࠄੋੋૐਸ ೞח 2ߣ૩ ചݶীࢲ
ఎ ݆ ࠄੋੋૐਸ औѱ ೡ ࣻ ب۾ ѐࢶ೧ঠѷ ױ҅߹۽ ఎܫਸ ࠁח ഐ ࠙ࢳ
ӝמՙܻ ਃ ࠺Ү জ AU AUח
80%, о҅ࠗ AUח 60%, زର AUח 10% ֢റח AUо ծ ঋ݅, ܻబ࣌ ݽٚ ӝמ ઁੌ ծ
ӝמ ࠺Ү ର द
ӝמՙܻ ਃ ࠺Ү জ AU AUח
80%, о҅ࠗ AUח 60%, زର AUח 10% ֢റח AUо ծ ঋ݅, ܻబ࣌ ݽٚ ӝמ ઁੌ ծ زର৬ ֢റח ࢲ࠺झ ਃ ӝמ ইפ
Feature Flag
߸҃ਸ द ߈ ߸҃ ҳഅ թ ঋই ഐജࢿਸ Ҋ۰ೞ
ঋইب ؽ ਬোೠ ࢲ࠺झۆ
߸҃ਸ द ߈ ߸҃ ҳഅ թ ঋই ഐജࢿਸ Ҋ۰ೞ
ঋইب ؽ ݽ߄ੌ ਬোೞ ঋ
ਬোೠ ࢲߡ۽ࠗఠ чਸ ߉ই৬ ഝਊೞ ݽ߄ੌ ਬোೞѱ ٜ݅ӝ Feature Flag
ࢲߡ۽ࠗఠ чਸ ߉ই৬ ഝਊ ࢲߡীࢲ чਸ ߸҃ೞݶ ߄۽ ਊ Feature
Flagۆ
Firebase Remote Config Remote Configী чਸ ೞҊ জীࢲ ਗѺਵ۽ ࢎਊ
ӝמ on / off Feature Flag ഝਊب
private fun setContactButton() { if (RemoteConfig.getBoolean(ConfigVariable.MoveContactButtonBottomToFloating)) { binding.contactButton.visibility = View.GONE
binding.contactButtonFab.visibility = View.VISIBLE } else { binding.contactButton.visibility = View.VISIBLE binding.contactButtonFab.visibility = View.GONE } } Feature Flag۽ ӝמ ఃҊ Սӝ
private fun setContactButton() { if (RemoteConfig.getBoolean(ConfigVariable.MoveContactButtonBottomToFloating)) { binding.contactButton.visibility = View.GONE
binding.contactButtonFab.visibility = View.VISIBLE } else { binding.contactButton.visibility = View.VISIBLE binding.contactButtonFab.visibility = View.GONE } } Feature Flag۽ ӝמ ఃҊ Սӝ
Experiment
ࢲ࠺झ ޖ જҊ ѐࢶ ਃೠ ؘఠܳ ా೧ ण оמೠ ࢲ࠺झ
߮ܳ ੜ ѐߊ೧ࢲ Observabilityо ֫ ࢲ࠺झ
ӝמਸ ߓನೞ؊פ о ৢۋযਃ زदী ܲ ӝמب ߓನೞחؘ ޖ ܳ
ৢܽѦөਃ?
زदী ݆ Ѫ ߸҃غח ݽ߄ੌ ࢲ࠺झ ղ স ೱبܳ ঌ۰ݶ
प ਃ ղ স ೱبо ҾӘ೧ਃ
प স ೱبܳ Ѩૐ : https://blog.banksalad.com/tech
A/B పझ ܻо ܙ प ߑߨ Aܳ ߓನೞҊ ӝઓ ӝמҗ
࠺Ү A,Bܳ ೣԋ ߓನೞҊ ࠺Ү
A/B పझ : https://blog.banksalad.com/tech
ࢎਊ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ܰѱ ҳഅ Ӓܛ߹۽ ؘఠܳ ࠙ࢳ
স ೱبܳ ഛ ঌӝਤೠ प ҳഅ
पਸ ҙܻೞח प ۖಬ
ࢎਊ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ܰѱ ҳഅ Ӓܛ߹۽ ؘఠܳ ࠙ࢳ
স ೱبܳ ഛ ঌӝਤೠ प ҳഅ
ઑҵ vs पҵ (Control vs Treatment) ࢎਊ Ӓܛ ա־ӝ
ઑҵ, पҵ ա־ӝ যڃ ઑѤਵ۽ ա־חо ݻݺঀ ա־חо
प ࢚ ےؒ যڃ ઑѤਵ۽ ա־חо
ࢎਊ ݻ%ܳ प ࢚ਸ ೡ Ѫੋо ݻݺঀ ա־חо
प ࢚ 50%о पҵ ݻݺঀ ա־חо ࢎਊ 100%
50%о पҵ ࢎਊ 50% 25%о पҵ
Firebaseীࢲ ࢎਊ Ӓܛ ա־ӝ
ࢎਊ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ܰѱ ҳഅ Ӓܛ߹۽ ؘఠܳ ࠙ࢳ
স ೱبܳ ഛ ঌӝਤೠ प ҳഅ
Feature Flagী ٮۄ ӝמ ࠙ӝೞҊ ߮ ѐߊ Ӓܛ߹۽ ӝמਸ ܰѱ
ҳഅ
Firebaseীࢲ प Feature Flag ٜ݅ӝ
private fun setContactButton() { if (RemoteConfig.getBoolean(ConfigVariable.MoveContactButtonBottomToFloating)) { binding.contactButton.visibility = View.GONE
binding.contactButtonFab.visibility = View.VISIBLE } else { binding.contactButton.visibility = View.VISIBLE binding.contactButtonFab.visibility = View.GONE } } Feature Flagী ٮۄ ӝמ ࠙ӝ
private fun setContactButton() { if (RemoteConfig.getBoolean(ConfigVariable.MoveContactButtonBottomToFloating)) { binding.contactButton.visibility = View.GONE
binding.contactButtonFab.visibility = View.VISIBLE } else { binding.contactButton.visibility = View.VISIBLE binding.contactButtonFab.visibility = View.GONE } } Feature Flagী ٮۄ ӝמ ࠙ӝ
Feature Flagী ٮۄ ߮ ѐߊ binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail())
startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${contact}")) ) } binding.contactButtonFab.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${contact}")) ) }
Feature Flagী ٮۄ ߮ ѐߊ binding.contactButton.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail())
startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${contact}")) ) } binding.contactButtonFab.setOnClickListener { view -> analyticsManager.logEvent(EventDefinitions.clickContactHouseDetail()) startActivity( Intent(Intent.ACTION_DIAL, Uri.parse("tel:${contact}")) ) } ೞա पীࢲ ࠙ӝغח ܲ ӝמٜীࢲ э ߮ܳ ࣠
ࢎਊ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ܰѱ ҳഅ Ӓܛ߹۽ ؘఠܳ ࠙ࢳ
স ೱبܳ ഛ ঌӝਤೠ प ҳഅ
Feature Flagী ٮۄ ߮ ؘఠ ࠙ࢳ Ӓܛ߹۽ ؘఠܳ ࠙ࢳ
݆ ߮ ؘఠ ޖਸ ࠺Үೡө प оࢸী ೞח Primary
Metric ೞա ܳ ࠺Ү Second Metric ଵҊ
प оࢸҗ Metric द оࢸ ಹद о҅ࠗ ࢸ ޙҳܳ ߸҃ೞ
ݶ, ࢸ ৮ܐࣻо ֫ই Ѫ. оࢸ ୶ୌచ ࢚ױ ߓցܳ ઁೞݶ ࢚ಿ ࣂ࣌ ਤ۽ ৢۄ৬, ࢚ಿ ܼࣻо ֫ই Ѫ. Primary Metric ࢸ ৮ܐ ࣻ Second Metric ࢸ ചݶ ߑޙ ࣻ Primary Metric ݽٚ ࢚ಿ ܼ ࣻ Second Metric ୶ୌచ ߑޙ ࣻ ٘, ࠁ, ١ п ࢚ಿٜ ܼ ࣻ प ࢸ҅ ױ҅ীࢲ оࢸҗ Metric
Firebaseীࢲ Primary Metric ١۾
Ӓܛ߹۽ ؘఠܳ ࠺Ү : https://blog.banksalad.com/tech
A/B పझ पۆ Aܳ ߓನೞҊ ӝઓ ӝמҗ ࠺Ү A,Bܳ ೣԋ
ߓನೞҊ ࠺Ү
Feature Flag + Observability ݽ߄ੌ ѐߊ ҙীࢲ पۆ
ܻ
ࢲ࠺झ ѐߊ ࢎ ӝഥ ߊҷ -> оࢸ ࢸ -> प
-> ؘఠ ࠙ࢳ -> Ѿ
ࢲ࠺झ ѐߊ ࢎ ӝഥ ߊҷ -> оࢸ ࢸ -> प
-> ؘఠ ࠙ࢳ -> Ѿ
ࢲ࠺झ ѐߊ… ӏݽо ח ࢲ࠺झח ޖ Ҋ ѐࢶ೧ঠ ೞח ঌӝ
য۵णפ. Ӓېࢲ ؘఠܳ ࠁҊ ੋࢎܳ য ӝദ ഛبܳ ֫ৈঠ פ. ӏݽо ח ࢲ࠺झח ݅ٚ ӝמ ࢎਊо ਗೞח Ѫੋ ঌӝ য۵णפ. Ӓېࢲ पਵ۽ ࢎਊ ೯زਸ ஏೞҊ ഛܫ ֫ Ѿਸ ೧ঠ פ. ӏݽо ח ઑ ইޖܻ о ҙ જইب ݽٚ Ѫਸ Ѿೡ ࣻ হणפ. Ӓېࢲ ࣁࠗ ب ഛೠ ࢎѾਸ ೡ ࣻ ب۾ प೧ঠ פ.
02 పझಖ
None
📝 ٬ೞӝীޙࢲܳࢿೞ䞶ਃ
ޙࢲ䤠ೡ ࠂبࢎ䥅ઁয 👫 )JTUPSZ 📖
None
ݽٚসޖীޙࢲоਵݶ ݽٚۄੋߓ҃ਸ୶ೡࣻ $PEF13+JSB5JDLFUޙࢲ
$PEF13+JSB5JDLFUޙࢲ
ޙࢲ䤠ೡ ࠂبࢎ䥅ઁয 👫 )JTUPSZ 📖
য䡣সޖੋо ਃড ৵ೞחо ߓ҃ য䡣䟽җܳ߄ۄࠁחо
ݾ ޖਸҊ۰ೞঋਸѪੋо ݾоইצѪ যڌѱӝࣿࢸ҅ܳೡѪੋо ҅ദ زܐܻ࠭
None
٬ࠗ࠙ ޙࢲী䞵ա
None
ӝദӝࣿࢸ҅࠼ਸ ܻח
ޙܳాೠ ഛपೠӝ۾ ࠺زӝழޭפா࣌ ழޭפா࣌࠺ਊх
ޙࢲ۽झషܻܳऺҊ ࠂبܳઁযೞ䞶ਃ
03 ݃ޖܻ
पਵ۽সоܳ 䟤ҙਵ۽ૐݺೞ䞶ਃ
ޙࢲ۽झషܻܳऺҊ ࠂبܳઁযೞ䞶ਃ
थ ߛ࢟۞٘ UX Strategy Product Manager GDE Android Korea
[email protected]
хࢎפ