Educational programming systems are booming. More systems of this kind have been published in the last few years than ever before, and interest in this area is growing. With the rise of programming as a school subject in ever-younger age groups, the importance of dedicated educational systems for programming education is increasing. In the past, professional environments were often used in programming teaching; with the shift to younger age groups, this is no longer tenable. New educational systems are currently being designed by a diverse group of developing teams, in industry, in academia, and by hobbyists. In this paper, the author describes his experiences with the design of three systems-Blue, BlueJ, and Greenfoot-and extract lessons that he hopes may be useful for designers of future systems. He also discusses current developments, and suggests an area of interest where future work might be proitable for many users: the combination of aspects from block-based and text-based programming. The author briely presents his work in this area-frame-based editing-and suggest possible future development options.In this paper we describe experiences with the design of a sequence of educational environments dating back more than 20 years. These systems are Blue (Kölling, 1999a), a programming language and development environment for teaching and learning object-oriented programming in a single, integrated system; its successor BlueJ (Kölling, Quig, Patterson, & Rosenberg, 2003), a similar environment using the Java Programming Language; and a third pedagogical system called Greenfoot (Kölling, 2010). Blue was relatively short-lived, but is of interest here because it heavily influenced the design of its successor, BlueJ. BlueJ and Greenfoot are both systems with significant user communities over a number of years (and still very much in use today), and have undergone many changes and adaptations since their first publication.In this paper we present a short history of these systems and discuss the goals and design rationale for each, their respective target groups and how these influenced design decisions, and their scope and application. Most importantly, we discuss lessons learnt from their use with actual users, and how those lessons shaped the design of the later systems, or later versions. We also discuss their relation to other educational programming systems, similarities, possible sequences of use, and future developments. The emphasis is not on providing a complete description of each system, but to identify the trends and goals at the time of their design, and how these have changed over time. Overall, we present some lessons we learnt along the way that we hope may be of use to designers of future systems.