Choosing the right Backend Language - Go

We chose Go because it attracts the best talent & is most performant

decision table

Decision: Go

We chose Go as our backend programming language because: 

  • Attracts top talent, those wanting to be on the cutting edge & has a growth mindset

  • Performance is highest given concurrency, short warm-up time, fast compiling, etc which is important for a payments startup

  • The downsides of less libraries, harder to find experienced talent, and more mentioned below didn’t outweigh the pros. 

Alternatives: Typescript, Kotlin

All Options
  • High-Level - These languages are more human-readable and easier to program than low-level languages. They are designed to be user-oriented and make it easier to convert algorithms into program code. High-level languages are often used in mobile app development.

    • Compiled

      • Procedural: Pascal, Fortran

      • Object-Oriented: C#

      • Functional: F#

      • Multi-Paradigm: Go, Scala, Swift

    • Interpreted

      • Procedural: Perl

      • Object-Oriented: Kotlin, Java, Python, Ruby, JavaScript, TypeScript

      • Functional: Haskell, Erlang, Clojure

      • Multi-Paradigm: PHP

  • Low/Middle-Level Languages - These languages are closer to machine code and offer more control and efficiency than high-level languages. They are machine-oriented and express programs in terms of the machine operations needed to perform a task. Low-level languages are still needed for performance, such as for writing drivers for graphics cards. 

    • Compiled

      • Procedural: C

      • Object-Oriented: C++

      • Functional: Rust

Honing in on the top options
  • Typescript: TypeScript is a superset of JavaScript that was developed by Microsoft in 2012. It adds optional static typing (ie where you specify the data type of a variable when creating) and other features to JavaScript, making it more suitable for large-scale applications. TypeScript’s syntax is also similar to that of JavaScript, which makes it easy for JavaScript developers to learn. TypeScript also includes features such as interfaces and classes, which can make it easier to organize and maintain large codebases.

  • Kotlin: Kotlin is a cross-platform, statically typed, general-purpose high-level programming language with type inference. Kotlin is designed to interoperate fully with Java, and the JVM version of Kotlin's standard library depends on the Java Class Library, but type inference allows its syntax to be more concise. It’s used by 60% of professional Android developers.

  • Go: Go is a statically-typed, compiled language that is designed to be simple, efficient, and easy to use. It is often used for building high-performance network services and distributed systems. Go’s syntax is similar to that of C and C++, making it easy for developers who are familiar with those languages to pick up. Go also has built-in support for concurrency, which allows for easy parallelization of code and can lead to significant performance gains.

  • We blacklisted…

    • PHP - Way too old school

    • Clojure - Owned by Nubank, a competitor