Skip to content

Instantly share code, notes, and snippets.

@michaeljklein
Last active October 17, 2017 21:38
Show Gist options
  • Save michaeljklein/f6fd7f1312c9f3efcdd050b48e0c2037 to your computer and use it in GitHub Desktop.
Save michaeljklein/f6fd7f1312c9f3efcdd050b48e0c2037 to your computer and use it in GitHub Desktop.

https://techcrunch.com/2012/04/27/be-concise-the-top-questions-asked-at-a-y-combinator-interview/

Typical Y Combinator Interview Questions

So what are you working on?

I'm working on a general-purpose programming language, which I call "Flock"

Have you raised funding?

Not at all, I only need enough funding to live at the moment.

What makes new users try you?

Mostly interest in the ideas involved.

What competition do you fear most?

Attribution competition.

What’s the worst thing that has happened?

I lost my job, some weight, and a lot of control over my own life within a week. I literally shit my pants in exitement at one point.

Will you reincorporate as a US company?

Not any time soon.

What’s an impressive thing you have done?

Write the paper, which involves a tight-knit network of definitions, proofs, explanations and translations to other languages.

Where is the rocket science here?

The rocket science is in choosing the definitions. If a single definition clashes, it could bring down the whole language or lead to nuanced bugs down the road. I use category-theory, computer science, discrete mathematics, and a high level of internal organization to help with these decisions.

Why did you pick this idea to work on?

Because it's awesome to write your own programming language. It requires a well-rounded level of expertise in all of the involved fields while giving me a way to distill many of my favorite techniques into a cohesive whole.

Why do the reluctant users hold back?

Right now, I'm only beginning to translate and educate others in this language. Many users are intimidated by complex terms or are unwilling to risk time and effort on a language you can't program in today.

Who would you hire or how would you add to your team?

I'd hire technical consultants to check and improve upon my work.

  • A research assistant (grad-level CS)
  • General writing assistants to help write documentation
  • Very-high or very-low level developers: Coq, C, Rust, Haskell, etc
  • Someone to help me manage effort and time as this project scales

What problems/hurdles are you anticipating?

Flock needs friends to acheive its potential. Making, managing, and working with those friends is one of the biggest challenges in my mind.

Who is “the boss”?

I am, for the paper and this organization, since I know and understand it better than anyone else I know.

You are, when actually writing in Flock, since it's so versatile.

What is the next step with the product evolution?

At the moment, I'm mostly working on the paper and preparing for its release. Once the paper is released, it'll be time scale up connections, implementations, documentation, etc. as quickly as possible.

What obstacles will you face and how will you overcome them?

My biggest obstacle is communication.

I need to communicate with those who would use or be interested in Flock and get enough people excited about the language to create momentum.

Who needs what you’re making?

(More backend than frontend) Programmers, Software architects, and anyone who's trying to scale patterns in software.

How does your product work in more detail?

The paper defines a categorical model, which is topologically equivalent to a hypercube. I then translate the categorical model to many other languages:

  • Type theory
  • Computer science
  • Discrete mathematics, including combinatorics and discrete probability
  • Statistical thermodynamics, etc

And finally, I define a full set of semantics that allows you to use this model as a programming language.

What are you going to do next?

Scale

What do you understand that others don’t?

I understand very abstract and specific patterns on a variety of levels, and can easily translate both problems and solutions between levels of abstraction and languages in my field.

Where do new users come from?

  • SEO work which I've already begun
  • My personal network
  • The readers of the paper
  • And I'm building up the resources required to make it easier, more attractive, and more useful to share information regarding Flock.

How big an opportunity is there?

It's hard to tell at this point, but I think it can really scale.

Six months from now, what’s going to be your biggest problem?

Managing what I've scaled and holding momentum after the initial release.

What’s the funniest thing that has happened to you?

To me? Realizing that the only way I kept working on Flock at the beginning was by fooling myself.

Hmm, there's also the bungee jumping story..

Tell us something surprising you have done?

This.

Who are your competitors?

Other languages and their designers.

What’s new about what you make?

This sounds really similar to another question, already asked, so I'll expand a little bit.

I'm a bit red-green color-blind. This means that I'm less able to recognize the difference between red and green. My understanding of the evolutionary reason for color-blindness is to tune-out distractions when recognizing camoflage. I like to think of this as pattern-matching, and it's where I've dedicated most of my efforts to understand the world. Flock is my favorite tool for working with patterns.

How many users do you have?

Fewer than 10

Why isn’t someone already doing this?

The rocket science mentioned above, the current state of programming language design.

What are the top things users want?

Better explanations and to have seen it scale already.

What is your burn rate?

Extremely low.

How do you know customers need what you’re making?

  • From my programming and mathematics experience
  • From my own use of Flock
  • From my experience doing back-end programming at Authorea
  • From my experience with academia
  • From the feedback I've gotten

What domain expertise do you have?

I'm fluent in Haskell, and close to fluent in Ruby.

I'm fluent in regular expressions, the kind of language, not all of the fancy features such as backreferences.

I can read and write (just not particularly quickly or at a particularly advanced level): C, C++, LaTeX, Bash, Javascript, Python, (Very) basic x86 and ARM assembly.

I'm a proficient Vim user, including efficient (re)organization, bulk text reformatting, simple movement, regular expressions, etc.

I'm proficient in linux dev-ops, including relatively small (100k's of users, 1-10mil DB columns) production-level applications of: Docker, Rails, Haskell, Ruby, Bash, Cron, etc.

  • Also: debian package management, monitoring systems, self-maintaining server architectures

Testing/Debugging:

  • I'm very good with unit and property-based (e.g. QuickCheck) testing and debugging
  • Primarily in Ruby, Haskell, and Python

Profiling/Benchmarking/Optimization:

  • I'm proficient in profiling, benchmarking, and optimizing unit and property-based (e.g. Ruby classes, Haskell typeclasses, Lambda patterns) code
  • Primarily in Ruby, C, Haskell, and Python
  • Including Valgrind, Haskell's criterion, using linear/multiple regression and other statistical models to measure the performance of code.

FFI

  • I'm experienced with FFI between, Python-C, Haskell-C, Ruby-C, Bash-C
  • Including: Haskell Pandoc <-> C <-> Ruby, production-ready bindings

Haskell: Core, Primitives, Type-checking, much of what's between (e.g. Code -> Types -> Primitives -> Implementation)

The Haskell language extensions I'm familiar with:

  • BangPatterns
  • DeriveDataTypeable
  • DisambiguateRecordFields
  • EmptyDataDecls
  • ExistentialQuantification
  • ExplicitForALl
  • FlexibleContexts
  • FlexibleInstances
  • ForeignFunctionInterface
  • FunctionalDependencies
  • GADTs
  • GeneralizedNewtypeDeriving
  • Generics
  • ImplicitParams
  • ImpredicativeTypes
  • IncoherentInstances
  • KindSignatures
  • MagicHash
  • MultiParamTypeClasses
  • OverlappingInstances
  • OverloadedStrings
  • QuasiQuotes
  • Rank2Types
  • RankNTypes
  • ScopedTypeVariables
  • StandaloneDeriving
  • TemplateHaskell
  • TypeFamilies
  • TypeOperators
  • TypeSynonymInstances
  • UnboxedTuples
  • UndecidableInstances

I'm pretty proficient in the category theory that is most often applied to programming, finite discrete algebra, finite digraph theory, finite group theory, and streaming computational methods.

I'm good with software architecture (it's my favorite part of most development), but I have much to learn and Flock is my largest project. I begin to have significant difficulty with solo-developed production-level architecture around the 100k user mark. I can and have done much more with help and feedback from others. I have experience designing, developing, testing, and refining software in small teams up to around 100k users and have been successful.

I'm proficient in basic computer security, including authentication, cryptographic methods, blockchains, and architecture. I'm also good at finding security holes on an architectural level, through fuzzing (both existing tools and custom fuzzers), and when reading code.

I'm a proficient solo traveller, including means of transportation, orientation and communication in an unfamiliar context, safety and security.

I'm a good tutor and teacher of programming and mathematical concepts, techniques, with experience explaining on levels from 1st grade to PhD, and teaching from birth to somewhere in graduate (PhD) school.

I'm proficient in operating with low to mid-level amounts of resources: from broke and alone to small comfortable groups (around 20 or fewer significantly-active members).

I can cold-sell (cold-calling, cold-conversation, etc) and I can warm-sell (friends, family, coworkers, employers, etc).

I'm proficient in utilizing small amounts of rapport to effectively comminucate.

What, exactly, makes you different from existing options?

All of the above. Flock is capable of being highly constrained and smoothly relaxed. No other language provides such direct access to so much.

Of course I'm biased, so maybe don't take that at face value: the paper isn't out yet.

What’s the conversion rate?

Too early.

What systems have you hacked?

Not sure what you mean, since I "hack" everything I'm interested in. I hack myself, I hack kiwis, I hack Haskell, what are you looking for?

Who would use your product?

Hopefully, you.

How will customers and/or users find out about you?

The paper is the biggest way, this is another way. I'm also:

  • Making connections and getting people excited directly
  • Making it easier to share
  • Making it more attractive to share
  • SEO-hacking

Why did your team get together?

Ask my parents.

In what ways are you resourceful?

See above.

What is your distribution strategy?

Twofold:

  • Free, open-source software using git, Github, etc.
  • Free, open-source publication(s) using markdown, LaTeX, etc.
  • At some point, I'll hand out copies at events, to friends, etc

What has surprised you about user behaviour?

Every time I explain Flock in-depth to someone, something about how they understand it surprises me. One of the earliest surprises was how many people thought it could be big. I never thought of it as big at the beginning since stuff you're used to seems smaller.

What part of your project are you going to build first?

The paper.

What resistance will they have to trying you and how will you overcome it?

The biggest pieces of resistance I've seen so far are:

  • It's not proven, complete enough
  • It's too good to be true (meaning I'm not clearly communicating the costs involved)
  • It doesn't make sense

How are you understanding customer needs?

Talk to people, do research, I'm my biggest customer: repeat, refine, expand

What’s the biggest mistake you have made?

It's the same mistake, over and over again: overestimating my progress.

  • That's why I started strict and why I'm starting to share more progress: I'm more confident that it works.

Who might become competitors?

Anyone capbable of designing and implementing a programming language. I'm proof that almost anyone could become a competitor. But that doesn't bother me since Flock is free from the get-go and I believe one of the best ways to compete with Flock is to read and understand Flock. But by the time you've done that, you can pretty much write Flock fluently so why bother with something else?

What do you understand about your users?

They're finite but don't want to be limited by being finite when programming. Flock lets you be succinct, correct, and productive in ways that we can measure with counting numbers.

For example, someone may understand "16-strength correctness", just like "16-strength paladin": I have almost no idea what it means, but I'm pretty sure "15-strength" is easier and less powerful than "16-strength". Flock has this type of parameter out-of-the-box.

What is your user growth rate?

Too early.

What are the key things about your field that outsiders don’t understand?

Read the paper.

Who is going to be your first paying customer?

The first paying customer is my wife, who is spending her time, energy, and money to support this project through supporting and encouraging me.

If your startup succeeds, what additional areas might you be able to expand into?

Off the top of my head:

  • More "artsy": Music production and analysis
  • More commercial: Hardware design and programming

Who would be your next hire?

After success? No idea.

How do you know people want this?

See above.

Would you relocate to Silicon Valley?

Sure

What do you know about this space/product others don’t know?

See above.

How much money could you make per year?

TBD

How long can you go before funding?

Forever, but that'd be more work.

How will you make money?

Programming, consulting, teaching, etc

Will your team stick at this?

I'm my team, so as long as it still looks good to me!

How much does customer acquisition cost?

Minutes to months

How did your team meet?

Hah

Who in your team does what?

I do everything. The nice thing is that all of the work is balanced perfectly between members of the team.

How are you meeting customers?

Local meetups, academic conferences, daily life.

Currently expanding though: lambdamichael (at) gmail

How many users are paying?

Two: me and my wife

How is your product different?

See above.

Are you open to changing your idea?

The core, no way. Anything else, sure!

How do we know your team will stick together?

I try to avoid getting hit by vehicles, falling from extreme heights, that sort of thing. So far, it's gone pretty well.

What is your growth like?

Right now most growth looks like a quick spike followed by a long tail.

If I can get the quick spikes to trigger other quick spikes, the long tails should compound for steady long-term growth.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment