  The Internet of Things (IoT) is emerging as the next big wave of digital
presence for billions of devices on the Internet. Smart Cities are practical
manifestation of IoT, with the goal of efficient, reliable and safe delivery of
city utilities like water, power and transport to residents, through their
intelligent management. A data-driven IoT Software Platform is essential for
realizing manageable and sustainable Smart Utilities, and for novel
applications to be developed upon them. Here, we propose such a
service-oriented software architecture to address two key operational
activities in a Smart Utility -- the IoT fabric for resource management, and
the data and application platform for decision making. Our design uses open web
standards and evolving network protocols, Cloud and edge resources, and
streaming Big Data platforms. We motivate our design requirements using the
smart water management domain; some of these requirements are unique to
developing nations. We also validate the architecture within a campus-scale IoT
testbed at the Indian Institute of Science (IISc), Bangalore, and present our
experiences. Our architecture is scalable to a township or city, while also
generalizable to other Smart Utility domains. Our experiences serves as a
template for other similar efforts, particularly in emerging markets, and
highlights the gaps and opportunities for a data-driven IoT Software
architecture for smart cities.
