Most software development processes are promulgated by pundits who rely on their experience and intuition, like Agile, or they are an emergent behaviour of a development organisation or, most commonly, they are a mix of the two. They can seem perverse or inefficient, and suffer from incentive compatibility problems. Given the ever increasing size of the digital economy, the stakes are high: any, even modest, improvement in development processes could have substantial economic impact. In this talk, I motivate from a personal point of view, then describe how game theory is an excellent means to study development processes and suggest open problems where mechanism design might improve them.
Code mixes natural language in identifier names, comments, and stylistic choices (ordering and typesetting) with a formal language that defines a computation. The snippets in each language form a communication channel. Developers read both channels; a CPU processes only the formal channel. These two channels interact and constrain each other. The theory of dual channel constraints elucidates these interactions and points to their exploitation. One prominent application is probabilistic type inference. In an optionally typed language, developers can add type annotation to find local type errors and to provide signposts to their development environment to facilitate navigation, refactoring, completion, and documentation. Natural type inference (NTI) reformulates probabilistic type inference as an optimisation problem: it combines hard logical constraints from the formal channel with soft natural constraints from the natural channel to soundly infer types. Most work, including NTI, assumes the two channels are in sync. I will close with outlining work that solves problems that arise when they are not.