Code4Lib Pre-Conf: Project Management (pm4lib)

Lead by Rosalyn Metz, Becky Yoose

Not agile, because with a single person team, it’s difficult to do SCRUM, so only agile-ish.

What are we working on?

Being with ‘what are we working on?” Have a meeting

This goes into helping to figure out the scope of the project.

5 why’s: basically, ask why 5 times. Everyone write down their answers. e.g. Want to redesign the website, but turns out because they don’t know what services are provided.

Scope

List of goals that you want to achieve, but what if you don’t know what your goals are?

Goal setting using SMART goals. Gives you a structure to work off of, and helps with project monitoring.

  • S: Specific – should answer who/what/when/where
  • M: Measurable
  • A: Attainable – realistic given current resources
  • R: Relevant – goes back to scoping, making sure addressing issues
  • T: Time-bound – marking milestones & progress

Also helps you narrow down your scope, and leads into project charter.

Goal vs. Task: More general, what needs to get done vs. implementation details

Examples:

  • Design and develop an interactivity module from other code by the end of September. – will want to break down, more of a project objective
  • Initiate development of code with team [add time].
  • Testing API to see if meet requirements [add time/who].
  • Have [person] teach one workshop with at least 20 registrants this summer at [this office].

Who are you dragging into this project?

Stakeholders

  • project executive sponsor – whether the project happens
  • project sponsor – person who makes decision resources, people, budget, etc.
  • project manager – person responsible for moving the project forward, beholden to executive and sponsor, also note person who comes up with idea is not always the manager
  • team members – people doing actual work
  • others

Do this on your own or with someone trusted. Don’t do this with the stakeholders in the room.

You want to understand their place in the project, reason they’re there, the support they will provide.

If some people don’t need to be always be there, keep them up to date e.g. status report meetings. Take up little time, and do their influence. Be the protector for your team if need be.

Not everyone is going to be happy.

Make sure they’re in conversations up front, to see why it needs to happen. Will already have had the ‘why are we doing it this way’ conversations. See also Dealing with defensiveness in high conflict people.

If have unknown stakeholders, you might want to delay project until have all the necessary resources are in place.

Project One Pager

This is your project charter. It covers

  • objective – conscise high level thing you want to achieve
  • outcomes – your SMART goals, inumerate things need to be achieved to reach the objective
  • out of scope – include things people will likely ask for
  • team – who and role (not necessarily stakeholders) e.g. developer, handling metadata, user testing
  • schedule – high level milestones, but might leave out and add after approval

Work Breakdown

Your work then needs to be broken down. Need to break into the small tasks. e.g. Goal of teaching cohort -> registration, marketing, book space, etc.

Want to team to come up with tasks, but can help them.

One person might be responsible, but that person can decide how it gets done. Give people a couple of days and come back.

It’s okay where what you’re doing is preparing for the next project.

The majority of the time should be spent planning rather than the work.

Time Estimates

It’s to create the schedule and understand the cost. Frequently realize it’s not worth it.

The only way to estimate time is to do time tracking. Might try Harvest.

Time tracking can be a real eye opener.

Tend to vastly underestimate or overestimate, so best to use buffers.

Choose a realistic buffer. Applying the percentage to the entire project. Usually start with 10-15%: T / (1 – B%)

Use Fibonacci numbers (1, 3, 5, 8 – never higher) to assign numbers, see SCRUM in 10 easy steps article. e.g. Do 16 points of work every week.

Difficulty seems to be not getting developers to track time, but staff people outside of IT to track time. Approach by making workflows more efficient, more realistic. You can play the dumb person and ask how long it takes.

Can ask your vendors whether they have a project plan.

Budgeting

  • estimating time ( in hours)
  • salary/hour
  • benefits (as a percentage of income)

cost = P1(hour * salary/hour) + P2(hours * salary/hour) + …

Important to keep track of meetings when tracking your time.

Use a spreadsheet to calculate cost of total, plus number of hours per week for each team member (and the cost). For example, if can only commit more than 20%, should not be spending 40 hours in a week on the project.

Tracking

What do you track? It depends on who is funding the project.

If grant funded, depends on what is required based on the grant. Sometimes grants don’t cover certain things, or institution needs matching funding.

Internally, contact your supervisor, their supervisor, or contact person in another department.

The key is to keep it transparent.

Reporting Progress

Budget (spreadsheet) only one piece of reporting.

Have a communication plan (see example).

Team standing meetings meant to be very short. All people involved in that portion of the project say 3 things:

  1. what did you do after the last meeting?
  2. what are you planning before the next meeting?
  3. issues preventing from work getting done

Informal, but technical = daily grind.

Status reports in comparison, regular, more formal, but regular

Reporting is absolutely necessary and needs to be clear, consistent, concise. Stakeholders feel like they’re involved in the project even if they’re not really.

Handling Issues that Arise

A lot of people fall back to issue tracking system, is not a project management strategy.

Need to work out workflows around tickets. Are you going to use it for communication, time tracker? Customize system for that use which statuses, attachments, granularity, etc. Internal vs. external notes.

Who is responsible for which types of issues. Have primary and secondary contact.

Also, what is timely matter? Depending on during or outside of business hours.

May need to convince users to submit the information the new way. Talk to them about it not ending up in a black hole. Make sure have confirmation that issue has been added.

Need to also make sure the tickets are in scope. Go back to project charter if need to reference something.

Tracking Systems

Redmine

  • support consortial digital repository
  • open source
  • different user permissions
  • email features
  • good adoption
  • time tracking in 15 minutes increments
  • will make Gantt charts for you
  • lessons learned: don’t overload users with the emails from the issue tracker

Basecamp

  • previously used Trello
  • paid service, web based
  • can have pre-made teams, templates
  • can import whole teams or templates e.g. checklists
  • calendars can be exported and show on public page
  • integrates well with google docs
  • text features to throw notes together
  • has API
  • good for managing resources as well

Trello

  • basically a big whiteboard/sticky note system
  • but very basic

Github

  • track issue and for code, plugged into webserver
  • one repository for each project
  • one meta project to track all projects, including non-code projects
  • can be difficult to search or filter issues
  • everything in one place
  • has email notification
  • can’t assign due dates or track time
  • can assign issues to larger milestones which can have due dates but have had mixed success

JIRA

  • great customization
  • can take a lot of time to customize
  • but will do whatever you want it to do

Different tools work at different organizations. Tools are only as good as the people that are using it. Need to be consistent about using it.

Do whatever you can to make it easier e.g. single sign-on.

Finishing Projects

When is it done? Met the outcome and objectives.

However, it doesn’t mean you can wash your hands of it.

Project Post-Mortem

Learn from your experiences. Take those lessons learned and apply into future projects.

Might be a presentation or report, template, etc.

Why did it go wrong? Some things that are external you cannot control, but internal things you can change.

Once you finish the project, you have a product.

Product Management

While the project is done, you need to continue to maintain it.

Product owner = product manager. Lifecycle function dealing with planning, marketing, maintenance throughout the entire life of the product.

Product manager is the heart, mind and voice of the user. Not your own voice.

Have to make the hard product trade off decisions. e.g. which features to include.

Provide a second opinion on how things work. Create a trust relationship with the development team so you can ask questions.

See also, “How to be a program manager” and “on product management“.

Take Away

The most important thing is communcation.

For the session, also see Erin’s notes for pm4lib, and little_wow’s etherpad notes.

LibTechConf 2014: Agile Project Management and ITIL for Libraries

Presented by Andrew McAlorum

As a whole, libraries do a bad job of managing IT projects and services. Agile and ITIL are two sets of frameworks or methodologies that can help with that. Continue reading “LibTechConf 2014: Agile Project Management and ITIL for Libraries”

Code4Lib Day 2: Lightning Talks

Demian Katz – gamebooks.org, Geeby-Deeby, and the Dime Novel Bibliography Project.

  • interactive fiction books
  • Made a really big bibliography
  • people sending in more
  • put it in a big database
  • open-source project to adapt backend
  • MySQL db that models various types of entities, relationships
  • backend system to edit entities, enter data, edit relationships

Rachel Frick – LODLAM Summit 2013 and Challenge

  • linked open data in library, archive, and museum
  • had challenge to win cash prize
  • can still submit, just fill out form and make/submit video

Kenny Ketner – Occam’s Reader

  • allow libraries to lend ebooks to each other using document delivery model
  • compatible with IILiad
  • no training, no workflow change
  • can add formats incrementally (started with PDF)
  • basic interface that discourages abuse
  • access previously unaccessible resources
  • in alpha testing
  • Slides

Al Cornish – Orbis Cascade Alliance Shared ILS Project

  • primary service is consortial services
  • move to new system beyond traditional ILS
  • single shared system (vs. currently 37)
  • explore collaborative technical services, collection development
  • Alma + Primo selected, migration in progress

Makoto Okamoto – Crowd Funding for Library in Japan

  • culture of donation changed a lot after 3.11
  • share experience and metrics
  • key to success is setting up appropriate ticket

William Denton – Code4Lib 2013 Augmented Reality View in Layar

  • picking points of interest from two spots
  • 1: Google Places map
  • 2: Twitter search API – of the ones that are geolocated
  • Web service in Ruby and Sinatra, hosted on Heroku
  • Rainbows End by Vernor Vinge – go read it.
  • Slides

Rosalyn Metz – What I learned while I was away

  • learned about planning, budget, and time
  • time is the most important thing
  • track your time, might be spending too much time on things e.g. don’t spend more than 10 mins on a single email
  • can demonstrate where need help
  • Slides

Nettie Lagace – Recent Cool Fun NISO Activities

  • ResourceSync Framework Specification
  • Bibligraphic Roadmap Initiative
  • Slides

Chuck Koscher – Fundref

  • list of funders
  • what articles given certain funding

Andromeda Yelton – Five Conversations About Coding

  • computer science majors in 1995: yardstick of who is cooler than who dependent on the most arcane knowledge
  • boston python workshop 2012: women friendly course. Expecting to be judged.
  • chad nelson, monday night. It’s not free
  • bess sadler, yesterday. We have a problem with insecurity
  • important to recognized our limitations, but have this imaginary yardstick
  • ever done coding? majority. think coder? 1/2

Jeremy Morse – mPach: Publishing directly into HathiTrust

  • sorry, didn’t quite get this one

Rob Dumas – Git in Five Minutes

That’s all for today.

sleeping owl
How I Feel

The Ends do not Justify the Means: The Necessity of Code Review

Hopefully this post does not sound like just a rant as I admit that this post has come up from my frustrations from using other people’s work, but I think this is particularly symptomatic of areas where there are not always IT experts, as is the case with many libraries. I also do not boast that I always know what I’m doing, but that’s why I think it’s invaluable to have some kind of code review process.

Making it Simple

As a general rule, better to make things as simple as possible rather than using complex methods if they both achieve the same things. I’ve been told that simple and clean code is the best kind of code.

There may be efficiency concerns involved, but then that seems to be left behind in the cases I’m talking about anyway. (Case in point, our website had 5+ CSS files, not all which had clear purposes, many of which were overwriting each other’s classes, which I had to rework into two files.)

Document and Comment

While some of the simple things might be obvious and self-explanatory, I don’t think I’ve ever seen anything over documented/commented in the ‘real world’ (as opposed to school work), so more is (generally) better. I think it’s doubly important where the creation of a product/tool might be outsourced, but the maintenance of it is done in house (as frequently seems to happen), that the code can be understood by a new/beginner programmer-type person.

Too often I have looked at code recently and thought “what does this do?” or “how many pages does it affect?” While I admit that it’s not always easy to know what or how much needs to be documented, because you don’t always know who will look at it in the future and things you write yourself tend to make sense, but do at least a minimal amount of documentation and commenting.

On a side note, do not name files or functions after yourself (one former student’s name is now unforgettable for that reason and this was created months before I started).

Get Feedback

Ideally, there is someone who is an actual programmer on your team or in your unit who you can ask to take at least a quick look over what you’ve done and give you feedback on whether you’ve done it correctly. If there’s no one ‘inside’, consider asking someone on the ‘outside’.

Within a team or unit, if there is more than one programmer-savvy person, consider establishing a Review/Feedback step in the process as you typically see before code commits (if this doesn’t already exist of course).

If you really can’t get feedback from someone else, then much like editing your own writing, step back from it (for, preferably, a couple of days) and look at it with fresh eyes and ask yourself some of the important questions, but namely:

would someone else be able to step in and easily understand what your code does?

Supervising Students

I believe that all the above points apply when working with students too. It’s okay if you’re not a programmer. At least take a brief look at the code, see if commenting is done, ask about the general process/framework, ask if they think a beginner programmer would be able to understand their code easily, etc. If you ask, it will at least make him/her think about it!

My Point

The end product does not mean it is what you want. Other people also need to be able to maintain and customize/modify. This all seems so obvious, but I think it bears reminding sometimes.

Adjusting Management Styles and Organizational Cultures

I’m sure everyone has experienced it when they change jobs. Everyone has experienced the shift and the need to adjust to a new job, manager/supervisor, and organization. I think what’s really hit me is that I’ve gone from one end to the pendulum to the complete opposite (or so it seems).

Management

At my old job, I was basically given a one liner on what I should be doing, “go do x, and if you don’t know how, just read up on it and give it a go.” If I needed help though, my coworkers would be more than happy to. I used my time as I saw fit in working on projects, and attended workshops on campus.

Now, I get lots of detail on what is being asked of me. I also send everything to be vetted by my manager and sometimes other coworkers. I keep a list of everything I’m working on and completed as well. I ask permission to go to anything my manager hasn’t directly sent me to.

Organization

In general, yes, things were divided by units or departments, but we got good response time for the most part and had a fair amount of control over what we could do. It was fairly easy to contact people and find out what information you wanted or needed.

Now, things are not only divided, things sometimes frustrate me, because we get minimal to little support in some areas. I also find it difficult to get information, having to through unusual ways to get it frequently. Though I admit, I think a lot of it is having no control and being allowed to be given any. It’s irking especially to know that you could probably fix it yourself, but it’s not your job. Then again, it seems I’ve just been “lucky” to encounter a number of issues and it’s not that common for a lot of the little things to happen that have been bothering me. Don’t get me wrong, a lot of things do go very well. I have found people very helpful and willing to help, and IT help desk is great!

Conclusion

There is no better, just different and what fits better with your work style.

 

general, yes, things were divided by units or departments, but we got good response time for the most part and had a fair amount of control over what we could do. It was fairly easy to contact people and find out what information you wanted or needed.