Get a Link to a Jira Issue Collector

One of my recent tickets was getting a link to our Jira Issue Collector into our Ruby on Rails app. The original plan was to make our own form and have the submit button send either and email to the project’s Jira board or send a JSON file to the REST API for Jira.

Two issues came up with this task: first, I didn’t have the permissions to configure an email receiver and it was not going to be configurable by me or anyone else on the project any time soon. Secondly, the JSON file approach didn’t end up working because of my company’s particular Jira Server configuration. A new approach was required.

I was able to get Project level administration privileges (as opposed to Board level admin privileges, which is not sufficient to proceed), which allowed me to make an Issue Collector. You can see how to make an Issue Collector in that link. Atlassian doesn’t make it automatic to get the form directly, instead having the issue collector run as a button that gets inserted into your page, but we can get around this fairly easily, but slightly more tediously than is strictly necessary. To do this, the important bit we need is the script that it spits out at the end.

Screenshot of Embedding this issue collector script tag

Where it says <script type and that entire text block, you will see, at the end, something like this: ...&collectorId= followed by a string of characters. For this example, let’s say you see this:

plugin:issuecollector.js?locale=en&collectorId=b123a4b

The collector id in this example would be b123a4b

You would then plug that collector id into the following url:

https://YOUR.JIRA.URL/rest/collectors/1.0/template/form/YOUR-COLLECTOR-ID?os_authType=none#

In our case it would be https://YOUR.JIRA.URL/rest/collectors/1.0/template/form/b123a4b?os_authType=none#

You can plug that into a browser and with any luck see just your form!

via GIPHY

SAFe Scaled Agile Certified 🎉

That’s right, I’m officially a Certified Scaled SAFe 4 Agilist.

via GIPHY

Jeff Goldblum is a national global treasure.

I took the Leading SAFe Agile training a couple of weeks ago, which was two full days of training followed by me finally taking the exam after a week of vacation. A shocking amount stuck, mostly, I believe, because a lot of it just makes sense if you have any Agile-ish experience and any enterprise experience.

I should back up and explain what SAFe is. It’s Scaled Agile Framework, which just means it’s Agile-ish + the realities of enterprise workstreams. I say Agile-ish because while the academic thought experiments of Agile are compelling literally nobody actually follows all Agile and at least one creator of the Agile Manifesto now says developers should abandon “Agile” primarily because Agile, as practiced in real world workplaces, works really well for managers but is awful for developers.

I’m a big fan of Agile-lite, a breezy alternative to Agile that is still bringing regular updates to the business but doesn’t clog up a developer’s day with meetings. Meetings are currently the main activity I do at work , which really stresses me out since I still need to, like, you know….program.

via GIPHY

However much I appreciate running Agile-lite, I do understand that it would be very difficult or impossible to run that way in an enterprise, regulated space. Running one-off projects and insulated apps may work with Agile-lite, but enterprise apps require more communication, program level priorities, and clearly laid out releases.

For instance, if you’re working on a Sharepoint app and the enterprise Sharepoint team is working on new features or updates, then in an ideal world you would know about it weeks in advance so that you could plan around that release. Unfortunately, that rarely happens organically and instead using a framework such as SAFe would save you a lot of headache and trouble.

The trouble I see is that most of these pushes for Agile come from the bottom (individual contributor software developers) and only go up to the Director level. In my organization, that’s about ~5 levels below the VP of IT (if not more, tbh)

via GIPHY

SAFe does address this issue, stating that smaller teams and individual enterprise resources can see benefit from this framework, but the real Magic Sauce™️ comes from a division or the entire organization going into this.

I’m excited to see what my org can do with this! This training would help if for no other reason then having a shared vocabulary between developers, management, and business is valuable.

Some more resources to find out more about SAFe:
Cracking SAFe: https://techbeacon.com/app-dev-testing/cracking-safe-experts-take-scaled-agile-framework
SAFe – Good but Not Good Enough: https://ronjeffries.com/xprog/articles/safe-good-but-not-good-enough/
Reactions from my SAFe SPC Certification Class: http://rgalen.com/agile-training-news/2014/6/24/reactions-and-thoughts-from-my-safe-spc-certification-class

Staying Organized as a Developer

I’m an employee, a wife, a mom, and a person who naturally has very little organizational skills. Left to my own devices, I don’t have a messy house, but I regularly wouldn’t know where anything was.

via GIPHY

My day to day tasks are usually dictated by whatever the Jira board has for my tickets, which are usually really broad features to work on. I would use an app like Reminders to make personal, work, and long term to-do lists. If I was working on a ticket for, say, getting Jenkins up and running, my Reminders list would look like this:

One of the limitations of Reminders is that once you complete a task, it goes away. This intuitively seems like a good thing – if it’s done, why would you care? The problem for me is that I DON’T REMEMBER IF I DID A THING. Just like I like seeing a commit history in a repo, I like seeing a historical log of what I’ve done.

It was at about this time that I read a book called Getting Things Done by David Allen. I also read a blog post by Zapier on how to use a tool called OmniFocus which looked like it did everything I wished Reminders could do.

“Your mind is for having ideas, not holding them.”

David Allen, Getting Things Done

Here’s an example of how I use OmniFocus for work:

You can put due dates, set up flags for high priority items, set up as many of those nested items as you would like. You can also add tags to any of the items, but I don’t tend to do that for my work set up as I have it separated by project anyway. I also put the ticket number/link, if there is a Jira ticket, that is associated with a task.

I now do this system for every single part of my life, not just for work stuff. As soon as I have a thought I put it in OmniFocus. I don’t forget to do things as much because I record literally everything in my life. Need to set up my kid’s birthday party? Make a project, jot it down, call it good. Find an article but don’t have time to read it just yet? Make a task, put the url in, done. My mental energy gets spent on creative problem solving, not juggling projects, timelines, and junk.

Staying organized is hard, and a big revelation for me is that it is hard for everybody. Starting a new organization system can be extra hard, but once you become accustomed to putting things in a system you may find that your life gets less complicated and more automated.

What To Do When Team Members Leave: How To Unsilo Your Team

Once upon a time there was a functioning software development team. Every day the team worked together to add features and fix bugs. Everyone on the team had their own specific roles. Everyone did their job well, and features were flying out of the door!

One day a database developer announced that he had found a new job and would be leaving our happy little team. Panic set in – he was the only person on the team who actually knew how to deploy database changes! We fell into a common trap: we had become way too siloed. The first week there was no discussion of what we were going to do – maybe if we pretended like nothing happened then it wouldn’t happen? Unfortunately, our database developer did not feel that way and his last day was looming in seven days. Our next release, which was planned to happen in ten days, was also ominously looming.

It was decided, finally, that what we needed to do was to shadow the database engineer during a pre-release to get the full story of how to run the release. The database engineer was kind and helpful throughout, but it was quickly discovered that he didn’t take very careful notes of how to do things. It was also discovered that not just anyone could access the database, only certain people had that permission. Because we all worked at a large enterprise company, we had to make tickets to gain access to the database, which took time to process. In the meantime, two team members began to shadow the departing database developer, watching him as he did the pre-release and asking questions and documenting things along the way. The two shadowing team members finally gained database access on the database engineer’s last day, just in time…or was it???

A new problem arose when we tried to release a few days after the database engineer’s last day. Our database dashboards had been upgraded to a newer version and did not match the dashboard we had been shown, so all the careful documentation that had been written during the pre-release was largely irrelevant. We also had issues with one person’s new account not getting the correct access, so they could not help with the release. With incomplete documentation, variable dashboard, and the pressure of releasing it correctly without our former colleague, things were stressful!

The day was saved when we were able to Google what the buttons on the departed database developer’s dashboard translated to on the newer version of the dashboard that our un-siloed developers had access to, which made the work slow but bearable. The release went out delayed by a few hours, but was mostly successful…or was it???

We discovered that some of the tables had not been migrated correctly when reports were no longer being populated correctly. We wondered, had we missed a step in the release notes? It turned out that it was a release-specific task that had not been done in the pre-release process and had not been documented! The docs were hastily updated and the same issue occurred again in the next release three weeks later – the docs were updated more throughly this time and we didn’t have an issue with the reports again during releases.

The moral of this story is:
• Don’t exclusively rely on self-documenting! It never is as complete as somebody else new to the process trying to accomplish the goal.
• Don’t silo yourself or your team! This is an easy trope to fall into since everyone likes being good at their one job, but any of us could get hit by a bus, an of us could get sick, and re-orgs happen all of the time.
• Document, document, document! When in doubt, write down what you are doing, how you do it, and update the documentation. A calendar reminder to re-visit your docs helps keep your documentation up to date.

Deleting automagically created text in Microsoft Sharepoint

I’m now working in an enterprise Microsoft environment (I know) and as a result of Microsoft being….Microsoft-y…some weird layers of abstraction get put into the page with very little control on our part.

My latest automagical text was under the Projects Schedule view in SharePoint Online:

The text you can see below the schedule bar (“To get started….”) had several problems for us.  One, the add a project link didn’t go to our form, so orphan projects would get created and Two, the second line was totally unnecessary.  The text wasn’t put in by us, but is Automagically created.

The main area where the text was in was in a very long, autogenerated (ARE YOU SEEING A PATTERN YET???) id, which is what goes in at YOUR_ID_HERE.  After lots of trial and error, I found that the number of <tr> tags is always equal to 4 (no idea) when there are no projects, so that is why the howManyTableRows.length === 4 is the way it is.  So in went some Javascript into the Sharepoint Script Editor:

This got me 90% of the way there, but there was a bug where the project schedule bar wouldn’t load the first time but would load after a refresh.  I guess that this was a Sharepoint timing issue and my assumptions were proven correct, so I modified the code slightly to:

Now the project schedule bar loads, the add a project link goes to the correct link, and the second line of text is removed.  Everything loads correctly and it works in Safari, Chrome, and IE (oh, IE!)

From Med Tech to Software Engineer

…or my story of how pettiness, jealousy, and poor luck very nearly got me to quit the path but it all worked out.

❗This is going to be a super long post, sorry not sorry. ❗

In 2010 I was working at Mayo Clinic in Rochester, Minnesota as a Clinical Laboratory Scientist in the Cytogenetics lab and had been working there since 2007 and hated my job.  I disliked how I was reduced to productivity numbers, I disliked being told in my performance review that I was too bossy and intimidating, and I disliked doing the same thing every single day knowing that I would be doing the same thing every single day until I retired in 2050.  I felt trapped and I was angry that I worked so hard to get the science degree I got just to babysit robots all day, every day.  My boyfriend, soon to be husband, was and still is a software developer, so he encouraged me to try programming.  I had an Android phone, so he suggested I make a simple phone app.

I had never felt so dumb before in my life.

Let me back up a little bit and let you all know where I was coming from.  I was the star science fair student, winning 3rd place at the county science fair in kindergarten and winning 1st place every year from grades 1-4.  In 5th grade I was asked not to participate because participation by other kids was down because I just kept winning.  I loved science and I knew from a very early age that I wanted to study science.

Fast forward to college and I was a Microbiology major at Michigan State University when my friend, two years ahead of me, graduated with the same major and was insanely accomplished (she had 4 publications to her name as an undergrad!) who got a job washing lab equipment for $12 per hour.  I realized that my options on my current path were:

  1. Go to graduate school
  2. Go to medical school
  3. Make $12 per hour washing dishes or
  4. Find a better, more lucrative major.

I found the Medical Technology department (now known as Biomedical Laboratory Diagnostics) and it was the perfect fit for me.  Clinical science paid much better than research did and people didn’t have a difficult time finding jobs – a huge win in 2007 when I graduated! 🎉

During my time at Michigan State, I took several electives and one that I was always really interested in was computer science.  I walked into the Intro to Programming I, CSE 231, and the first day’s rant was how 2/3 of the class was absolutely going to fail this class.  It was also announced that while the title of the class said Intro to Programming, you already had to know programming in order to pass the class.  I dropped that class immediately!  I didn’t want my GPA to suffer just because of an elective, just in case I did change my mind and decide to go to grad or medical school.  It also gave me the impression that programming was hard, only certain people were capable of doing so, and that if you didn’t start learning it as a young child (like me with my science fairs…) then you were not the sort of person who should be programming.

Fast forwarding back to 2010, I got a book about Android programming and like nearly all programming books it said in the introduction that you needed some programming experience to get through the book.  I tried my best to get through the first project, but the tools were overwhelming and not up to date with what was shown and discussed in the book, leaving me feeling lost and confused.  It seemed that my preconceptions about programming, especially that I just wasn’t capable, was being proven to be true.

Fast forwarding again to 2013…now I was working at Clinical Pathology Labs (CPL) in Austin, Texas and I still didn’t like my job.  I was just about ready to get back to work after having a baby and I dreaded the idea of going back.  I hated my job.  I didn’t feel that I was valued, I felt that I was still reduced to productivity numbers,  and I felt that I was on a treadmill – running as fast as I could but going nowhere.  There was no future for me there, as promotions were unlikely and I was too specialized in my work experience to get another job in town.  I had been frustrated for years at CPL due to budget issues not allowing us to expand testing and increase productivity and I realized that it was never going to happen.  I had considered being a stay-at-home mom, and was privileged enough to be able to give that a go for seven months, but ultimately I didn’t like being a stay-at-home mom.

I tried programming again when I went on Amazon and found Hello World!: Computer Programming for Kids and yeah, it absolutely is a book for middle schoolers and yes, I was 30 years old.  It was the first resource I had found that was actually for beginner programmers and not just for people who already know how to code.  Finally things made sense.  After I finished that book I felt empowered, so I tried a free class from Harvard called CS50: Introduction to Computer Science that is a self-paced, free class available online.

I decided that I wanted to try to switch careers.  I was still working full-time and my son was seven months old.  In 2014 the programming options  in Austin were of three types: University, bootcamp, and self teaching.

I didn’t think I had the discipline or foresight needed to teach myself (even though all of these avenues had a large degree of self-teaching in them) and I didn’t have the time or family flexibility to dedicate 70+ hours per week that bootcamps in Austin were requiring of their students.  I approached University of Texas at Austin to see what their transfer or post-baccalaureate options were and was told (again, in 2014) that UT had too many students already and didn’t accept post-bacc transfers.  I saw on reddit that there was another option, an online post-bacc that I could complete in one to four years and so I applied for the Oregon State University Post-Bacc BS in Computer Science. 

The program consisted of C++ for the first two intro to programming courses followed by discrete math and algorithms.  My husband said it looked like a solid program, and because it was a post-bacc, you could get a full BS in Computer Science without retaking English or philosophy classes.  I loved it.  I found it frustrating at times, as I’ve learned all programming is frustrating at times, but when I was able to solve a problem I felt on top of the world.  After a year of classes, I decided to quit my job and dedicate more time to school.  I had some bad times, like when I was late finishing a project and had to take my laptop with me when my son went to the emergency room.  I had more than one break-down where I didn’t think I could do this, I didn’t think I was capable.  I had a lot of self-hate and hateful comments to myself, which I regret and wish I hadn’t done because it wasted so much time and energy.  I had a lot of projects in the program that involved working in groups, and working in groups across time zones is always tricky.  But I got through and finished in 2.75 years with a 3.4 GPA.

Then there was the job problem.

Austin, I had seen, is a hot tech market.  What doesn’t get said is that the tech market is hot for senior developers and somewhat for mid-level.  Austin is a terrible tech market for inexperienced newbies…you have UT Austin pumping out a ton of grads, people from all over the world flocking to Austin, and a habit of Austin hiring managers wanting senior developer experience for junior developer salary.   It took 7 months for me to get my first job after graduating.  I actually worked as a freelance WordPress developer for two years and had a short internship (4 months) at a local tech company and it still took 7 months to find a job.  To be fair, I was picky about what job I would take.  I wasn’t interested in being on-call all the time, I wasn’t interested in making $35k a year (way less than I made as a Med Tech, then I was averaging $55k a year) and I wasn’t interested in working with a bunch of 22 year old bros who played ping pong and drank heavily while at work.  There’s nothing wrong with an office where young men play ping pong and drink!!  However, I am not a good culture fit for that and wouldn’t enjoy working there, which is why I decided to reject offices like that.

In order to get a software developer job, I did the following things:

  • Went to local programming Meetups
    • Both for women and for mixed groups
    • Later became an organizer for Women Who Code
  • Got a BS in Computer Science
    • Online degree, not a local well known university
  • Made several large projects on my own
    • Ruby on Rails, Elixir, and PHP projects
  • Learned over a dozen languages/frameworks including:
    • Ruby on Rails
    • Elixir
    • Swift
    • Obj-C
    • Python
    • Java
    • Clojure
    • Javascript
    • React
    • C++
    • C
    • Perl
  • Attended Hackathon
    • Completed an iOS app
  • Gave talks
  • Went to conferences
    • Local and national conferences
    • Was invited to GraphConnect
      • Was invited to the Neo4j planning/future talks
  • Internship
    • 4 months at a local small company
  • Freelance
    • 2 years of freelancing

And then I got a full-time job offer and I can say that I really enjoy my job.  It combines my previous experience in the clinical lab and software and my polyglot programming experience is a huge asset.  I actually got hired as a senior specialist because of my extensive clinical background and the ability to pivot both in work and in my life.

The biggest issue I had wasn’t the programming, it was my pride and ego.  I didn’t like feeling vulnerable to being bad at something and I really feel that it was something that held me back both while learning and while interviewing.  As soon as I got good at being uncomfortable I was able to really able to move on and be confident enough to land a job.  If you aren’t confident in your abilities then you’ll probably fail to make a hiring manager confident in your abilities.

I know a lot of people talk about going to a code intensive and get a job after 3 months of learning to code.  That’s fantastic for them, but I would wager that it isn’t the norm.  I want to show people that even if it takes you 3 years, like it did for me, it’s OK.  I know that it hurts sometimes to read stories about people who get to the finish line much sooner than you, especially when you’re struggling.  But here’s the deal: you can’t let the pettiness, jealousy, or pride get you down, because it will destroy you.  Let the journey happen and you’ll be in a much better place as a result of it.

I’m glad I took the long route.

 

Photo from Tim Wright

ATX Diversity Hackathon 2017

This past weekend I participated in the Austin Diversity Hackathon hosted by Women Who Code – ATX.  I pitched an app to make a nature journal for pre-literate children.   This idea came about because my son, Eli, is 4 years old and loves to go on nature walks and collects rocks, leaves, and flowers as we go on our walks.  I don’t like finding rocks in the laundry machine all the time 😂 and I don’t like that he disrupts nature for his collection, so an app that a child could use and didn’t require a cell phone or wifi connection.  I had one person join me, Gabby, and she was the designer for the app and I was the programmer.

The repo for this project can be found at https://github.com/StabbyMcDuck/nature_journal

I was able, in 1.5 days, to get the initial table view, adding something to your collection, add a camera, video, or add a photo from your photo library and also record an audio file (pre-literate kids can’t write either!) and play the audio file back.

We didn’t win any prizes, but I got some serious work done and I’m already planning on my next app!  I wasn’t planning on going to this, as I was convinced I wouldn’t win.  I didn’t win 🤣 but it turns out that wasn’t what I found to be the point of this weekend – it was about doing something I didn’t know I could do.

There’s a lot left to do but I’m excited what else I can do to make this app amazing for Eli to use.  I plan on putting it on the app store soon.  🎉

ElixirConf 2017 talk ✅

I did it!  I actually gave my first talk at a national conference.  I honestly thought I was going to melt into a puddle of embarrassment and nervousness but I retained my solid form, gave the talk, didn’t pass out, and was able to reasonably talk to people who asked me questions afterwards.  ✅✅✅

The folks at ElixirConf are way on the ball and have already published the videos from the entire conference.  The video from my talk is on Youtube and the slides from my talk (complete with my speaker’s notes) are available on SlideShare for your downloading or viewing.

I had a really great time meeting so many folks who really care.  The conference was well organized and I didn’t have any bad interactions with anybody.   Folks were kind, excited to talk about the language and about software in general, and I was so happy to be able to contribute to the Elixir community in my own small way.

Thanks to everybody who helped me get where I am today.  I love you! 💖