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
43
잘 일하는 조직 만들기
2022년 2월 4일 NFT 뱅크에서 진행한 사내 조직문화 세미나의 발표자료 입니다. 실험과 테크스펙 문화에 대해 다루었습니다.
Seungmin 마량
February 04, 2022
Tweet
Share
More Decks by Seungmin 마량
See All by Seungmin 마량
개발자가 성과를 증명하는 방법 | A/B테스트 기반 개발
maryang
0
55
개발자가 동료의 업무효율을 높이는 방법 | 슬랙봇 개념부터 개발까지
maryang
0
69
성장하는 스타트업이 사용하는 협업툴과 커뮤니케이션 방법
maryang
0
68
YOLO로 행복한 탑티어 개발자 되기
maryang
0
200
초 레거시 JSP 프로젝트를 최신 Next.js 13으로 마이그레이션 하기
maryang
0
56
Firebase에서 최신 Next.js를 사용하여 웹사이트 운영하기
maryang
0
210
겨울이 왔습니다. 저는 퇴사합니다.
maryang
0
92
Modern Android Development
maryang
0
69
커뮤니티로 개인 브랜드 만들기
maryang
0
99
Other Decks in Programming
See All in Programming
今こそ始める、CDKコンストラクトライブラリ開発 ― 入門から実践まで
tmokmss
1
930
Jetpack for KMP
fornewid
1
290
Xcode 16のPreviewModifierと@Previewableを活用した効率的なプレビュー方法の考察
ojun9
2
160
生成AIをkintoneに連携してみた
hideg
0
230
みんなのオブザーバビリティプラットフォームを作ってるんだがパフォーマンスがやばい #mackerelio #srenext
ne_sachirou
0
370
Architectures with Lightweight Stores: New Rules and Options
manfredsteyer
PRO
0
100
20240706_CDKConf
takuyay0ne
0
1.2k
Polarsの成長: v0.14からv1.0までの変遷と今後の展望
zerebom
1
350
AWS CDKにおける「再利用性」を考える / aws-cdk-reusability
gotok365
6
1.3k
SRE チーム立ち上げ前に考えたこと・取り組んだこと / Considerations and Preparations Before Establishing an SRE Team
mackey0225
3
320
最古の関数型言語「Lisp」ことはじめ / lisp_in_kamiyama
uhooi
1
190
How to use Macrobenchmark
veronikapj
0
160
Featured
See All Featured
Unsuck your backbone
ammeep
666
57k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
44
4.7k
Fantastic passwords and where to find them - at NoRuKo
philnash
42
2.7k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
155
14k
What's in a price? How to price your products and services
michaelherold
239
11k
Into the Great Unknown - MozCon
thekraken
20
1.3k
Build your cross-platform service in a week with App Engine
jlugia
227
17k
Principles of Awesome APIs and How to Build Them.
keavy
124
16k
Designing with Data
zakiwarfel
96
5k
Optimising Largest Contentful Paint
csswizardry
18
2.6k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
17
1.5k
Making Projects Easy
brettharned
111
5.7k
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]
хࢎפ