  Bugs that are detected earlier during the development lifecycle are easier
and cheaper to fix, whereas bugs that are found during production are difficult
and expensive to address, and may have dire consequences. Type systems are
particularly effective at identifying and preventing bugs early in the
development lifecycle by causing invalid programs to result in build failure.
Liquid Types are more powerful than those found in mainstream programming
languages, allowing the detection of more classes of bugs. However, while
Liquid Types were proposed in 2008 with their integration in ML and
subsequently introduced in C (2012), Javascript(2012) and Haskell(2014) through
language extensions, they have yet to become widely adopted by mainstream
developers. This paper investigates how Liquid Types can be integrated in a
mainstream programming language, Java, by proposing a new design that aims to
lower the barrier to entry and adapts to problems that Java developers commonly
encounter at runtime. To promote accessibility, we conducted a series of
developer surveys to design the syntax of LiquidJava, our prototype. To
evaluate the prototype's usability, we conducted a user study of 30 Java
developers, concluding that users intend to use LiquidJava and that it helped
to find more bugs and debug faster.
