Wednesday, November 19, 2014

Baltimore Hackathon After Action Report

Last weekend's Baltimore Hackathon project to help Thread was a lot of fun! Several people from Baltimore's PHP and mobile web communities reached out to help me, as did a good friend from New England who put us in touch with some Salesforce experts. Two people came to the hackathon to participate. Everyone else couldn't make the weekend but expressed interest in helping later.

We focused on documenting the app and making it ready for easy improvements. Here's what we accomplished:

  • Setup a private bitbucket git repository where we could share code changes
  • Created a setup README file explaining how to use MAMP to quickly create a development environment that mimics what runs on Thread's application server (this is what took up most of the time as we had to learn the intricacies of CodeIgniter)
  • Made minor changes to CodeIgniter settings so the app could be run locally in a development mode
  • Added a Neighborhood field to the application UI and underlying MySQL table so that volunteers can document the locations where they work.
The next steps include:
  • Connecting Thread's data analyst with the Salesforce experts (should happen later this week)
  • Adding a simple leaderboard that shows the number of interactions per volunteer.
  • Deploying our changes to Thread's staging server and rehearsing the database migration
  • Deploying to the production application server
  • Drafting suggestions for long-term upgrades and maintenance to avoid software rot

Monday, November 10, 2014

Help Thread Help Baltimore at the Baltimore Hackathon

Update 11/12/2014: Added an FAQ at the bottom and more problems and projects. You don't have to be present at this particular weekend to help!

This weekend I am planning to work on a service project at the Baltimore Hackathon and I would love to form a group to work together! I have been working with Thread, an excellent local nonprofit group that helps students in Baltimore. I'm interested in working with them because of their unusual, comprehensive approach, and because they are already fairly tech-savvy.

Details below. Please e-mail me if you'd like to team up!


Thread, formerly the Incentive Mentoring Program (IMP), has a volunteer base of 700+ volunteers who are providing continuous daily support to 150+ students, who live and go to school in neighborhoods all across Baltimore. These volunteers work in teams called Thread Families to provide each student with everything they need to succeed in school as well as increased access to community resources. Because of the diverse range and sometimes urgent nature of interactions, Thread has struggled to capture the full depth and breadth of their efforts and impact. Thread works in every part of the city, 365 days a year, and commit to working with students for 10 years.


According to Thread (emphasis mine):
"Up until 2013 we tracked most of our activities via volunteer logs using Google Spreadsheets and Forms, but at year-end the hours that were logged were always far short of what we know had actually happened in Thread Families. We think the barriers had to do with poor ease of use and lack of feedback from the system. It was difficult to log things from a smartphone, and you never received any feedback from your interactions, which essentially went into a black hole (a Google Spreadsheet that was inconvenient to access and check). In 2013, we applied for a grant with NextJump to help create a website optimized for mobile devices that would make logging significantly easier.
"A small team of developers at NextJump donated two weeks of time to create ThreadShare, which is both aesthetically pleasing and easy to use. However, ThreadShare is still missing two critical components, a more comprehensive feedback loop and increased engagement functionality. While interactions are now posted for Thread volunteers to see, the overall app is still relatively limited in its functionality. You can't post pictures, you can't location track and see a map of your impact in Baltimore, and you don't know how you fare as compared to your fellow volunteers.  Understanding the impact of their hard work and connectedness to a larger movement is critical in encouraging volunteers to continue and increase their commitment.  
"I truly believe that with a few small tweaks, like the ones mentioned above, ThreadShare v2.0 could be more than just an administrative tool, but a key engagement strategy as we fully transition from a small non-profit to a movement within Baltimore. I also hope that, since Thread is all about facilitating connection, the app would be something that we can then share with other nonprofits for their use in engaging volunteers." 
"A common criticism of Thread is that because we serve 150+ students, our impact is small. The Thread vision is not about just tutoring underperforming high school students facing significant challenges outside of the classroom, however; it is about creating “intentional families” with strong relationships and weaving a new social fabric. It is about ending the sense of social isolation that many students and volunteers within the community feel, and it is about facilitating relationships that transcend barriers of race and class. Our current metrics highlight student achievement and our ability to accomplish our mission, but fall short of telling the full story of the overwhelming comprehensive and extensive nature of what we do and the impact that it also has on the lives of our volunteers and the Baltimore community. Only the day-to-day actions of our volunteers paint a complete picture of what individualized support and relationship building really means.”


Thread is moving various business operations to a Salesforce application, and there is currently no automatic means of transferring IMPshare data to Salesforce.


There is no person or company currently responsible for the day-to-day upkeep or improvement of IMPshare and no easy way for volunteers to contribute source code to the project. There is however a staging environment where code changes can be tested. The plan should also include regular backups of ThreadShare's MySQL database.


The IMPshare app runs on a LAMP stack with the CodeIgniter framework and jQuery. The source code is currently hosted on the IMPshare server and does not appear to be version-controlled.

  • Partially address problem #3 by engaging Baltimore's PHP and mobile web communities: we can make IMPshare easy to work on.
    • Move the code to a private bitbucket or github repository. Consider making it an open source application.
    • Create a setup script that installs dependencies and allows code to be run locally
    • Write technical documentation & make diagrams, including a thorough README that explains how to run the app in a development environment
    • Create sample / test data
    • Create an app deployment procedure for the staging and production environments
    • Sign up to present the project at Baltimore PHP and Mobile and Techies For Good meet ups
    • Draft an RFP for PHP consultancies to estimate the cost for ongoing app maintenance (routine things that are harder to get volunteers to focus on, such as bug fixes, security patches, etc.)
  • Prototype a leaderboard tool. This could be a separate application that connects to IMPshare’s MySQL database, runs a SQL query, and emails a leaderboard to Thread leadership (who could then review it and forward to volunteers).
    • If Thread likes it, this report could be incorporated directly into the app’s user interface
  • Add a “Neighborhood” field to the user interface
    • Can leverage HTML5 APIs to auto-fill with the user’s current location
  • Prototype an impact map that uses various Google geocoding APIs to geocode locations using the new "neighborhood" field
  • Setup MySQL backups
  • Create a standalone reporting app that allows database gurus to create SQL reports that could be embedded in Google Docs
  • Prototype an IMPshare-to-Salesforce connector
    • Will need to gather more data about Thread’s salesforce installatio

Q: I want to help but this is pretty short notice so I'm not available this weekend? Can I still help?

A: Totally! We consider the hackathon to be a motivating/catalyzing/social occasion but I expect most of the work will occur over the next months and years. We want to help in a sustainable way, and want you to contribute in any way you can and would enjoy.

Q: I'm new / inexperienced / young / don't know PHP. Can I still help?

A: Yes! The main point of this exercise is to connect enthusiastic people to Thread to help them leverage technology as much as possible so they can get back to their core mission of helping kids.

Q: I'm a designer, can I help?

A: Yes! One of the things we can build is a nice standalone reporting tool that could be made more useful if it had a real designer behind it. Also there may be things about the current app that you think will increase engagement. Also, the "leaderboard" concept is pretty prototypical at this point. For it to be useful, it needs to look and feel right.

Q: I'm a tech writer, can I help?

A: Yes! One of our goals is to make the project easy to setup and administer for new volunteers and for Thread. The existing docs are awesome and we can build on that foundation.

Saturday, November 1, 2014

Notes from DC CTO summit

I really enjoyed the recent DC CTO summit. The talks were informative and there were so many of Baltimore-based CTOs that it also functioned as a Baltimore tech leadership networking event!

Here are some quick notes I took on things I want to tell my Staq colleagues about. There was a lot of other good stuff; this is me focusing on the things that apply to our company at this moment in history.
  • Joshua Szmajda showed off a really impressive use of a whiteboard for kanban. I think informal, analogue-based systems like this could make a huge difference in our team's ability to self-manage, just from being able to better visualize what projects are in progress and when they get stalled.
  • Joshua cited the kanban book Lean from the Trenches which sounds good. An audience member recommended for an online version of the whiteboard.
  • Quote: "Working software is the only metric"
  • A speaker cited unpublished but credible-sounding research showing that around the world, some software teams can complete the same project 50 times faster than others. 
    • Paul Barry pointed out to me that this doesn't mean that those "50X" teams are better at all facets of software development; all we know is they were 50X better at this one particular task.
    • Reminds me of Derek Sivers's advice on how to hire programmers
  • Edward Kim gave a great talk called "Hats are the new management", describing how he distributed small but important manager jobs to each member of his team. 
    • One job we definitely could use is "Bugs Captain": a person who monitors a Bugs chat room and ensures a first responder is assigned, and monitors the quality of the response. I definitely want to stand up a separate Bugs chat room.
    • Another job: rotating responsibility each week for manual QA. Edward's team forward-deploys someone from the dev organization to help the QA testers each week. Good way to get to know all parts of an app.
    • They have a dev blog hosted on medium - supervised by a person wearing the "Blog master hat"
    • It reminded me of how the Navy divvies up collateral duties: there's a whole separate structure within each chain of command to take care of all kinds of jobs that aren't formally part of a Sailor's billet.
  • Paul Barry recommended using Optimizely for A/B testing, and encouraged us to use A/B testing as a devops tool: use it to measure the impact of new features by rolling them out to subgroups of users
    • He also recommended using "canary" tools such as measuring the exit rate of certain pages: can help you find out when a certain group of users is having problems with a certain page
  • Andrew Montalenti presented an inside look at the daily routines of the parsely remote team. I like the idea of syncing every developer to a familiar weekly rhythm
    • Start the day with a #standup chat message explaining what you're planning to work on
    • End the day with a #sitdown message explaining what you accomplished, what you're stuck on
    • Monday: bug fixing and planning day
    • Tuesday: 30 minute (virtual) staff meeting to kick off the week
    • Tuesday noon through Friday noon: uninterrupted flow time. No meetings. All coding.
    • Friday at noon: demo time
    • Friday afternoon: tie up loose ends
    • No weekend work / rest and recover