About

avatar

Seonghyeon Kim

Software Engineer
Karrot
Intro

I primarily develop using TypeScript, React, and Node.js. While I enjoy learning new technologies, I strive to learn and use technologies that are appropriate for solving defined problems.

I prefer working under designed problems and hypotheses. I hope to grow value within the cycle of validating hypotheses based on data and experiencing both success and failure. Even if not grandiose, I ultimately want to create good value for the world and live a life sharing bright and positive energy.

Experiences
Karrot Sep 2022 ~ Present
Position
Software Engineer, Frontend (Sep 2022 ~ Jan 2024)
(Lead) Software Engineer, Frontend (Jan 2024 ~ Present)
Products
Small Business Ads Center, Professional Ads Center, Ads SDK, BFF
Tech Stack
typescript, react, relay, react-query, vanilla-extract, tailwindcss, node.js, fastify, graphql
Responsibilities

I'm leading frontend development for Karrot's advertising platform. I'm responsible for building advertising solutions for diverse customer segments from small businesses to professional advertisers. I participate in the entire process from initial product design to operations, and continuously work on establishing team technical standards and improving development productivity.

Key Projects
[BFF Error Logging and Alert Configuration Improvement]
Background
  • The GraphQL server was only counting cases with status 500 and sending alerts when exceeding a threshold.
  • Some communicating servers were responding with 400-level errors as 500-level errors.
  • Alerts inevitably occurred as traffic increased, and the team didn't take error alerts seriously.
Approach
  • Collected cases where servers returned 400-level errors as 500-level errors and requested improvements from the server team.
  • Error logs should converge to zero, and reviewed alert settings to check if warnings spike significantly above recent trends.
Result
  • Increased reliability of BFF-related error alerts sent to Slack.
  • Systematically established criteria for viewing and managing errors at each level.
  • Learned once again that unreliable error alerts are worse than having no error alerts.
[Lead Form Ad Product Addition]
Background
  • Advertisers were using outlink ads to collect customer information.
  • Users had to manually re-enter information already known by Karrot app when submitting customer information through outlinks.
  • This situation was negatively affecting ad conversion rates.
Approach
  • Developed a new ad product called lead forms that can collect customer information with prefilled data from Karrot's internal information.
Result
  • Advertisers can now use lead forms instead of outlinks for customer information collection.
  • Lead form ads recorded better conversion rates compared to existing outlink ads.
  • Considered how to manage code to maintain cohesion of funnel-related code, and wrote code using and referencing the use-funnel library.
[AI-based Ad Analysis Feature Development]
Background
  • Advertisers were entering budgets too small to even get bidding opportunities and couldn't spend their budgets.
  • Even when providing configuration and performance information, small business advertisers found it difficult to analyze.
  • There were internal discussions about whether AI could provide creative and diverse answers.
Approach
  • Developed features to analyze configuration values and performance metrics according to AI and internally defined rules.
  • Worked on writing and improving prompts to provide the most helpful answers to users when using AI.
  • Rather than just passing prompts to AI, utilized information from top advertisers in the same industry to provide performance analysis in the most effective direction on the platform.
  • Designed UX to make it as easy as possible to apply recommended actions from performance analysis.
Result
  • Achieved improvements in preventing small budget inputs that cause budget underspending by encouraging application of recommended actions through performance analysis.
  • Gained opportunities to learn prompt writing know-how while participating in prompt creation.
  • Since server responses came asynchronously, worked on solving this with UX, and strived to create optimal UX by properly handling loading and notifications.
[Small Business Ads Center Web and WebView Integration Project]
Background
  • The ads center for small businesses was previously developed and managed separately for web and webview.
  • With relatively more webview users, new features were developed primarily for webview, leaving the web product behind and creating spec mismatches.
Approach
  • To solve the spec gap problem, decided to write web and webview client code as a single codebase.
  • Worked with mobile-first design, and created responsive designs when special web designs were needed.
  • When logic differed between web and webview, managed two sets of code.
Result
  • Web and webview code became unified, and features were developed simultaneously for both platforms thereafter.
  • The codebase became bloated and complex by implementing responsive design and different runtime logic in one code, making management difficult.
  • Often compromised web usability by designing mobile-first despite clear differences in good user experience between web and webview.
  • Realized that even when managed in one codebase, some code inevitably needs to be duplicated, and some parts need to be separated to provide optimized experiences for each platform.
  • Regretted that the originally identified problem could have been solved differently through project management changes or common logic packages rather than simply merging into one codebase. Learned again that designing appropriate solutions based on deep understanding of background and problems is most important.
[Ad Creation Funnel Conversion Rate Improvement Experiment]
Background
  • There were many values to configure when creating ads in the small business ads center webview service, resulting in deep funnels with poor conversion rates at certain stages.
  • Since ad creation was the first step toward ad revenue, the team was considering how to improve this problem.
Approach
  • Developed an innovative one-page ad creation feature that dramatically reduced the previously deep funnel.
  • Composed the one-page with only essential features for ad creation and simplified the funnel by hiding detailed customization features in the back.
Result
  • While intuitively expecting better creation rates than the existing funnel, the result was actually lower creation rates.
  • Learned that reducing funnels doesn't always lead to better results. Learned that delivering information users need to know and inducing actions is more important than funnel depth.
Korea Credit Data Jan 2021 ~ Sep 2022
Position
Product Engineer
Products
CashNote, CashNote Market, CashNote Market Partner Center, MMP SDK
Tech Stack
typescript, react, next.js, tailwind, react-query, react-hook-form, react-testing-library, msw, jest, storybook, graphql, apollo-client
Responsibilities

Worked as a Product Engineer at Korea Credit Data, developing features for the CashNote service. For CashNote Market service, I was responsible for service design and overall frontend development.

Key Projects
[CashNote Market Development]
Background
  • Korea Credit Data was internally looking for other revenue sources.
  • A commerce development project was initiated to sell products to businesses using internal traffic.
Approach
  • Started working on customer-facing commerce webview and seller admin with 2 people.
  • Developed the home screen with Server Driven UI to allow operations staff to freely manage special exhibitions and catalogs.
Result
  • Revenue continuously increased, and CashNote was able to create a new business model beyond subscription fees.
  • Defined MVP well and progressively developed and added features rather than implementing everything at once.
  • Gained deeper understanding of rendering methods by extensively using Next.js.
  • Operated Next.js on internal infrastructure rather than Vercel. It was an opportunity to expand AWS infrastructure knowledge (ECS, Fargate, etc.).
Tpay Feb 2020 ~ Jan 2021
Position
Frontend Developer
Products
Merchant Management/Contract Admin
Tech Stack
typescript, react, styled-component, swr, react-hook-form
Responsibilities

Worked as a Frontend Developer at Tpay, developing merchant management admin and contract admin systems.

Key Projects
[Merchant Management Admin Logistics Part Refactoring]
Background
  • There were requests for improvements due to inconvenient use of the existing logistics admin.
  • Logistics/inventory services had to handle forms with numerous inputs, causing performance issues.
Approach
  • Worked on maintaining performance even with many inputs to ensure the admin didn't slow down.
  • Had to handle cases with over 100 data rows. Worked considering features like selecting multiple rows at once using Shift + Click.
Result
  • It was my first time handling many inputs while developing web apps with React, and it was an opportunity to think about and learn how to handle such problems.
StyleShare Apr 2019 ~ Feb 2020
Position
Frontend Developer
Products
StyleShare Web, StyleShare Search WebView
Tech Stack
typescript, react, next.js, styled-component
Responsibilities

Worked as a Frontend Developer at StyleShare, responsible for developing StyleShare web and StyleShare search webview.

Key Projects
[StyleShare Search WebView]
Background
  • Needed to separate search functionality from the native app for flexibility in rapid experimentation and improvement.
Approach
  • Implemented bridge communication with native app.
  • Developed webview-based search service to enable quick deployment and A/B testing.
Result
  • Gained my first experience with webview development.
  • Created an environment for frequent experimentation with feature deployment independent of native app releases.
[Web Store Renewal]
Background
  • Discussions were underway for redesigning the StyleShare store main home.
  • There were discussions about renewing with React instead of the jQuery-implemented code.
Approach
  • Decided to renew the page with new design and completely new codebase.
  • Since we couldn't develop all pages at once, built infrastructure considering gradual renewal by replacing specific routes and worked progressively one page at a time. (Load Balancer → NextJs or Flask Server)
Result
  • Created a starting point for gradual migration without significant resources.
  • It was my first project working with 3 FE developers after working alone. There were lessons learned from problems encountered while collaborating with colleagues.
  • Came to think that frontend developers who can meticulously check their own implementations are good colleagues to collaborate with.
Apartmentary Sep 2017 ~ Dec 2018
Position
Software Engineer
Products
Landing Page, Commerce Web, Commerce Back Office, Product Information Crawling Chrome Extension
Tech Stack
javascript, react, redux, nodejs, express, mongodb
Responsibilities

Worked as a Software Engineer at Apartmentary, responsible for developing commerce web, commerce back office, and product information crawling Chrome extension.

Key Projects
[Product Information Crawling Chrome Extension]
Background
  • There was a need to sell third-party products internally as a closed mall.
  • While we could implement commerce features internally, product registration processes were essential.
  • We couldn't get API integration or CSV data sharing support, and partners told us to directly copy content from their websites without additional support.
Approach
  • Developed a Chrome extension that activates on partner product detail pages, adding functionality to crawl information from websites with one click to populate our DB.
Result
  • Operations staff no longer needed to manually record information, creating a process for quickly registering products using the Chrome extension with minimal modifications.
  • The closed mall didn't succeed business-wise, so the project wasn't maintained long-term. Should have checked business viability through gradual development and deployment.
  • Gained experience in Chrome extension development, which was an opportunity to broaden the diversity of problem-solving approaches.
  • A limitation was that while initial DB loading was possible, I didn't consider continuously syncing changing product information.
Spoqa Dec 2015 ~ Aug 2017
Position
Brand Success Manager, Business Intelligence Developer
Products
Company-wide Data Dashboard Configuration
Tech Stack
python, flask, sql
Responsibilities

Worked as Brand Success Manager and Business Intelligence Developer at Spoqa, building a data-driven decision-making system.

Key Projects
[Company-wide Dashboard Creation]
Background
  • Decision-making based on intuition or experience was becoming a bottleneck for good decisions.
  • The importance of data visibility across all job functions emerged.
  • Non-tech roles had the problem of needing to go through developers to obtain data.
Approach
  • Created data dashboards using existing SaaS (Periscope) rather than developing data visualization products directly.
  • Provided relevant data to all company employees by proactively discovering ideas or responding to colleagues' requests. (SQL, external data source integration)
Result
  • Internal colleagues gained easy access to basic service metrics.
  • Regularly shared discovered data insights with executives.
  • It was a moment of profound realization that data visibility is truly important for good decision-making.
  • A limitation was failing to expand data visibility and accessibility beyond basic metrics for all job functions as initially intended.

Communities

Presentations

Lecture


Education

Kyung Hee University

  • (Mar 2010 ~ Feb 2016) Business Administration / Korean Language and Literature