SlideShare a Scribd company logo
Engineering Efficiency
powered by Go
Huy Do
Software Engineering
LINE corp
reflect.TypeOf(Who)
me := &Who {

Name: "Huy Do",

Location: "Tokyo",

Org: "LINE corp",

Misc: "admin member of Ruby
Vietnam group, and co-founded
kipalog.com",

}
Engineering Efficiency
How to measure
effectiveness?
effectiveness
=
Time Saved
“We massively underinvest
in this kind of work”
Peter Seibel, Twitter
How many
dedicated engineers?
http://www.gigamonkeys.com/flowers/
Engineering
Efficiency at LINE
We do anything,
except raising your
salary!
• Building in-house deploy system
• Building scale in-house monitoring system
• Building / maintaining OSS CI/Repository
system
Building many tools help our colleague
engineers focus in write code efficiently
https://linecorp.com/ja/career/position/786
Introduce Lineflow
LINE
Development process
https://engineering.linecorp.com/ja/blog/detail/38
1. Make JIRA ticket
2. Create local branch follow TICKET-ID-feature
3. Make a Pull Request to upstream/develop
4. Release to Beta server
5. Request QA team to confirm feature
6. Cherry-pick changes to local TICKET-ID-release branch
7. Make a Pull Request to upstream/release
8. Increase artifact version
9. Create RC branch and release to staging server and confirm 

integration
10. Release to Canary server and confirm no big problem
11. Release to all server
12. Close JIRA ticket
We need to follow many
conventions as well
12 steps needed to release
your code production!!!!
it's just too much!!!!!
But Process is needed
• Procedures protect us from stepping
on another's toes
• Conventions help us inspect problem
Problem 1:
Manual copy paste is just painful
Engineering Efficiency in LINE
design CLI tool for
process automation
Lineflow goals
• Extensible
• Safe
• Reflect the domain
• Zero dependency
Engineering Efficiency in LINE
Engineering Efficiency in LINE
Engineering Efficiency in LINE
Some concepts
• flow
• Set of commands belong to
same domain
• subcommand
• Represent single execute step
workflow
subcommand
Implementation
type Command struct {
Execute func(cmd *Command, args *Args)
Flag flag.FlagSet
...
Name string
parent *Command
childs map[string]*Command
}
type Args struct {
Executable string
Command string
ProgramPath string
Params []string
...
}
type Executor struct {
commands map[string]*Command
execute func(cmds []*cmd.Cmd) error
}
We wrote simple wrapper 

for os/exec
func (r *Executor) Execute() ExecError {
....
cmd := Find(args.Command)
if cmd != nil {
return r.Call(cmd, args)
}
printUsage()
return newExecError(errors.New("command not exist"))
}
func (r *Executor) Find(name string) *Command {
return r.commands[name]
}
Problem 2:
I just forgot what I should do next
Command suggestion
Engineering Efficiency in LINE
Implementation
Define flow order
flowSpec.Next(cmdCommit).
Next(cmdDevelopPullRequest).
Next(cmdReleaseCherryPick).
Next(cmdReleasePullRequest).
Next(cmdVersionCommit).
Next(cmdRcBranchCreate).
Next(cmdReleaseShareTemplate).
Next(cmdNewDevelopBranch)
DSL to define depedency graph
type FlowSpec struct {
root *CmdNode
last *CmdNode
}
func (f *FlowSpec) NextOf(cmd *c.Command)
(*c.Command, error)
func (f *FlowSpec) Next(cmd *c.Command)
*FlowSpec
struct
called FlowSpec
to implement
the DSL
type CmdNode struct {
value *c.Command
next *CmdNode
prev *CmdNode
}
func (n *CmdNode) Prev(cn *CmdNode) {
n.prev = cn
cn.next = n
}
func (n *CmdNode) Next(cn *CmdNode) {
n.next = cn
cn.prev = n
}
func (n *CmdNode) GetNext() *CmdNode {
return n.next
}
func (n *CmdNode) GetPrev() *CmdNode {
return n.prev
}
Simple double
linked list
What is the last thing
that you've done ?
• Branch name as unique identity
• Just store every executed command
in ~/.lineflow_history (same idea
with .bash_history)
type History struct {
fileLocation string
commands []*c.Command
}
func (h *History) Register(cs ...*c.Command)
func (h *History) Save(cmd *c.Command, meta string) error
func (h *History) traverseFromTop(
f func(*c.Command, string) bool) error
func (h *History) Last(parent *c.Command, meta string)
*c.Command
func (h *History) toHistoryString(cmd *c.Command) string
func (h *History) historyStringToCommand(s string)
(*c.Command, string, error)
So basically that's how
lineflow is built
Thanks to https://github.com/studio3104
lineflow + peco
Lineflow impact
• Saved time
• 500 engineer * 5 minutes ~ 41 hours (per day)
• Make foundation for further internal
tool intergration
• Help new comer get used to the process
What we learned
• Golang is bad at writing DSL
• Hard to develop plugin-style due static
code loader (compare to ruby)
How golang survive in
Java shop
• IntelliJ Golang plugin is great (we can
work with both java/golang in same editor)
• go tools ecosystem is great (debugger,
benchmark, test tool..)
• Distribute golang code is great (we love binary)
How to build good
internal product
• MUST invest resource (there are no
good short-term solution)
• API, and good API
• You need to be an evangelist for your
own product, or no body will use yours :(
Thank you

More Related Content

PDF
GOCON Autumn (Story of our own Monitoring Agent in golang)
PDF
Fast and Reliable Swift APIs with gRPC
PPT
C++basics
PPT
Server Side JavaScript: Ajax.org O3.
PPT
Server Side JavaScript: Ajax.org O3
PPTX
Roslyn: el futuro de C#
PDF
Build Great Networked APIs with Swift, OpenAPI, and gRPC
PPT
Flux: A Language for Programming High-Performance Servers
GOCON Autumn (Story of our own Monitoring Agent in golang)
Fast and Reliable Swift APIs with gRPC
C++basics
Server Side JavaScript: Ajax.org O3.
Server Side JavaScript: Ajax.org O3
Roslyn: el futuro de C#
Build Great Networked APIs with Swift, OpenAPI, and gRPC
Flux: A Language for Programming High-Performance Servers

What's hot (20)

PDF
From C++ to JS via Emscripten
PDF
Asynchronous IO in Rust - Enrico Risa - Codemotion Rome 2017
PDF
A la découverte de TypeScript
PDF
.Net passé, présent et futur
PPTX
C# 6 and 7 and Futures 20180607
PDF
202107 - Orion introduction - COSCUP
PDF
Flowex - Railway Flow-Based Programming with Elixir GenStage.
PDF
Intro to elixir metaprogramming
PDF
Back to the future: Isomorphic javascript applications
PDF
SubScript: A Process Algebra extension progress and perspectives
PDF
TypeScript for Java Developers
PDF
The Future starts with a Promise
PPTX
Asynkron programmering i Visual Studio 11
PDF
C# and vb
PDF
Flow-based programming with Elixir
PPTX
Get together on getting more out of typescript & angular 2
PDF
JavaScript Execution Context
PPTX
Dynamic in C# 4.0
PPTX
Getting started with typescript
PPTX
2CPP02 - C++ Primer
From C++ to JS via Emscripten
Asynchronous IO in Rust - Enrico Risa - Codemotion Rome 2017
A la découverte de TypeScript
.Net passé, présent et futur
C# 6 and 7 and Futures 20180607
202107 - Orion introduction - COSCUP
Flowex - Railway Flow-Based Programming with Elixir GenStage.
Intro to elixir metaprogramming
Back to the future: Isomorphic javascript applications
SubScript: A Process Algebra extension progress and perspectives
TypeScript for Java Developers
The Future starts with a Promise
Asynkron programmering i Visual Studio 11
C# and vb
Flow-based programming with Elixir
Get together on getting more out of typescript & angular 2
JavaScript Execution Context
Dynamic in C# 4.0
Getting started with typescript
2CPP02 - C++ Primer
Ad

Similar to Engineering Efficiency in LINE (9)

PDF
On the Edge Systems Administration with Golang
PDF
Using Flow-based programming to write tools and workflows for Scientific Comp...
PDF
FireWorks workflow software
PDF
Luigi presentation NYC Data Science
PPTX
betterCode Workshop: Effizientes DevOps-Tooling mit Go
PDF
Virtual lab - Routing in Mobile Adhoc Networks
PPTX
Risking Everything with Akka Streams
PPTX
Go Is Your Next Language — Sergii Shapoval
PDF
Kubernetes debug like a pro
On the Edge Systems Administration with Golang
Using Flow-based programming to write tools and workflows for Scientific Comp...
FireWorks workflow software
Luigi presentation NYC Data Science
betterCode Workshop: Effizientes DevOps-Tooling mit Go
Virtual lab - Routing in Mobile Adhoc Networks
Risking Everything with Akka Streams
Go Is Your Next Language — Sergii Shapoval
Kubernetes debug like a pro
Ad

More from Huy Do (16)

PDF
Distributed Tracing, from internal SAAS insights
PDF
Write on memory TSDB database (gocon tokyo autumn 2018)
PDF
Some note about GC algorithm
PDF
Story Writing Byte Serializer in Golang
PDF
Akka と Typeの話
PDF
[Scalameetup]spark shuffle
PDF
DI in ruby
PDF
Itlc2015
PDF
Consistent Hashingの小ネタ
PDF
Thriftを用いた分散型のNyancatを作ってきた
PDF
NoSQL for great good [hanoi.rb talk]
PDF
実践Akka
PDF
CA15卒勉強会 メタプログラミングについて
PDF
Making CLI app in ruby
PDF
CacheとRailsの簡単まとめ
PDF
[Htmlday]present
Distributed Tracing, from internal SAAS insights
Write on memory TSDB database (gocon tokyo autumn 2018)
Some note about GC algorithm
Story Writing Byte Serializer in Golang
Akka と Typeの話
[Scalameetup]spark shuffle
DI in ruby
Itlc2015
Consistent Hashingの小ネタ
Thriftを用いた分散型のNyancatを作ってきた
NoSQL for great good [hanoi.rb talk]
実践Akka
CA15卒勉強会 メタプログラミングについて
Making CLI app in ruby
CacheとRailsの簡単まとめ
[Htmlday]present

Recently uploaded (20)

PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PPTX
ai tools demonstartion for schools and inter college
PDF
How to Choose the Right IT Partner for Your Business in Malaysia
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Reimagine Home Health with the Power of Agentic AI​
PDF
top salesforce developer skills in 2025.pdf
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
PPTX
L1 - Introduction to python Backend.pptx
PDF
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PPTX
VVF-Customer-Presentation2025-Ver1.9.pptx
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PDF
AI in Product Development-omnex systems
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
medical staffing services at VALiNTRY
PPTX
Odoo POS Development Services by CandidRoot Solutions
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Wondershare Filmora 15 Crack With Activation Key [2025
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
ai tools demonstartion for schools and inter college
How to Choose the Right IT Partner for Your Business in Malaysia
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Reimagine Home Health with the Power of Agentic AI​
top salesforce developer skills in 2025.pdf
Design an Analysis of Algorithms I-SECS-1021-03
Lecture 3: Operating Systems Introduction to Computer Hardware Systems
L1 - Introduction to python Backend.pptx
EN-Survey-Report-SAP-LeanIX-EA-Insights-2025.pdf
CHAPTER 2 - PM Management and IT Context
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
VVF-Customer-Presentation2025-Ver1.9.pptx
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
AI in Product Development-omnex systems
Upgrade and Innovation Strategies for SAP ERP Customers
medical staffing services at VALiNTRY
Odoo POS Development Services by CandidRoot Solutions

Engineering Efficiency in LINE