HMH Developer Meet Ups


Just before the holidays, on December 20th, we hosted another HMH Developer Meetup at HMH’s new headquarters at 125 High Street in Boston as part of our ongoing series of free events designed to support the developer community.

We were thrilled to welcome our first guest speaker, Tom Corcoran, a Solution Architect from RedHat, as well as many developers and ed-tech enthusiasts from the Boston area.

Tom used the opportunity to share information about 3scale, an API management platform which RedHat acquired in June 2016 and that we happen to use as part of our API program.

As Tom noted and as we’ve experienced first hand here at HMH, when establishing a program to expose API resources to the developer community, companies need to make many considerations to ensure long term success, including version control, scalability, policies, testing, access control, throttling and lifecycle management.

Solutions like 3Scale, help to make those steps more manageable.

For more information on the projects and ideas coming out of HMH Labs, view these related blog posts:

If you’re interested in attending events like the HMH Labs Developer Meetup, or being a guest speaker, check out our HMH Developer Portal Events page. We’d love to see you at the next one!

—the Labs Team.

Welcoming a New Year.


Like many of you, we’re ringing in the new year with clear minds, fresh ideas, and new resolutions!

In 2016 we focused our attention on sharing resources with the developer community and on launching a beta version of the HMH Marketplace to fuel innovation in the larger education ecosystem.  We’re excited to continue to work with our counterparts across the company to continue to expand on those efforts in 2017.

This year, we will also be exploring new ways to enhance our digital core and fuel innovation within the company with an eye towards operational efficiency and core growth.

So we hope that each of you reading this is off to a fresh, wonderful start to the new year as well, and we look forward to working with you in the weeks and months ahead.

Happy New Year!

—the Labs Team.

Coding & Computer Science in the Classroom


With Computer Science Education Week beginning on December 5th, teachers are looking for new ways to promote coding, keyboarding, and other technology-related topics to their students. Hour of Code events will introduce millions of students to computer programming through short coding activities. These can spark curiosity in a child, while encouraging the critical thinking and problem solving skills developers use every day. While a great start, you know, as developers, that it takes hours upon hours to learn to code, and months and years to refine these skills. How can students get the fuel needed, in the form of support, resources, and access, to keep that spark of curiosity alive?

One study found that, in 2016, 93% of parents supported the use of school resources for computer science education, but that only 40% of principals stated their school offered a computer programming or coding class. While a growing trend, there are still many students without the opportunity to engage regularly with coding in their schools.

Luckily, game developers, edtech companies and teachers are helping to fill the gap. This focus on computer science has led to the development of many new games and apps, some created by companies and developers within this very developer community! Teachers are also filling the need for resources by creating supplemental lesson plans about keyboarding and using tech tools in the classroom. How fantastic to be able to start developing the skills and mindsets to code at any age, with products ranging from Pre-K to Grade 12.

Read HMH's The Spark blog to learn more about some of the Computer Science apps & resources available from providers on HMH Marketplace. They can be accessed or downloaded for use this week, or anytime throughout the year.

If you'd like to promote your educational app on HMH Marketplace, learn more about becoming a provider today.

When is Worse Better?: Approaches to Software


Last month we hosted our fifth HMH Developer Meetup, a free series of events for developers in the Boston area. Approximately 20 developers and engineers gathered at Houghton Mifflin Harcourt’s headquarters in Boston for an energizing evening of networking, learning, and discussion around the topic of “Software Philosophies.”

The Four Key Characteristics

HMH Labs Senior Engineer, Stephen Mattin, kicked off the evening with a short presentation on the characteristics of software development, and how they rank in prioritization based on the philosophy of, or overall approach to building software. The four key characteristics to consider are:

  • Completeness
  • Correctness
  • Simplicity
  • Consistency

Which of these is most important for building an intuitive interface? Which should be prioritized when considering implementation? Are different approaches better for some types of applications over others? These are the types of questions considered by attendees as they weighed the pros and cons of two philosophical approaches to development: “The Right Thing” and “Worse is Better.”

The Right Thing v. Worse is Better

Both approaches take a different stance on how the four key characteristics should be prioritized in order for an application to be developed and successfully meet the needs of users. This diagram shows the typical rankings of the characteristics according to each philosophy, in order from the most important to the least.

According to those who take the “Right Thing” approach to developing, an application’s correctness is more critical than any other characteristic. However, others, such as noted developer, Richard Gabriel, thought that this more academic approach to coding could often become too challenging to accomplish. Gabriel, like many others today, felt that from a usability perspective, a product must be simple and easy-to-use. Along with the prioritization of simplicity, and given the right context and circumstance, many following the “Worse Is Better” approach additionally believe that, at times, developers need to sacrifice certain characteristics – such as completeness – at the benefit of other characteristics, especially simplicity, so that products can be more user-friendly.

Ultimately, reviewing the “Right Thing” and the “Worse Is Better” approaches creates a fascinating framework for different ways that we can think about software and how our programs will thrive in real-world applications. The correct approach and balance of priorities for your projects likely depends on the type of application you’re building, the timeline, and your long-term roadmap. As a development team, it can be helpful for everyone to understand your team’s guiding philosophy – whether it be one of these or another - for the times you need to make those tough choices about how to build and implement new features and improvements in your application.

If you’d like to learn more about events like this, visit the HMH Developer Portal Events page. We’d love to see you at the next HMH Developer Meetup!

Recap of ISTE 2016


Last week we had a great time participating in the ISTE conference in Denver, CO! In addition to taking in all of the sites and sounds, we also had an opportunity to allow several developers and teachers using the HMH Marketplace to share their stories and experiences in a panel session called "Teachers, Tech and the Sharing Economy”. Moderated by Claudia Reuter, the panel included —Sonja Delafosse and Robyn Hrivnatz from Microsoft, Erica Colon from Nitty Gritty Science, James Locke from Spritz, Sherry Mitchell, a teacher from West Haven, CT and newcomer to the Marketplace, as well as Conall Ryan from Muzzy Lane.

Interested in learning more about how to take your application to the next level, and participate in the HMH Marketplace? Visit https://marketplace.hmhco.com/seller/profiles/new to learn more and get started.

TechCrunch Disrupt NY


We recently sponsored TechCrunch Disrupt NY in Brooklyn’s Red Hook neighborhood. The dual event consisted of a Hackathon weekend on May 7-8th, followed by the three-day Disrupt conference the next week.

The excitement kicked off with developers and engineers descending from all over to participate in the 24-hour hacking endurance challenge. Members of tour team  were on hand to assist those using the APIs available in the HMH Developer Portal. During the hackathon, we challenged developers to build applications that could help transform learning, both inside and outside of the classroom. People were encouraged to use multiple APIs from any of the ten Sponsors involved. Overall, ten competing teams used HMH’s APIs, and of those ten teams, five won prizes from the other TechCrunch sponsors.

HMH awarded $5,000 to the team that created Schoop.space (pronounced ‘scoop’), a prototype demonstrating a new way for parents to understand what their kids are learning in school. Built in Python, the application utilized HMH’s Identity, Document, and Tag APIs. The winning team also used the APIs of some of the other sponsors in their application, including Radix, Cisco and IBM Watson.

We were also glad to stay on for the Disrupt conference.  Disrupt featured existing and new technologies from all industries, with HMH being the largest learning company present. Check out pictures and videos from the event.

The Door is Open


We just launched HMH Marketplace (beta) to support teachers who are looking for resources beyond what we provide to complement existing programs and inspire curiosity in their learners. Teachers are working hard to integrate technology into their classrooms, and in many cases have multiple systems to access and use.

In order to best support teachers and help them make the most of their time, HMH is making space for all of us to work together. The HMH Developer Portal was launched in 2015 to expose HMH’s APIs and with the goal of providing additional opportunities to enhance interoperability and provide more seamless user experiences. HMH Marketplace adds the ability for developers working with our APIs to share their applications with our customers.

Many developers are already involved. For example, game developer Muzzy Lane used HMH's API to enhance their prototype “Feed the Fox” game, built in collaboration with partner Knewton.

We welcome new developers to use our API resources, learn more about HMH and the recent launch or sign up to create a profile of their own on HMH Marketplace.

Building v3 of the HMH API for Better Developer Experience


At HMH, we always try to improve the developer experience within our portal. This process of continuous improvement will hit another milestone in the coming weeks with the release of V3 of our API Program.

You may have read our past articles discussing Version 1 of our Identity service, which was based on the SIF Association and attempted to map a REST-ful interface on top of a specification that was intended for another purpose. The SIF spec was built as a data-interchange format and the model really does not lend itself well to a modern web API. We recognized that there were opportunities for improvement and, in September, we announced V2 of our beta API program. V2 was inspired by the greatly simplified design of SIFxPress. The changes made using the API easier so developers could focus on the hard, essential problem of building great applications.

After seeing an opportunity for improvement, we recently worked on refactoring the JSON model for our APIs and implemented various design patterns to provide a better developer experience and improve overall maintainability and performance of the API calls.

Client applications often need multiple views of the same model. For example, a student listing page may need student id, first name and last name. But a student detail view page may need additional data including address, school, score, teacher and class information to render the page. It’s not efficient to send data that the client doesn’t need or to make additional API calls to get related data about the student.

This previous method introduced ‘chatty calls,’ which causes performance degradation on the client side. An example of chatty call is making two API calls to get student and course rather than including the course in the student model.

Introducing a Simple Design Pattern

Recently, Facebook introduced GraphQL and Netflix introduced Falcor to address this issue. Both libraries allow the client to ask for the data it needs. At HMH, we introduced a simple design pattern to address this issue without the need for any third party libraries. The design pattern is called Facet and Include. A facet represents a view of the model. Every model will have a summary facet and a detail facet. Models can have custom facets, as well.

A summary facet will include commonly used fields like id, name, etc. A detail facet could include all the fields in model with child models.

Clients can request the facet by sending the “facet” query param. Clients can also request to include the child models by sending an “include” query param.

Let’s take a look at some code samples to understand this design pattern.

Student summary facet:

{
    "id": "",
    "last_name" : "",
    "first_name" : "",
    "middle_name" : "",
    "grade": "",
    "email": "",
    "gender": "",
}

Student detail facet:

{
    "id": "",
    "last_name" : "",
    "first_name" : "",
    "middle_name" : "",
    "grade": "",
    "email": "",
    "gender": "",
    "district": {
      "id": "",
      "name": "",
      "state": ""
    },
    "school": {
      "id": "",
      "name": ""
    },
    "addresses": [
      {
        "id": "",
        "type": "",
        "street": "",
        "city": "",
        "state": "",
        "zip": ""
      }
    ],
    "contacts": [
      {
        "id": "",
        "family_name": "",
        "last_name": "",
        "middle_name": "",
        "email": "",
        "phone": "",
        "relationship": ""
      }
    ]
}

Call examples:

  1. Get list of students with summary facet: /v3/students
  2. Get list of students with detail facet /v3/students?facet=detail
  3. Get list of students with detail facet and include address/v3/students?facet=detail&include=address
  4. Get a student with detail facet and include address/v3/students?include=address
  5. Get a student with detail facet and include address and contacts/v3/students?include=address,contact

Guidelines for applying facet/include design pattern:

  1. By default, fetching a collection should send summary facet without any related models.
  2. By default, fetching an item should send detail facet without any related model.
  3. Client can explicitly ask for a facet by providing facet query param.
  4. By default, fetch operation should not send related models.
  5. Client must explicitly ask for related resources by sending include in query param.

Look for the updated V3 documentation in our API Guide in January, 2016.

Winter is Coming...


People who experienced Boston’s winter of 2015 have come to cringe when they hear the phrase “winter is coming”. A record of 108 inches of snow put an unusual stress on the city, forcing us to replace snow shovels with bulldozers, and we resigned ourselves to long and messy commutes into work. Now, as the days continue to shorten, many of us are beginning to dread the winter ahead and question if the MBTA will be better this year. Will more cars be added to the trains? Will the engines be replaced? How will this year be different than the last? While we don’t know how much snow we’ll get this year, we hope that the MBTA will use data from last year’s debacle to ensure a better experience this year.

As developers, we strive to build the best software we can, but we know that ultimately its fate will be decided by how well it matches the expectations in our user’s heads. In order to be responsive we need to bake into our processes a feedback loop driven by user data to inform how effectively design goals are being met and whether business targets are on track. How should that feedback loop be built? What form should it take? That topic and the use of modern data analytics tools was the subject of the HMH Labs team’s most recent Tech Meetup. Big data advises us to capture it all and let machine learning sort out what is useful later, promising that in these large record sets, we’ll find hidden patterns or trends that can provide insights we can use to improve our products and processes.

There is a wealth of off-the shelf options that we could use to track UX and just a few years ago it would have been considered a no-brainer to use Google Analytics or another service. It was considered too difficult to do on your own and there were few benefits to doing so. That equation is changing.

There is now a suite of open source projects that make building a custom analytics solution more feasible. Building up our internal capability in this space is key to being able to realize the benefits. The ecosystem around big data is one of the more interesting and rapidly changing areas of software development today, but without hands-on experience it’s possible to get lost in the dizzying array of projects and techniques. In collaboration with HMH’s Data Science group, and in the spirit of exploration and experimentation, the Labs team has been prototyping an analytics solution based on Kafka, Cassandra, MongoDB and Spark that will help us navigate this promising dimension.

We are just getting started, but stay tuned for more details on how you’ll be able to integrate these insights into applications you may be developing for the Marketplace. In the meantime, we are keeping our eyes on the weather forecast and hoping that the MBTA’s winter resiliency plan will be able to keep public transit running when the snow starts to fall.

Announcing HMH Marketplace


Houghton Mifflin Harcourt announced today our plans to launch HMH Marketplace – an online destination for educators to discover, share and sell resources that enhance the teaching and learning experience. These resources can be any tool used by teachers to engage students or manage a classroom – from an app that facilitates communication between parents and teachers to a set of printable world capital flashcards. Web apps, mobile apps, downloadable resources – teachers are always looking for materials that supplement the curriculum, and HMH Marketplace will be the premiere destination for those materials.

HMH is pleased to have developers of high quality resources already on board as sellers in the HMH Marketplace, including Spritz, Education.com and Dom & Tom.

So what does this mean for you? Developers engaged in the HMH Developer Portal have an opportunity to create educational tools that integrate with the HMH platforms and easily market their applications to teachers around the world. One such app is Spritz, an eReader that delivers text to students in a manner that is easier for some students to process.

“Through access to HMH APIs, we are now able to create a custom Spritz reader for HMH content that will support learners who experience challenges with traditional reading methods,” commented Frank Waldman, CEO and Co-Founder of Spritz. “HMH Marketplace provides us with a channel to reach HMH’s extensive customer base with an integrated, supplementary tool that enables more effective teaching and learning.”

Developers have found that the Identity API provides a valuable service to teachers as they log into the application and find their class roster will load automatically. Dom & Tom is using the Identity API to create Quiz Myth, an app where students compete against themselves and their classmates as they reinforce the material learned in the classroom.

Dominic Tancredi, Partner at Dom & Tom, shared his experience with the HMH Identity API. “The Identity API provides an incredible level of user profile data, that you rarely see shared by other APIs. The user profile information for Students, Teachers, Schools, and Staff is a rich data-set that helps our app figure out what content is best to serve. We’re excited to have access to this data for matching teachers with students, to support onboarding new users to our app.”

Once you have built your application, the HMH Marketplace provides a clear path to distribute and commercialize your applications. Teachers will search by topic, grade level, or tool type and find the materials they need. Teachers can make their purchase, use the resource, and return to the HMH Marketplace to leave reviews and shop for more materials.

“We are excited to participate in the HMH Marketplace,” commented Todd Schwartz, Co-CEO, at Education.com, “Educators spend a great deal of time searching for quality content and tools. HMH Marketplace will help simplify that process by making content and resources like ours available to educators in a simple and relevant way.”

The HMH Marketplace will launch in early 2016 in beta. Learn more at https://developer.hmhco.com/marketplace-coming-soon and sign up to be a seller in the HMH Marketplace.

iOS Development in Swift


At HMH Labs, we were very fortunate to have fantastic interns this summer! In fact, one of our interns was able to build a sample iPad app that allows teachers to create virtual slideshows of student work for parents.

By using the APIs, the sample application is able to integrate the class roster and serves as a good example of how developers can interact with the HMH services. Here’s an overview of how the APIs were used.

Class Act

Similar to some of the other sample apps we’ve written about, this app implemented an authorization flow using the sample token request to log in and set the authorization for the user. It then utilizes the ref_id and a staffpersons/id/rosters GET request to easily create a class list within the app itself. (For full examples and code, see the sample apps in the API guide.)

At this point, the teacher is logged in and can start building photo slideshows for the students in her class. This is where it gets interesting.

Tag, You’re it.

When the teacher picks a student from the class list, the app creates an empty album for the student. In this user flow, the POST Tag API is called to automatically create a tag for the student within the teacher’s HMH account.

The app then uses the GET tag API, to retrieve the ID of the tag, so it can be used later on. This request is shown below.

Picture This!

As the teacher builds a slideshow, he or she adds pictures to the child’s album. The app takes them through a process to order and customize the pictures, and then finally creates a video.

The document APIs are used together with the Tag IDs to store the links to the videos, allowing the teacher to maintain a history of the videos, including which children are tagged in each video. Here is an example of a POST request using the Documents API. This is used to store the video link, along with its student tags, the name of the video, and the date it was created.

Happy developing!

HMH Labs

Continuous Improvement


Houghton Mifflin Harcourt (HMH) is leading many of the discussions concerning interoperability happening in K12 education today. Organizations including IMS and SIF work to standardize the way that educational systems interact. A commitment to standards-based development and design can enable the emergence of solutions that can be used across multiple education settings.

Version 1 of our Identity service was based on the SIF Association, attempting to map a REST-ful interface on top of a specification that was intended for another purpose. As this service made its way into the hands of the developer community, we recognized what SIF itself has also addressed, that there were opportunities for improvement. The SIF spec was built as a data-interchange format and the model really does not lend itself well to a modern web API.

In recognition of this we are excited to announce V2 of our still beta API program inspired by the greatly simplified design of SIFxPress. The changes will make using the API easier for developers. Things that should be easy now are, so developers can focus on the hard, essential problem of building awesome applications.

To give an idea of how much easier the changes are to use, we shared Shuffler, a sample app created to help developers conceptualize what could be built using our Identity API. Shuffler allows a teacher to log in and load a class list of students into the application. Initially, Shuffler was built using V1 of the Identity API. Since our update to SIF xPress, we’ve updated that application with V2, which uses xPress Roster. Check out the reduction in steps below:

As you can see by the dramatically shorter code, V2 is a real time saver!

Ready to build?

You can see in the swagger documentation that we have released Identity v2.

Have any questions about what you can do with the HMH APIs?

Post a question in our Forum or email us to start the conversation.

Getting Started with Identity


Earlier this summer, some of us in HMH Labs had the opportunity to participate in the EdSurge Tech Summit in Boston. Educators throughout the Boston area gathered to learn about the latest in technology developments and how they could apply those solutions in their classrooms. Over the course of a weekend, we asked educators what they really hoped for from technology solutions. Most answers were centered on interoperability. Teachers openly described how they barely have the solutions in front of them working, so the idea of introducing additional solutions can be overwhelming. The Developer Portal is designed to help meet some of these challenges.

The resources available in this Developer Portal serve 2 primary purposes:

  1. We hope that developers will save themselves time by using APIs to develop solutions that play well with those that teachers are already using.
  2. We hope that teachers will embrace solutions that add value to solutions in which they are already invested.

As we have started to engage with the developer community, we’ve heard people ask — but why would I use these APIs? — what can they do? You can find specifics on all of the APIs in the API Guide.

But here’s a quick, practical example.

By using the Identity API, you can get an understanding of who’s who in a classroom and how they fit in to an organization:

This process allows developers to build applications that teachers can use right away.

To illustrate this concept, we recently sat down and mapped out a sample application meant to help everyone grasp this API concept and have a little fun.

In a typical elementary school classroom, teachers spend more time than you might think rearranging desks and assigning new seats, so that students are exposed to multiple peers throughout a given school year. This is not a difficult task, but it is a time-consuming one.

Our solution? The Shuffler! (Please Note: This is not a production-grade or efficacy-proven application. This is just a sample app to help get developer juices flowing.)

The Shuffler uses the Identity API to get the teacher and student IDs for a class. Here in the Sandbox environment, the school is “The Fellowship of The Ring” (HMH was Tolkien’s original publisher in the US, so we like to use the Lord of the Rings characters for sample data integration)

So what does the Shuffler do?

  1. It allows a teacher, in this case, Gandalf, to create a visual floorplan of his classroom and have the chairs automatically populated.
  2. It allows that teacher to click a button and automatically ‘shuffle’ who sits next to who.

How does it do that?

The application uses Ajax to call the APIs and encapsulates them as functions for later use.

Here is a snippet of the code:

The Shuffler is an intentionally simple application– a launching point for future applications that will deliver more features and meet additional needs in the classroom. But we made it to give the developer community a better perspective on what can be done using the Identity API.

Teachers are busy doing great things in the classroom. We hope you'll join us in helping to make that easier for them.

Curious CodeFest


On June 27 and 28 we hosted Curious Codefest, HMH’s first external hackathon, at the Cambridge Innovation Center in Boston. Nearly 100 Developers, Designers, and Idea Generators came with application ideas to meet educational needs like parent engagement, attendance tracking, after school programs, and second language learning. After an energetic pitch session, participants teamed up and the coding began. Teams camped out, laptops in hand, through the day and late into the night, using their passion and skills to bring ideas to life. By 2pm the next day, 20 apps were ready for demo.

Many of the apps impressed our panel of judges with their innovative use of technology to meet the needs of teachers, students and parents. Winning applications demonstrated innovation and creativity, technical design, use of HMH APIs and market potential. The three teams awarded prizes were:

  1. CanRead
  2. Chunkr
  3. Scrumble

Read about all the applications created at Curious Codefest. Remember to signup today to start developing your own solution that could impact the classroom.

Launching the Developer Portal


When HMH’s Chief Technology Officer, Brook Colangelo, asked me to head up HMH Labs and develop a program to expose our APIs, he said, “If we’re going to really transform the learning experience, we’re going to have to experiment and be willing to incubate new ideas.” And he was right.

Before we could start API exposure or prototyping, it was critical to consider the current state of our customers’ technical environments. So I pulled people from different areas of the company together to get a better understanding of the solutions our customers are already using, and how we approach the delivery of technology as a company.

HMH leads the K-12 market with approximately 44% share and serves millions of people across the U.S and beyond. What we are seeing right now is significant fragmentation in the industry. There is no one dominant Student Information System (SIS) or Learning Management System (LMS), and in fact, in many cases, the only consistent solution our customers have is our own.

With this in mind, we started thinking about how we could work with the developer community to build upon this and create a more seamless user experience for our customers. If we could encourage partners to build with us, we could also open new paths of distribution for developers in the K-12 education market. The key was determining the right APIs to expose, and working through ways to ensure we could protect our core environments.

So, we created a sandbox environment, designed to replicate our production world, and then set out to expose to the larger tech ecosystem some of the APIs that HMH uses to support internal development. This culminated in the launch of the HMH Developer Portal — a hub for developers to connect and build solutions and integrations that will help to transform the teaching and learning experience and offer new productivity resources to educators.

In the Developer Portal, you’ll find documentation on our APIs and a forum in which to connect with other developers. I invite you to sign up, and share feedback so that we can continuously improve the resources we offer to you - the developer community. We’re just getting started on this path to improving the technical experience of educators and learners, and I’m excited to see where our journey takes us.