Technical Debt: that escalated quickly

First written and published on LITA Blog
http://litablog.org/2017/07/technical-debt-that-escalated-quickly/


If you’re not familiar with the term “technical debt”, it’s an analogy coined by Ward Cunningham[1], used to relay what happens when rather than following best practices and standards we take shortcuts on technical projects to have a quick fix. Debt occurs when we take on a long-term burden in order to gain something in the short term.

I want to note that inevitably we will always take on some sort of debt, often unknowingly and usually while learning; the phrase “hindsight is 20/20” comes to mind, we see where we went wrong after the fact. There is also inherited technical debt, in all of my jobs, current and past, I inherited technical debt, this is out of my control, it happens and I still need to learn how to deal with it. This piece aims to give some guidelines and bits I’ve learned over the years in dealing with technical debt and doing me best to maintain it, because really, it’s unavoidable and ignoring it doesn’t make it go away. Believe me, I’ve tried. 

Technical debt can refer to many different things including, but not limited to: infrastructure, software, design/UX, or code. Technical debt reduces the long term agility of a team; it forces us to rely on short term solution thinking and make trade-offs for short term agility. When done haphazardly and not managed, technical debt can shut down a team’s ability to move forward on a project, their long term agility.

It accrues quickly and often we don’t realize just how quickly. For example, I’d been tasked with implementing single-sign on (SSO) for a multitude of applications in our library. In the process of mapping out the path of action this led to learning that in order to implement the bits we needed for SSO most of the applications needed to be updated and the newer versions weren’t compatible with the version of PHP running on our servers, and to use the version of PHP that would be compatible we needed to upgrade our server and the upgrade on the server was a major upgrade which led to having to do a full server upgrade and migration. Needless to say, SSO has not yet been implemented. This technical debt accrued from a previous admin’s past decisions to not stay on top of the upgrades for many of our applications because short term hacks were put in place and the upgrades would break those hacks. These decisions to take on technical debt ultimately caught up with us and halted the ability to move forward on a project. Whether the debt is created under your watch or inherited, it will eventually need to be addressed.

The decisions that are made which result in technical debt should be made with a strategic engineering perspective. Technical debt should only be accrued on purpose because it enables some business goal, intentional and unintentional. Steve McConnell’s talk on Managing Technical Debt [2] does a good job of laying the business and technical aspects of taking on technical debt. Following that, ideally there should be a plan in place on how to reasonably reduce the debt down the road. If technical debt is left unaddressed, at some point the only light at the end of the tunnel is to declare bankruptcy, analogically: just blow it up and start over.

Technical debt is always present, it’s not always bad either but it’s always on the verge of getting worse. It is important to have ways of hammering through it, as well as having preventative measures in place to keep debt to a minimum and manageable for as long as possible.

So how do you deal with it?

Tips for dealing with inherited technical debt:

  • Define it. What counts as technical debt? Why is it important to do something about it?
  • Take inventory, know what you’re working with.
  • Prioritize your payoffs. Pick your technical battles carefully, which bits need addressing NOW and which bits can be addressed at a later date?
  • Develop a plan on what and how you’re going to address and ultimately tidy up the debt.
  • Track technical debt. However you track it, make sure you capture enough detail to identify the problem and why it needs to be fixed.

Preventative tips to avoiding technical debt (as much as you can):

  • Before taking on debt ask yourself…
    • Do we have estimates for the debt and non-debt options?
    • How much will the quick & dirty option cost now? What about the clean options?
    • Why do we believe that it is better to incur the effort later than to incur it now? What is expected to change to make taking on that effort more palatable in the future?
    • Have we considered all the options?
    • Who’s going to own the debt?
  • Define initial requirements in a clear and constant style. A good example of this is Gherkin: https://cucumber.io/docs/reference
  • Create best practices. Some examples:  KISS (Keep It Simple Stupid), DRY (Don’t Repeat Yourself), YAGNI (You Aren’t Gonna Need it)
  • Have a standard, an approved model of taking shortcuts, and stick to it. Remember to also reevaluate that standard periodically, what once was the best way may not always be the best way.
  • Documentation. A personal favorite: the “why-and” approach. If you take a temporary (but necessary) shortcut, make note of it and explain why you did what you did and what needs to be done to address it. Your goal is to avoid having someone look at your code/infrastructure/digital records/etc and asking “why is it like that?” Also for documentation, a phenomenal resource (and community) is Write The Docs (http://www.writethedocs.org/guide
  • Allow for gardening. Just as you would with a real garden you want to tidy up things in your projects sooner rather than later. General maintenance tasks that can be done to improve code/systems/etc now rather than filed on the low priority “to-do” list.
  • TESTS! Write/use automated tests that will catch bugs and issues before your users. I’m a fan of using tools like Travis CI (https://travis-ci.org/), Cucumber (https://cucumber.io/docs), Fiddler (http://www.telerik.com/fiddler) and Nagios (https://www.nagios.org/)  for testing and monitoring. Another resource recommended to me (thanks Andromeda!)  is Obey the Testing Goat (http://www.obeythetestinggoat.com/pages/book.html#toc)
  • Remember to act slower than you think. Essentially, think through how something should be done before actually doing it.

And my final thought, commonly referred to as the boy scout rule, when you move on from a project or team and someone else inherits what you leave behind, do your best to leave it better than when you found it.


Footnote:
  1. Ward Cunningham, Explaing Debt Metaphor [Video] http://wiki.c2.com/?WardExplainsDebtMetaphor
  2. Managing Technical Debt by Steve McConnell (slides) http://2013.icse-conferences.org/documents/publicity/MTD-WS-McConnell-slides.pdf

Extra Reading/Tools:

How to deal with technical debt? by Vlad Alive https://m.vladalive.com/how-to-deal-with-technical-debt-33bc7787ed7c

Obey the Testing Goat by Harry Percival  http://www.obeythetestinggoat.com/pages/book.html#toc

How to write a good bug report? Tips and Tricks http://www.softwaretestinghelp.com/how-to-write-good-bug-report/

Tools & Services list https://www.stickyminds.com/tools-guide

Don’t take the technical debt metaphor too far http://swreflections.blogspot.com/2012/12/dont-take-technical-debt-metaphor-too.html 

Advertisements

Update to the Problem: we have a solution

So a few months ago there was a problem Where I continue to admire the Problem without a complete Solution. This has been solved for a few months, but sh!t happens. Am now finally getting around to providing the a solution, one that works for me, but may not work for you. This is pieced together haphazardly, mainly so I have note of it and well so if you’re looking for help on doing something similar you have a much better starting point than I did.

After a hot minute with Python-LDAP I determined it was a beast I was not interested in taming at the moment because well I had another option, mind you at the time we thought this ‘other’ option was going to be easier. I don’t know if it was or not, but it took some serious neuron firing to do.

At one point I dove deep into VBA scripting, where I figuratively lost loads of hair and age 20 years. The script scraped hundreds of emails for a text string (unique ID), to parse out into an excel file (staying within the suite of Microsoft Office deemed significantly easier than going out) and then ran line by line on LDAP to print the output of the request attributes and then convert to csv and email to colleague to do a mail merge.

**confession** I actually signed up for a Stack Overflow account because of this!

One Solution but not THE solution:

VBScript and a Bash script that ran LDAP Queries, Python conversions and used Mutt to send an email attachment.
I’ve changed values to neutral values, you will need to update them to match what you need.
Here is my repo that provides the files you’ll need if you decide to take the VBScript route. https://github.com/whitni/VBScriptandLDAP

Once you set this up in VBA, you can set it as a macro, but I had it set as a rule at first and then switched to doing something different right after I had this solution in place…so didn’t bother.

The Solution I settled on:

I returned to a single bash script that queried LDAP matching on certain attributes, primary change was the decision to send emails out based on start dates and not when we received an email notification from HR. This will soon be turned into a cron job and I can dust my hands of it BUT walking away with significantly more knowledge of LDAP, AD, VBA and all that…

#!/bin/bash
#A simple script

## date format ##
today=$(date +”%F”)
startdate=$(date +”%Y%m”)

##backup path ##
BAK=”/path/that/you/saved/file/newhires_$today”

# LDAP Search query
ldapsearch -W -h your.AD.server.com -x -D ldapusername@email.com -b “dc=$1,dc=$2,dc=$3” -s sub “attributes you need to match or not match on” attributes you want > $BAK

#convert LDIF to csv
python LDIFtoCSV/LDIFtoCSV.py $BAK > /path/that/you/saved/file/newhires_$today.csv

#send email with file attached
mutt -a /path/that/you/saved/file/newhires_$today.csv -s “New Hire Emails” -c persontoCC@email.com — persontoemail@email.com

Resources used:
VBScript Library: https://msdn.microsoft.com/en-us/library/aa227499(v=vs.60).aspx
RegEx parsing: http://www.slipstick.com/developer/regex-parse-message-text/
LDAP Man page: [Linux_terminal] > man ldap
LDIFtoCSV conversion tool: https://github.com/tachang/ldiftocsv
Stack Overflow — my question: http://stackoverflow.com/questions/36752876/why-does-copying-a-string-from-outlook-to-excel-open-a-new-instance-of-excel-for/36754211#36754211

Online Communities

What is an online community?

Wikipedia: “An online community is a virtual community that exists online and whose members enable its existence through taking part in membership ritual.” (link to Wikipedia article)

Meredith Farkas: “An online community is simply a group of people who gather online for a specific purpose.” (Farkas, 2007, p86).

Just like an offline community and online community needs a leader or someone to moderate what goes on with in the community. A moderator has many tasks and a great responsibility to the community.

Online Community: Best Practices

  1. Recognize your role as a moderator but also recognize the role of your members, do not try to control everything. “…allow people to connect with each other and speak their minds, it helps build trust and foster an environment where people are wiling to both own and share their work together” (Farkas, 2007, p105)
  2. Have guidelines and understand that not everyone will agree with them but they need to be followed.Often members join a community because of the guidelines set in place, similar to why someone chooses a particular school, if you allow them to be violated you will loose members and reputation.
  3. Hinder lurkers. Encourage visitors to become members. “By requiring users to take
    an affirmative action (that requires some minimal effort on their part), it weeds out the casual
    troublemaker from an interested user.” (Grohol, 2006)
  4. Communicate effectively by being clear, direct and frequent. Guidelines need to be communicated direct and clear, community updates need to be informational, and become a ‘human’ to the community, members like to hear from the ‘higher ups’. 

Communities to join:

  • Wikipedia is a free, collaboratively edited, and multilingual Internet encyclopedia supported by the non-profit Wikimedia Foundation
  • FreeCycle a community the derives off everything being free. Members can request items or offer items. Main rule: It must be free. 
  • Urbanspoon a community that enocurages members to leave reviews on restaurants they have eaten at. 
  • FourSquare a community that encourages members to check in to places they visit and leave tips or comment for other visitors. Incentives often are special coupons or offers when you check in. I once received 15% off my dinner bill just for checking into the restaurant on FourSquare. This community is predominantly mobile based.

References:

Farkas, M. G. (2007). Social Software in Libraries: Building collaboration, communication and community online.  Medford, New Jersey: Information Today, Inc.

 

Spartans Market Successfully

San Jose State University King Library

I selected the King Library as my marketing critique focus. The library has a well rounded presence on the web; outside of their website they market themselves through the following ways:
Twitter: @SJSU_kinglib
Facebook: SJSU King Library and
Google+: SJSU King Library
Bi-Annual Newsletter: SJSU King Library Newsletter

I will discuss how they engage themselves with these applications as well as address any improvements I see that might benefit the library. These points made are my observations only and do not included insight from the employees of the King Library.

I have a twitter feed, @nimblelibrarian, I started out following @SJSU_kinglib they have a small following of 240 twitters and within 30 minutes I was being followed back, this response time impressed me. Followed by this prompt new follower I browsed past tweets and gathered a feel of what exactly the King Library wanted its followers to know. They are supportive of other SJSU accounts, re-tweeting campus club announcements, local reference desk, local public libary, and the main SJSU feed. This past Friday I tweeted, “Its Friday, I want rain, soup and a good book”  @nimblelibrarian. I do not have a following, as I have just started developing my own brand, so you can imagine my excitement when I was re-tweeted by @SJSU_kinglib .

The impression made to me so far by the King Library was positive. Along with simple recognitions of their followers, they advertised upcoming events & exhibits taking place in the library.

The King Library also uses Facebook to expand their web presence. The Facebook page for the library was born, August 31, 2011. It is barely a year old, which surprised me as I thought they would have started using it earlier. The Facebook page did not impress me as much as the twitter feed did but it did not let me down either. The library uses images often with corresponding posts are which often about upcoming events or exhibits. Due to the nature of these posts it was difficult to see a “real” person behind them; they felt more like an automatic response you get when you apply to a job. That being said I came across one post that teased with personality, a post about the San Jose Falcons. (see post below)

 
This post encourages student to come to the library for non-library things instead of research, study, computers, etc. It is important to capture and include your target audience, in this case students, in your posts. This post had 3 likes and 3 comments, higher than most posts on the page.

Another concern was that the response time to student complaint posts was around a full day.   I saw to complaints, one directed at noisy patrons and the other directed at the Library Wi-Fi, response time for both around 24 hours. For the complaint directed towards noisy patrons the response was okay, because they requested information to report it. The complain directed to the library, “Please fix the Wifi connection. I really want to stay in the library to study. I can’t study at home!!!!!!!” needed to be addressed much earlier than 24 hours later because the student was studying and needed the Wi-Fi at that moment. I’d recommend tot he King Library to reduce the response time to posts like these, in order to be more helpful throughout their web presence. 

The Google+ account, created September 2011, is very much like the King Library Facebook page, posts are almost identical. On Nov. 4, 2011 one of the first posts to receive any follower response included the response from SJSU King Library thanking them for their support, +1 to their rapport. I critique this in their marketing because it is vital to acknowledge those who follow you, your “fans” as you will. However, this unfortunately fades in to the background after a couple more posts and the acknowledgment is no longer made.  It is important to keep it up, even if you only have a handful of fans, appreciate them. 

As I made my way through the main applications SJSU King Library uses to expand their online presence there are few things that I want need to address.  First, bravo to their consistent posting even with a mediocre following. Second, thank you for re-tweeting, just a small gesture that shows their acknowledgment of their followers.

They have a strong grasp of how to use these services to spread the word about what is happening in the library however they need to focus on expanding their following. SJSU has an enrollment of approximately 30,000 students, their followings hit around 300, that is 1% of the school.  I suggest they do this in multiple ways including:

1. Engage your followers – encourage comments in your posts and tweets. The more engaging you are the more interaction you will receive. Use posts for an opportunity to get survey responses from students, “Did you attend the Day of the Dead exhibit?”
2. Express personality beyond events and exhibit posting. Add to your newspaper a comic strip, for example talk about the employees and what they enjoy, make the library more personal.
3. Quicken your response time to posts. 24 hours for a response to  a wi-fi complaint is useless to the patron.  
4. Create a blog. Blogs are a great way to move above and beyond hours and event posts, of course I do not think I need to tell you that.

This being said, SJSU King Library markets their library services well, events, exhibits, hours, changes, etc. If their brand is “A library that keeps their students informed of events happening on campus” then they nailed it, no matter how boring that sounds. I recommend really exploiting the personality of the library, there are a great deal of employees their and I am sure they are not all boring. 

Library Social Media…what are your tactics?

Top 5 Social Media Tools for Promoting Library Services


What? Facebook
Why? Reach patrons of multiple ages, mobile accessibility, “Its massive reach provides compelling opportunities to connect with customers, both current and future, through fan pages, news feeds, groups, and throughout the site.” (SEOmoz)
How? Sign up for a group page (not a profile), designate the information that will be posted for your users and others to see and start posting. Posts about common topics, new ideas you want to implement. Using Facebook in this manner allows Libraries to get feedback in the easier way possible and directly from their users.

What? Twitter
Why? Networking in real time. A new tool to become personal with your users. Tweets are limited to 160 characters, requires tweets of significance and informational. IE “SJSU library closed Oct. 8 Columbus day!” (39 characters)
How? Sign up for a twitter account begin adding followers and following others. Read Musings about librarianship on how Twitter can help your library.

What? YouTube
Why? Video promotion
How? Video Blogs – have staff record book reviews of latest books, add a library tour and introduce your staff, invite participation from patrons “What is your favorite book?” and compile them into a video. Video Tours are very effective and allow users to get a feel for your library before they go, you can also put up tutorials on how to use your system. You can also use YouTube as a form of education videos, how many tutorials can you find on YouTube? Millions! I’m sure you can even find one on using YouTube in your Library.

What? Wikipedia
Why? Wikipedia offers a place to build guides for users. Wikis are a great way to keep on top of all the new services or updates happening in the library 

How? Create a Wiki (make sure to have an easy access link to the page) where Library staff can update changes to the library. You can also create a Wiki that patrons can access and add recommendations or even services that maybe a staff member did not think of.


What? Good-reads
Why? What better way to promote an RA (Readers Advisory) with Good-reads.
How? Visit the link and start adding books and reviews. Good-reads provides a way for patrons to see what the staff is reading and get recommendations and reviews. This tool in itself is a RA service, not just one to help promote your own library services.

-NimbleLibrarian

Recommended Reads:

Breeding, M. (2009). Social networking strategies for professionals. Computers in Libraries, 29(9), 29-31
Fichter, D. , & Avery, C. (2012). Tools of influence: Strategic use of social media. Online, 36(4), 58-60.


Step-by-Step Guide to Your Social Media Success
Avoid These 4 Common Social Media Mistakes – Joseph Ruiz

H&M: Fashion and Quality at the Best Price

I can’t think of a catchy phrase for this post so I’m going to dive right in. I follow H&M on Twitter @hmusa, I liked them on Facebook (H&M), I have their app on the iPhone and I’m on their email list…..you could say at the least I know what H&M offers. They are truly the only store I follow on every media aspect they offer. Using each of the media tools provides me with what I like most, coupons to save me some dough. I love me a good $5 off purchase of $15 especially if I shop there already.

H&M posts continually about upcoming products, new clothing lines, coupons, and more on both Twitter and Facebook. Something I learned this past week about using social media is allowing honesty on your pages. Let you users express how they really feel about your stuff, good and bad. As I browse H&M’s Facebook page you get both.
I have blurred out images and names for privacy as I did not ask to use their comments.

H&M also responds to their fans on Twitter (also on Facebook) – quite effectively.

Their fans are acknowledging them and H&M is recognizing them. I think H&M is doing a great job in responding to their fans with social media. The cases shown above are not rare, H&M responds frequently. What I did notice is they respond just enough to make it a special instance when they to directly respond to users.

Due to the types of comments towards H&M, I can confidently say that H&M has developed a relationship with their customers that helps them feel that they can actively express their opinions (good and bad). They have thousands of follows and FB posts have thousands of likes and 40+ comments. I would confidently say communication is happening.

Follow:
Twitter feed: @hmusa
Facebook: H&M
App (iphone & android): H&M
Website: www.hm.com

-NimbleLibrarian