January 15, 2024
9 min read

Lessons from Building at Scale: GitLab to Web3

My journey from GitLab's product team to leading Web3 infrastructure has taught me valuable lessons about building products that developers love.

Lessons from Building at Scale: GitLab to Web3

My journey from GitLab's product team to leading Web3 infrastructure has taught me valuable lessons about building products that developers love. Here are the key insights I've gathered along the way.

The GitLab Foundation: Building for Developers

When I joined GitLab, the company was already on an incredible trajectory. But what struck me wasn't just the growth—it was the obsessive focus on developer experience. GitLab understood something fundamental: developers are the ultimate product evangelists.

Lesson 1: Developer Experience is Product Strategy

At GitLab, every feature was evaluated through a developer lens:

  • Does this save developers time?
  • Does this reduce cognitive load?
  • Does this integrate seamlessly into existing workflows?

This wasn't just a nice-to-have—it was core business strategy. Developers who loved using GitLab became champions within their organizations, driving enterprise adoption from the bottom up.

# GitLab CI/CD pipeline - simple yet powerful
stages:
  - test
  - build
  - deploy

test:
  script:
    - npm test
  
deploy:
  script:
    - npm run deploy
  only:
    - main

The elegance was in the simplicity. Complex CI/CD workflows could be expressed in readable YAML that any developer could understand and modify.

Lesson 2: Dogfooding at Scale

GitLab used GitLab to build GitLab. This wasn't just philosophical—it was practical. Every pain point our users experienced, we experienced first. Every performance issue, every UI quirk, every integration challenge was felt by the team building the product.

This created a feedback loop that traditional enterprise software companies struggle to achieve:

  • Immediate pain: If we shipped broken features, we felt it immediately
  • Real usage patterns: We understood how the tool was actually used, not just how we thought it would be used
  • Authentic empathy: We genuinely understood developer frustrations because we lived them daily

Lesson 3: All-Remote Product Development

GitLab pioneered all-remote work at scale, but the implications for product development were profound:

Asynchronous Communication

  • Everything was documented by default
  • Decisions were transparent and searchable
  • Context wasn't lost when team members were offline

Global Perspective

  • Features were designed for diverse user bases from day one
  • Performance mattered because team members had varying internet speeds
  • Accessibility wasn't an afterthought—it was lived experience

Efficient Iteration

  • No conference room politics slowing decisions
  • Clear ownership and accountability
  • Faster cycle times from idea to implementation

Transitioning to Web3: New Challenges, Familiar Principles

Moving from GitLab to the Web3 space felt like time travel—back to the early days of developer tooling. The opportunities were massive, but so were the challenges.

Challenge 1: The Infrastructure Isn't Ready

Unlike GitLab, which could build on mature infrastructure (Linux, databases, web servers), Web3 development required building from first principles:

At GitLab:

# Deploy with confidence
cap production deploy

In Early Web3:

# Hope for the best
truffle compile
truffle migrate --network mainnet
# Pray the gas estimation is right
# Pray the network isn't congested
# Pray there are no bugs in production

This taught me that infrastructure maturity directly impacts product innovation. When developers spend 80% of their time fighting tools, they can't focus on building great products.

Challenge 2: Learning Curves vs. Adoption

GitLab succeeded partly because it built on familiar concepts. Git was already adopted, CI/CD was understood, and DevOps was an established practice.

Web3 required developers to learn entirely new paradigms:

  • Immutable deployment: No hotfixes, every bug is permanent
  • Gas optimization: Performance directly costs money
  • Economic incentives: Code must account for adversarial actors
  • Composability: Building with money legos requires new design patterns

The lesson: When introducing paradigm shifts, reduce friction everywhere else. If developers must learn new concepts, make the tooling impeccable.

Challenge 3: Community vs. Enterprise

GitLab mastered the transition from community tool to enterprise platform. Web3 presented the opposite challenge: building enterprise-grade infrastructure for a community-first ecosystem.

Key differences:

  • Open source by default: Every smart contract is public
  • Permissionless innovation: Anyone can build on your platform
  • Token-driven governance: Users become stakeholders
  • Composability requirements: Your protocol becomes infrastructure for others

The Chainlink Years: Building Web3 Infrastructure

At Chainlink, I applied GitLab lessons to Web3-specific challenges:

Principle 1: Documentation as Infrastructure

Great developer tools need great documentation. But in Web3, documentation is literally infrastructure—it enables permissionless innovation.

What we built:

// Before: Complex oracle integration
const oracle = new ethers.Contract(oracleAddress, oracleABI, signer);
const data = await oracle.latestRoundData();
const price = data.answer.div(10**8); // Don't forget to adjust decimals!

// After: Developer-friendly SDK
const price = await chainlink.getPrice("ETH/USD");

Key insights:

  • Examples > Explanations: Developers learn by doing, not reading
  • Interactive Documentation: Let developers experiment without setup
  • Version Control: Documentation must evolve with code
  • Community Contributions: Users often write the best tutorials

Principle 2: Backward Compatibility is a Feature

In Web3, breaking changes can literally break money. This forced us to think differently about versioning and upgrades.

Strategies we developed:

  • Semantic versioning: Clear communication about breaking changes
  • Deprecation windows: Give developers time to migrate
  • Multiple API versions: Support old and new simultaneously
  • Migration tooling: Automate upgrades where possible

This isn't just good practice—it's essential for ecosystem health. Developers invest significant time and money building on your platform. Respect that investment.

Principle 3: Performance is a Core Feature

In traditional software, performance issues cause user frustration. In Web3, they cause financial loss. This elevated performance from optimization to core feature.

What this meant:

  • Gas optimization: Every opcode mattered
  • Network reliability: Downtime costs users money
  • Predictable costs: Developers needed to budget for operations
  • Monitoring and alerts: Real-time visibility into system health

COTI: Applying Lessons to Privacy Infrastructure

At COTI, I'm applying everything learned from GitLab and Chainlink to the next frontier: privacy-preserving computation.

Building on Proven Patterns

Familiar Developer Experience:

// Looks like Solidity, works with privacy
contract PrivateAuction is COTIPrivate {
    mapping(address => uint256) private bids;
    
    function placeBid(uint256 amount) external private {
        require(amount > 0, "Invalid bid");
        bids[msg.sender] = amount;
    }
}

Progressive Disclosure:

  • Start with simple private computations
  • Add complexity as developers learn
  • Provide escape hatches for advanced use cases

Community-First Development

Open Source by Default:

  • SDK and tools are MIT licensed
  • Documentation is community-editable
  • Developer feedback drives roadmap priorities

Developer Advocacy:

  • Regular AMAs and office hours
  • Conference workshops and tutorials
  • Grant programs for ecosystem development

Key Lessons for Building Developer Tools

After years of building for developers across different ecosystems:

1. Start with Empathy

Understand developer workflows deeply:

  • Shadow real developers using existing tools
  • Map pain points in current processes
  • Identify jobs-to-be-done that aren't well served

2. Design for the 80%

Build for common use cases first:

  • Sensible defaults that work out of the box
  • Progressive complexity for advanced users
  • Clear upgrade paths as needs evolve

3. Optimize for Time-to-First-Success

The faster developers can achieve something meaningful, the more likely they are to continue:

  • One-command setup where possible
  • Working examples they can modify
  • Clear error messages when things go wrong

4. Build Community Infrastructure

Great tools enable community:

  • Forums and Discord for peer support
  • Contribution guidelines for community improvements
  • Regular events to maintain engagement

5. Measure What Matters

Track metrics that reflect actual developer success:

  • Time to first deployment
  • Weekly active developers
  • Community-generated content
  • Net Promoter Score among developers

The Future: What's Next?

The Web3 developer experience is rapidly improving, but significant opportunities remain:

Abstraction Layers

Account Abstraction: Hide wallet complexity from end users Intent-Based Programming: Describe desired outcomes, not implementation details Cross-Chain Abstraction: Unified APIs across different networks

AI-Powered Development

Code Generation: AI assistants that understand smart contract patterns Security Analysis: Automated vulnerability detection Gas Optimization: AI-powered efficiency suggestions

Enterprise Integration

Compliance Tooling: Built-in regulatory compliance checking Enterprise Identity: Integration with existing identity systems Traditional Database Integration: Hybrid on-chain/off-chain architectures

Conclusion: Building for the Long Term

Whether it's GitLab's CI/CD pipelines, Chainlink's oracle networks, or COTI's privacy infrastructure, the best developer tools share common characteristics:

  1. They solve real problems that developers face daily
  2. They integrate seamlessly into existing workflows
  3. They enable innovation beyond what their creators imagined
  4. They evolve with their communities rather than in isolation

The Web3 ecosystem is still early, but the foundations are being laid for the next generation of developer tools. The teams that focus on developer experience, learn from traditional software best practices, and engage deeply with their communities will build the infrastructure that powers the decentralized future.


Want to share your own lessons from building developer tools? Connect with me on Twitter or LinkedIn.

Thanks for reading!