We describe software-engineering lessons we learned by building, deploying, and operating a large-scale distributed wildlife tracking system. The design started four years ago, the system has been operational for the past two years, but kept evolving during this time. The paper describes the structure of the system and then a series of interesting and well-documented lessons we learned. Most of the lessons surprised us, in spite of some of us being fairly experienced, some are not so surprising, but we felt that they are interesting enough to document here. Some of the lessons are particularly interesting because they are specific to computer systems built by computer scientists for collecting or processing experimental science data. These issues mostly revolve around the difficulty of building and maintaining complex systems in small teams in which junior members often leave well before the project is over.