Our core product group functions as an integrated design & engineering team with a total headcount of 6. It's comprised of:
- 2 Application Engineers
- 1 Mobile Application Engineer
- 1 Designer & Front-End Developer
- 1 Product Designer/UX & Engineering Manager
- 1 Product Manager
We use a number of tools in our web app stack:
- Ruby
- Rails
- Rspec
- Node.js
- Backbone.js/Ember.js
- MySQL
- Redis
- Resque
Our software stack for building Mobile apps:
- iOS: XCode/Objective-C
- Android: Android Studio/Java
Software tooling and project management:
- Github (version control and collaboration)
- CircleCI (hosted continuous integration)
- Capistrano (deployment)
- Pivotal Tracker, Campfire, Aha! (project and product management)
- New Relic, Server Density, PagerDuty (application and systems performance monitoring)
We work in an agile fashion against our product roadmap, which is owned by our Product Manager. Design/UX is at the center of all audience-facing projects. On our recent mobile app projects we've increasingly embraced lean principles for development.
The designers on our team are also capable front-end developers, so everyone on the team contributes code and is hands-on with the technical implementation of our products.
We have a strong culture of building our own products and tools; consequently, writing high-quality software is a top priority for our team. Our engineers are very disciplined about writing tests against their code and using continuous integration. Code coverage across our core publishing products is pretty solid.
We built a custom Rails-based CMS engine that powers all our active websites. It's called Outpost, and it's a public project here on Github: https://github.com/SCPR/outpost.
We've also built a number of Ruby Gems to extend Outpost's functionality:
- https://github.com/SCPR/outpost-asset_host
- https://github.com/SCPR/secretary-rails
- https://github.com/SCPR/outpost-secretary
- https://github.com/SCPR/outpost-aggregator
- https://github.com/SCPR/outpost-publishing
Our instances of Outpost also leverage a small Node.js application we built to surface realtime user activity inside the CMS:
https://github.com/SCPR/Newsroom
AssetHost is our attempt to create a one-stop-shop for hosting and linking to media assets that are intended for inclusion in news stories. We use it as a hub that multiple frontend CMS systems can hook into, querying images, videos and documents from one source and enabling easier interchange of data.
It's also a public project on Github: https://github.com/SCPR/AssetHost.
KPCC built a public API on top of our content that we use to power our mobile apps as well as other KPCC news apps and data projects. All of our core digital content objects are represented here: Articles, Programs, Audio, Assets, our Broadcast Schdeule, etc. The API is currently read-only.
Documentation can be found here: https://github.com/SCPR/api-docs/tree/master/KPCC/v3
We have iPhone and Android apps currently provided to us by Listener Interactive. We're working to replace these apps with our own in-house apps by early summer.
Our iPad app was build in-house and launched in November 2013. The GitHub repo for this project isn't public yet, but will be by the end of this week.
Our live stream is powered by StreamMachine, a Node.js app developed at KPCC. The core innovation at the center of StreamMachine is "live rewind", a DVR-like feature that lets users time-shift the live stream, hours of which can be stored in memory on the server. We haven't exposed this feature to the public yet, but we will starting with our upcoming iPhone/Android apps.
StreamMachine is an open source project on Github: https://github.com/StreamMachine/StreamMachine)
We co-locate all our digital systems at a datacenter in Downtown LA. We're currently running on leased hardware, but are in the middle of a hardware and systems refresh. When this transition is complete this Spring, our infrastructure will consist of a small number of high-powered physical hosts running the following stack:
- VMWare
- Ubuntu
- Chef
- nginx
- Passenger Enterprise
- MySQL