Upgrade to Pro — share decks privately, control downloads, hide ads and more …

잘 일하는 조직 만들기

잘 일하는 조직 만들기

2022년 2월 4일 NFT 뱅크에서 진행한 사내 조직문화 세미나의 발표자료 입니다. 실험과 테크스펙 문화에 대해 다루었습니다.

Seungmin 마량

February 04, 2022
Tweet

More Decks by Seungmin 마량

Other Decks in Programming

Transcript

  1. ࢲ࠺झ ѐߊ਷… ӏݽо ੓ח ࢲ࠺झח ޖ঺੉ ੢੼੉Ҋ ѐࢶ೧ঠ ೞח૑ ঌӝ

    য۵णפ׮. Ӓېࢲ ؘ੉ఠܳ ࠁҊ ੋࢎ੉౟ܳ ঳য ӝദ ੿ഛبܳ ֫ৈঠ ೤פ׮. ӏݽо ੓ח ࢲ࠺झח ݅ٚ ӝמ੉ ࢎਊ੗о ਗೞח Ѫੋ૑ ঌӝ য۵णפ׮. Ӓېࢲ प೷ਵ۽ ࢎਊ੗ ೯زਸ ஏ੿ೞҊ ഛܫ੉ ֫਷ Ѿ੿ਸ ೧ঠ ೤פ׮. ӏݽо ੓ח ઑ૒਷ ইޖܻ ؀಴о ૒ҙ੉ જইب ݽٚ Ѫਸ Ѿ੿ೡ ࣻ হणפ׮. Ӓېࢲ ࣁࠗ ౱ب ੿ഛೠ ੄ࢎѾ੿ਸ ೡ ࣻ ੓ب۾ प೷೧ঠ ೤פ׮.
  2. ؘ੉ఠܳ যڌѱ ݽਸ ࣻ ੓ਸө ӝഥ ߊҷ -> оࢸ ࢸ੿

    -> प೷ -> ؘ੉ఠ ࠙ࢳ -> Ѿ੿ ۽Ӧ (੉߮౟ ѐߊ)
  3. ੉߮౟ ҳࢿ ചݶ ೯ز ఋ੉߁ য٣ীࢲ ೯زೞ৓חо যڃ ೯زਸ ೞ৓חо

    ঱ઁ ۽Ӧਸ ೡ Ѫੋо ੉ܴ ചݶ, ೯ز, ఋ੉߁ਸ ೞա੄ ੉ܴਵ۽ ಴അ ࣘࢿ э਷ ೯ز੉যب ׮ܳ ࣻ ੓ח ࢎਊ੗ / ੉߮౟ ࢚ടਸ ಴അ
  4. ੉߮౟ ੿੄ ৘द 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
  5. 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) } ੉߮౟ ௏٘ बӝ
  6. 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) } ੉߮౟ ௏٘ बӝ ߡౡ ௿ܼ द ੉߮౟ ੹࣠
  7. 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ী ੉߮౟ ੹࣠
  8. Enter ੉߮౟ যڌѱ ҳഅೡө Base ചݶ ௿ېझী ੉߮౟ ௏٘ ࢗੑ

    ചݶ߹۽ ੉߮౟ ੉ܴ ૑੿ ചݶ ૓ੑ ੉߮౟
  9. 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() }
  10. 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() } ചݶ૓ੑ ࢤݺ઱ӝী ੉߮౟ ௏٘ ࢗੑ
  11. 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() } ചݶ݃׮ ੉ܴ ੿੄
  12. Active User(AU) ӝળ ੉߮౟ ࢲ࠺झ ೨ब ੉߮౟ ‘জਸ ࢎਊೞҊ ੓ח

    ਬ੷੉׮’ܳ ౸ױೡ ࣻ ੓ח ೯زਸ ੿੄೧ঠ ೤פ׮. ࢲ࠺झо ઺ਃೞѱ ࢤпೞח ೨ब ࢎਊ੗ ೯زਸ ੿੄೧ঠ ೤פ׮. ࢲ࠺झ ઱ਃ ૑಴ܳ ؀಴ೞח ੉߮౟ܳ ੿೧ঠ ೤פ׮
  13. Active User(AU) ӝળ ੉߮౟ ৘द झ೒ېद ചݶਸ ૓ੑೞݶ AU۽ ನೣೠ׮

    ۽Ӓੋ റ ക ചݶী ૓ੑೞݶ AU۽ ನೣೠ׮ যڃ ചݶ੉ٚ ನӒۄ਍٘۽ ৢۄয়ݶ AU۽ ನೣೠ׮
  14. ࢲ࠺झ ೨ब ੉߮౟ ৘द ழݠझ ࢲ࠺झ੉޲۽ Ѿઁ ೯زਸ ઱ਃ ੉߮౟۽

    ஏ੿ೠ׮ SNS੉޲۽ ஶబஎ ࢤࢿ ೯زਸ ઱ਃ ੉߮౟۽ ஏ੿ೠ׮ ࠗز࢑ ઺ѐ ࢲ࠺झ੉޲۽ ࠗز࢑ োۅ ೯زਸ ઱ਃ ੉߮౟۽ ஏ੿ೠ׮
  15. ੉߮౟ ߊࢤ ࣻܳ ࠁח AU ࠙ࢳ enter - DAU 10݅ݺ

    ઺, 3݅ݺ੉ Ѥъ ചݶী ٜযৡ׮ user property - Ѥъ ചݶী ٜযয়ח 3݅ݺ ઺ 2݅ݺ੉ ѤъѨ૓ োز੉ غয੓׮ click - Ѥъ ചݶী ٜযয়ח 3݅ݺ ઺, 1ୌݺ੉ ߡౡਸ ׂ۞ ѤъѨ૓ োزਸ दبೠ׮
  16. ੉߮౟ ߊࢤ ࣻܳ ࠁח AU ࠙ࢳ enter - DAU 10݅ݺ

    ઺, 3݅ݺ੉ Ѥъ ചݶী ٜযৡ׮ user property - Ѥъ ചݶী ٜযয়ח 3݅ݺ ઺ 2݅ݺ੉ ѤъѨ૓ োز੉ غয੓׮ click - Ѥъ ചݶী ٜযয়ח 3݅ݺ ઺, 1ୌݺ੉ ߡౡਸ ׂ۞ ѤъѨ૓ োزਸ दبೠ׮ Ѥъ ӝמ਷ ਬ੷੄ 30%о ࠁҊ, Ӓ઺ 66%о োزغয ੓׮ োزغয੓૑ ঋ਷ ࢎਊ੗ ઺ 10%о োزਸ दبೠ׮
  17. ౠ੿ ೯ز ੉റ ੌ੿ दр ٍ جইয়ח ܻబ࣌ ࠙ࢳ ੗࢑

    োزਸ दب೮؍ ࢎۈ਷ दبೞ૑ ঋও؍ ࢎۈࠁ׮ (Click) 7ੌ ղ জਸ ੤ߑޙೞח ࠺ਯ੉ (open_app) 10% ֫׮
  18. ౠ੿ ೯ز ੉റ ੌ੿ दр ٍ جইয়ח ܻబ࣌ ࠙ࢳ ੗࢑

    োزਸ दب೮؍ ࢎۈ਷ दبೞ૑ ঋও؍ ࢎۈࠁ׮ (Click) 7ੌ ղ জਸ ੤ߑޙೞח ࠺ਯ੉ (open_app) 10% ֫׮ ੗࢑ োزਸ औѱ दبೡ ࣻ ੓ب۾ ѐࢶ೧ঠѷ׮
  19. ױ҅߹۽ ੉ఎܫਸ ࠁח ௏ഐ౟ ࠙ࢳ ഥਗоੑਸ ਤ೧ Ѣ୛ঠೞח 3ѐ੄ ചݶ

    ઺ ࠄੋੋૐਸ ೞח 2ߣ૩ ചݶীࢲ ੉ఎ੉ ݆׮
  20. ഥਗоੑਸ ਤ೧ Ѣ୛ঠೞח 3ѐ੄ ചݶ ઺ ࠄੋੋૐਸ ೞח 2ߣ૩ ചݶীࢲ

    ੉ఎ੉ ݆׮ ࠄੋੋૐਸ औѱ ೡ ࣻ ੓ب۾ ѐࢶ೧ঠѷ׮ ױ҅߹۽ ੉ఎܫਸ ࠁח ௏ഐ౟ ࠙ࢳ
  21. ӝמՙܻ ઱ਃ ૑಴ ࠺Ү জ ੹୓ AU ઺ ੗࢑ AUח

    80%, о҅ࠗ AUח 60%, ੗زର AUח 10%੉׮ ֢റח AUо ծ૑ ঋ૑݅, ܻబ࣌੉ ݽٚ ӝמ ઺ ઁੌ ծ׮
  22. ӝמՙܻ ઱ਃ ૑಴ ࠺Ү জ ੹୓ AU ઺ ੗࢑ AUח

    80%, о҅ࠗ AUח 60%, ੗زର AUח 10%੉׮ ֢റח AUо ծ૑ ঋ૑݅, ܻబ࣌੉ ݽٚ ӝמ ઺ ઁੌ ծ׮ ੗زର৬ ֢റח ࢲ࠺झ੄ ઱ਃ ӝמ੉ ইפ׮
  23. 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۽ ӝמ ఃҊ Սӝ
  24. 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۽ ӝמ ఃҊ Սӝ
  25. زदী ݆਷ Ѫ੉ ߸҃غח ݽ߄ੌ ࢲ࠺झ ղ ੘স੄ ৔ೱبܳ ঌ۰ݶ

    प೷੉ ೙ਃ ղ ੘স੄ ৔ೱبо ҾӘ೧ਃ
  26. ࢎਊ੗ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ׮ܰѱ ҳഅ Ӓܛ߹۽ ؘ੉ఠܳ ࠙ࢳ

    ੘স੄ ৔ೱبܳ ੿ഛ൤ ঌӝਤೠ प೷ ҳഅ
  27. ࢎਊ੗ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ׮ܰѱ ҳഅ Ӓܛ߹۽ ؘ੉ఠܳ ࠙ࢳ

    ੘স੄ ৔ೱبܳ ੿ഛ൤ ঌӝਤೠ प೷ ҳഅ
  28. प೷ ؀࢚ ઺ 50%о प೷ҵ ݻݺঀ ա־חо ࢎਊ੗ 100% ઺

    50%о प೷ҵ ࢎਊ੗ 50% ઺ 25%о प೷ҵ
  29. ࢎਊ੗ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ׮ܰѱ ҳഅ Ӓܛ߹۽ ؘ੉ఠܳ ࠙ࢳ

    ੘স੄ ৔ೱبܳ ੿ഛ൤ ঌӝਤೠ प೷ ҳഅ
  30. 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ী ٮۄ ӝמ ࠙ӝ
  31. 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ী ٮۄ ӝמ ࠙ӝ
  32. 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}")) ) }
  33. 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}")) ) } ೞա੄ प೷ীࢲ ࠙ӝغח ׮ܲ ӝמٜীࢲ э਷ ੉߮౟ܳ ੹࣠
  34. ࢎਊ੗ Ӓܛ ա־ӝ Ӓܛ߹۽ ӝמਸ ׮ܰѱ ҳഅ Ӓܛ߹۽ ؘ੉ఠܳ ࠙ࢳ

    ੘স੄ ৔ೱبܳ ੿ഛ൤ ঌӝਤೠ प೷ ҳഅ
  35. ݆਷ ੉߮౟ ؘ੉ఠ ઺ ޖ঺ਸ ࠺Үೡө प೷ оࢸী ؀਽ೞח Primary

    Metric ೞա੄ ૑಴ܳ ࠺Ү Second Metric਷ ଵҊ
  36. प೷ оࢸҗ Metric ৘द оࢸ ಹद੄ о҅ࠗ ৘࢑ࢸ੿ ޙҳܳ ߸҃ೞ

    ݶ, ৘࢑ࢸ੿ ৮ܐࣻо ֫ই૕ Ѫ੉׮. оࢸ ୶ୌచ ࢚ױ ߓցܳ ࢏ઁೞݶ ࢚ಿ ࣂ࣌੉ ਤ۽ ৢۄ৬, ࢚ಿ ௿ܼࣻо ֫ই૕ Ѫ੉׮. Primary Metric ৘࢑ࢸ੿ ৮ܐ ࣻ Second Metric ৘࢑ࢸ੿ ചݶ ߑޙ ࣻ Primary Metric ݽٚ ࢚ಿ ௿ܼ ࣻ ೤ Second Metric ୶ୌచ ߑޙ ࣻ ஠٘, ࠁ೷, ؀୹ ١ п ࢚ಿٜ੄ ௿ܼ ࣻ प೷ ࢸ҅ ױ҅ীࢲ оࢸҗ Metric ੿੄
  37. ࢲ࠺झ ѐߊ਷… ӏݽо ੓ח ࢲ࠺झח ޖ঺੉ ੢੼੉Ҋ ѐࢶ೧ঠ ೞח૑ ঌӝ

    য۵णפ׮. Ӓېࢲ ؘ੉ఠܳ ࠁҊ ੋࢎ੉౟ܳ ঳য ӝദ ੿ഛبܳ ֫ৈঠ ೤פ׮. ӏݽо ੓ח ࢲ࠺झח ݅ٚ ӝמ੉ ࢎਊ੗о ਗೞח Ѫੋ૑ ঌӝ য۵णפ׮. Ӓېࢲ प೷ਵ۽ ࢎਊ੗ ೯زਸ ஏ੿ೞҊ ഛܫ੉ ֫਷ Ѿ੿ਸ ೧ঠ ೤פ׮. ӏݽо ੓ח ઑ૒਷ ইޖܻ ؀಴о ૒ҙ੉ જইب ݽٚ Ѫਸ Ѿ੿ೡ ࣻ হणפ׮. Ӓېࢲ ࣁࠗ ౱ب ੿ഛೠ ੄ࢎѾ੿ਸ ೡ ࣻ ੓ب۾ प೷೧ঠ ೤פ׮.
  38. য䡣সޖੋо  ਃড  ৵ೞחо  ߓ҃  য䡣䟽җܳ߄ۄࠁחо 

    ݾ಴  ޖ঺ਸҊ۰ೞ૑ঋਸѪੋо  ݾ಴оইצѪ  যڌѱӝࣿࢸ҅ܳೡѪੋо  ҅ദ زܐ੄ܻ࠭