Skillsobjective-c, swift, ios, xcode, node.js, Angular, bluemix
Joined devRant on 9/19/2016
Do all the things like ++ or -- rants, post your own rants, comment on others' rants and build your customized dev avatarSign Up
Product sending an email: Can I confirm feature A is all set for its release on April 30th?
Me: ... what? no that feature is going out with Feature B, that was pushed back to June because of the server issue.
Product: No, the release plan document says April 30th for this.
Me: ... theres 6 copies of this doc now. Someone is after deleting my comments saying "releasing with Feature B". Oh look heres a link to another doc that says this. See Feb14th "Will go out with Feature B". This is because they are touching the same code, we can't separate them now without re-writing it.
*Me to myself*: Ha product are going to hate this, their shitty processes have finally caught up with them.
Other manager: So heres my plan for the app release x, y, z.
*Me to myself*: ... his plan? this is my app, I mange this. What the hell is this?
*reads email thread*
*Me to myself*: ... oh so product really didn't like my reply, took me off the thread, sent a response to all the other managers asking for alternatives, CC'ing upper management. The same upper management I had a private conversation with yesterday about how shit our product team are.
I'm going to enjoy writing this reply.12
Currently in the middle of quarterly planning (its been fun so far). Needs to be signed off by business today.
- My team has ~25 man weeks available in terms of capacity.
- Looking at only priority 0 tasks, last night we calculated the ask from product stands at 64.
- Including P1's, P2's etc. its well over 100 man weeks.
- Email was sent around from business with a list of tasks, asking which can be dropped, de-scoped etc.
Product (non technical) response this morning:
- This one can't take 2 weeks, its not that complicated.
- This one needs to stay, It was originally a Q1 task.
- Can we make this one smaller? (currently only a 3 week task)
- 14 comments on other teams items.
... ah perfect, that cut down the items by less than half. We are now ready for the deadline in 4 hours to have all this signed off on. Great job everyone. Thanks for all the insightful discussions. Go team!
10am: meeting invite for 9:30pm my time.
*decline with comment: can’t attend*
9:40pm: email, “is anyone from engineering going to attend?”
10:05pm: email, ok the results of the call were X, Y and Z. But we’ve been asked to supply architecture diagrams (which don’t exist). Can we do this today?
10:45pm: email, guys this is urgent can we do this ASAP!
... welcome to the new world bitches, bite me6
Me: well guys, after the 4th attempt and a week of waiting, I’ve gotten a response from the remote backend team about the errors affecting this release. Which are the same issues affecting the last release 2 months ago. The findings are: “there is in fact some issue with the API”.
I’d like to thank everyone who put in so much effort to get us to this momentous step forward. We can expect a fix any year now.
*equally sarcastic colleague on another team listening in*:
oh wow, this months long thing has just been “some issue” all this time? Well that’s fantastic. You should mark the ticket as “done” and reply “thank you” for all their hard work.
..... I laughed so hard at how ridiculous all this is and the joke, that I nearly did, hoping someone from product/business would have to review it1
Well I’ve had my LinkedIn status to open for a little while now. Time to check what exciting offers (me, an iOS developer / team lead) has received.
- Senior python engineer with multiple years machine learning experience.
- a job 3000 miles outside the only city I’ve marked myself as interested in.
- Architect for a .NET team.
- Senior UX Researcher.
- The same job for a bank 6 times. But each time they won’t initially give the name of the company. Only “my fav client to work with” until I respond.
... not much hope in this process11
Product replying to Jira ticket: We think this issue has been resolved. Can you please reach out to the user and confirm?
Customer care: User xxx has responded to say she "has given up in frustration, and the app simply doesn't work". She has requested to have her account deactivated. This user has requested to not be contacted any further by the program.
Hows your day going devrant? mines going VERY well5
Spent most of the day debugging issues with a new release. Logging tool was saying we were getting HTTP 400’s and 500’s from the backend. Couldn’t figure it out.
Eventually found the backend sometimes sends down successful responses but with statusCode 500 for no reason what so ever. Got so annoyed ... but said the 400’s must be us so can’t blame them for everything.
Turns out backend also sometimes does the opposite. Sends down errors with HTTP 200’s. A junior app Dev was apparently so annoyed that backend wouldn’t fix it, that he wrote code to parse the response, if it contained an error, re-wrote the statusCode to 400 and then passed the response up to the next layer. He never documented it before he left.
Saving the best part for last. Backend says their code is fine, it must be one of the other layers (load balancers, proxies etc) managed by one of the other teams in the company ... we didn’t contact any of these teams, no no no, that would require effort. No we’ve just blamed them privately and that’s that.
Backend: Sorry the fix we had isn't going to work. Turns out app is sending an "undelivered" status after you call the API where you claimed we had an issue. This is in fact the cause, please address it.
Me: We do not have an "undelivered" status anywhere in our codebase. We do not do this.
Backend: *CC product* turns out this issue is only affecting 0.1% of users, its very minimal. Lets push ahead with the release.
Product: Ok, lets go live.
Me: ... ... ... we all just gonna ignore that "undelivered" bullshit? ... ok ... very stable release, here we go.5
Me: I just can’t keep working these hours. I’m on calls and emails 8pm and 9pm 4 times a week.
Boss: ok, but come on, Office X does be on for the same calls but it’s midnight their time.
Me: ... How does that make anything better?5
Just found out the backend developer I’m always complaining about. The one who:
- Can’t implement OAuth, and we have to have app users login every 24 hours because we have no way to generate new refresh tokens.
- Who used the phrase “your time zone is not my concern” to avoid building something that would let us inject test data.
- Who’s been debugging a critical bug affecting many users since December.
- Who can’t conduct API tests from external internet (you know, like the way the app will be in the wild) because it takes too much time.
- Who replies to Jira tickets only on a blue moon.
- Who has been 90% of the reason for my blood pressure situation
... is a fucking principal engineer in this company. In pecking order, his opinion should be considered more valuable than mine and everyone on my team.
I’ve just lost the will to live. How are big organizations THIS bad. Seriously, what promotion discussion did he go into
“So, you are a complete and utter bastard, nobody can stand to speak to you and you’ve yet to deliver anything of worth that actually works, over the course of several years ... ... ... interested in having your pay doubled??”20
“No we don’t use the time zone info you send on each request. We get all the drivers for the store ID, choose one of them randomly and take their time zone. We have been assuming it will always be the same for all drivers for each store.”
This is my new favorite response to a Jira ticket in this company.
I may have to print it out and hang it on my desk5
Have a week off, no yelling over email, no sarcastic slack messages, no shouting to myself in the office ... honestly have no idea what to do with myself ... might try this “being happy” thing everyone is always going on about4
Me: *sends email 45 minutes before a meeting*.
Boss: *20 mins into meeting*, any updates about the issues found yesterday?
Me: Yep I sent an email with an update on everything.
Boss: ok great, *shares screen*, *opens email*.
Ok want to walk us through it?
Me: ...... walk through my email?
Boss: Yeah we have everyone here in the meeting.
Me: ...... yeah I included all of them on the email.
Boss: Right, but it would be good to go through it for everyone’s benefit.
Me: *Reads email word for word, from the screen share*
I will now refer to him from this day forth as “The Time Vampire”.24
Boss: Great news, we are getting another backend dev from another team to help us out.
Me: Cool, hopefully we don’t have the same trouble as the others, not replying, never writing anything down etc.
Boss: No, I’ve worked with her before. She’s much more passionate about doing things right, using best practices and all that stuff.
Me: Oh that’s perfect, great news!
Boss: Yep! ... just be aware she has a tendency to get very easily confused. She delivers the wrong thing from time to time and might need to redo stuff semi-regularly.
Me: ... ... ...
Boss: It’ll all work out. Don’t worry. Ok gotta run.23
My teams current process is:
1) Asked by product to create “T-Shirt size” estimates, also known as a WAG (wild ass guess). The process is the mental equivalent of throwing darts while blindfolded, after being spun around in a circle and pointed in the wrong direction.
2) Product make firm commitments to upper management based off these. Ensuring them that all these features will make it out in Q2.
3) 4 days before Q2 starts, product ask engineering to figure out the real estimates based off no concrete information what so ever.
4) 4 Weeks into Q2, product provide the missing information.
5) Engineering inform product that the estimates are out by a factor of 1.5 - 3 times the original estimates.
6) Product sends angry email to upper management that through not fault of product, engineering are unable to meet the deadlines.
7) Everyone shout and complain until 1 week before Q3, then see point 1.
Following this process, you and your team can be just as delightful as me.
That’s the practiseSafeHex guarantee!5
"Hi xxx, please stop asking me the same question. I've answered it 4 times already via email, slack and in person on our zoom calls, over the past 2 weeks. I do not own the ticket and have no idea of the status or the dates. Ask the owner."
- slack response I was forced to write this morning to the guy my company put in charge of the entire product (mobile, multiple backends, frontend etc.).10
What a day and what an achievement!!!
Today ladies and gentlemen I broke my record for number of passive aggressive “as per last email” comments, in a single email.
I now stand at 11
Today is a great day and I’d like to thank everyone not reading my emails who got me to this point. You guys are the real record holders!5
YOU CAN'T JUST SWAP THESE DATES AROUND WITHOUT TELLING US AND EXPECT IT TO BE FINE, YOU USELESS FUCKING SKIDMARK!
... ahem ... sorry about that, just needed to vent ... as you were1
Them: We really need you to fill out this sheet today with estimated release dates.
Me: I really need you to respond to any of the emails I’ve sent over the past week, asking questions about what these tickets mean.2
I greeted my staff this morning with the phrase
"Morning, mind if I ruin your Friday?"
They laughed, but won't be soon enough. The task we've been working on for weeks, ripping apart the codebase changing it to work a different way, fixing a tonne of bugs, making it faster and simpler to add features too. Well business has decided they want us to stop, undo it, spend a month on something "with higher ROI" and then finish it off after that.
Business are expecting this to have no impact on any of the timelines and just to be like flipping a switch. Now obviously I won't let that happen and fight back for more time, but yet another session of compromises, arguments, and yelling. YIPEEE!!!!!!12
Had a follow up meeting today to resolve the issue of Product ignoring our comments about possible issues, better ways to do it etc.
- We are allowed to suggest to Product that they might be doing something wrong
- We are not allowed to tell product they are doing something wrong
- If Product don’t listen, that’s fine, we will document our comments to protect us later.
Product are too sensitive to have a conversation with. We are now going to let them fuck everything up, make some notes and say “I told you so” at a later date.
Maturity at its finest ladies and gentlemen.5
So i've been a dev manager for a little while now. Thought i'd take some time to disambiguate some job titles to let everyone know what they might be in for when joining / moving around a big org.
Title: Senior Software Engineer
- Typically has years experience building what management are trying to build
- Building new features
- Writing code
- Code review
- Offering advice to product manag......OH NO YOU DON'T CODE MONKEY, BACK TO WORK!
Title: Dev Manager
- Former/current programmer
- knows his/her way around a codebase.
- Recruiting / interviewing new staff
- Keeping the team focused and delivering tasks
- Architecture decisions
- Lying about complexity of architecture decisions to ensure team gets the actual time they need
- Lying about feature estimations to ensure team gets to work on critical technical improvements that were cancelled / de-prioritised
- Explaining to hire-ups why we can't "Just do it quicker"
- Explaining to senior engineers why the product manager declined their meeting request
Title: Product / Product Manager
- Nothing relevant to the industry or product line what so ever
- Found the correct building on the day of the interview
- Has once opened an Excel spreadsheet and successfully saved it to a desktop
- Making every key decision about every feature available in the app
- Learning to ignore that inner voice we like to call "Common sense"
- Making sure to not accidentally take some advice from technical staff
- Raising the blood pressure of everyone below them / working with them
Title: Program Lead / Product Owner
- Capable of speech
- Aware of what a computer is (optional)
- Sitting down
- Clicking random buttons on Jira
- Making bullet point lists
Title: Director of Software Engineering
- Allegedly attended college/university to study computer science
- Similar to a technical product manager (technical optional)
- Reports directly to VP
- Fixes problems by creating a different problem somewhere else as a distraction
- Claiming to understand and green light technical decisions, while having already agreed with product that it will never happen10
Had a PR blocked yesterday. Oh god, have I introduced a memory leak? Have I not added unit tests? Is there a bug? What horrible thing have I unknowingly done?
... added comments to some code.
Yep apparently “our code needs to be readable without comments, please remove them”.
Time to move on, no signs of intelligent life here.48
New job was killing me. remote team has an 8 hour time difference to us, and no understanding of it. Constant last minute invites to meetings at 10pm my time. Made worse by the fact that many were unnecessary, duplicates or just plain pointless. So for the last few weeks of last year I made in my mission to clean it up.
New plan: move my hours around on Mondays, stay later, move all the meetings back to back and get everything out of the way for the rest of the week.
First day back and heres how the new plan is shaping out:
- 5:30pm meeting organiser decided we actually need 2 almost identical meetings instead. Sends out a big team meeting for the same time as my 1st meeting at 5pm, as well as the existing one for 5:30pm. Already agreed on by everyone else, so had to go.
- Cancelled my original 5pm meeting for today, said we'll re-arrange it for earlier going forward (not enough time for notice for remote team).
- Went into my new 5pm meeting, turns out we don't need 2. Got everything done by 5:30pm.
- Just to be safe though, a new invite will be sent around for the hour of 5 - 6 "Just in case".
- My 6pm meeting just got cancelled as she has a conflict (despite setting it up 2 months ago)
- Now I have to wait around, after hours for my 6:30 meeting.
..... believe it or not, this is progress.
Happy new year!7
Mobile app crashed a lot after latest release. Everyone called for a meeting to discuss the issue and find resolutions.
Engineering lead for backend team: well part of our problem is we haven’t had time to test everything fully. Maybe product could give us a list of all the features that can’t go down and we’ll prioritize those for testing?
Product: ... ... ... all of them?
Me: laughing hysterically while on mute4
Me: hey I have a major issue I need to discuss. Would you be free tomorrow at any of these times: A, B or C?
Me: ... ... ... ok I’ve a new issue I need to discuss with you right now!16
Managements definition of an MVP:
- Integrate our backend and database with a similar-ish, older internal system built on a different tech stack and different rules.
- Merge the functionality and delete the old one.
- Modify our system to accept 2 types of logged in users.
- Have 2 versions of our API that return different values.
- Update our mobile app to render different data based on which user is logged in.
- Onboard the old system users to this new system.
My definition of an MVP:
- Tell the store we are taking over, that they have to print their labels from our tool, and onboard the users to our app.9
follow on from my last rant.
I've finally gotten my new Jira project. Only thing I seem to have access to change is the Kanban board columns. Still has 50+ fields when creating a ticket etc.
Asked the support team handling the request if this was a mistake. He said no, i'll need to open another ticket to have those changes requested.
Opened and got a reply. Currently there are 2 versions of Jira running. They are working on consolidating them atm and won't help me right now until this is done. I've been asked to re-open my request after the consolidation is done in March 2019.
5 ... fucking ... months, so I can have a competent ticketing process.
He pointed me to a page explaining the move and listing all the changes taking place. Well lets look at the changes they are making that are so critical:
Change 14: Rename "More info" status to "Needs more info".
... Oh pardon me. I didn't realise such critical show stoppers were being addressed. Please do continue. Don't mind me, i'll just be over here taking 4 hours to create an Epic and 6 stories. As you were10
Welcome back to practiseSafeHex's new life as a manager.
Episode 2: Why automate when you can spend all day doing it by hand
This is a particularly special episode for me, as these problems are taking up so much of my time with non-sensical bullshit, that i'm delayed with everything else. Some badly require tooling or new products. Some are just unnecessary processes or annoyances that should not need to be handled by another human. So lets jump right in, in no particular order:
- Jira ... nuff said? not quite because somehow some blue moon, planets aligning, act of god style set of circumstances lined up to allow this team to somehow make Jira worse. On one hand we have a gigantic Jira project containing 7 separate sub teams, a million different labels / epics and 4.2 million possible assignees, all making sure the loading page takes as long as possible to open. But the new country we've added support for in the app gets a separate project. So we have product, backend, mobile, design, management etc on one, and mobile-country2 on another. This delightfully means a lot of duplication and copy pasting from one to the other, for literally no reason what so ever.
- Everything on Jira is found through a label. Every time something happens, a new one is created. So I need to check for "iOS", "Android", "iOS-country2", "Android-country2", "mobile-<feature>", "mobile-<feature>-issues", "mobile-<feature>-prod-issues", "mobile-<feature>-existing-issues" and "<project>-July31" ... why July31? Because some fucking moron decided to do a round of testing, and tag all the issues with the current date (despite the fact Jira does that anyway), which somehow still gets used from time to time because nobody pays attention to what they are doing. This means creating and modifying filters on a daily basis ... after spending time trying to figure out what its not in the first one.
- One of my favourite morning rituals I like to call "Jira dumpster diving". This involves me removing all the filters and reading all the tickets. Why would I do such a thing? oh remember the 9000 labels I mentioned earlier? right well its very likely that they actually won't use any of them ... or the wrong ones ... or assign to the wrong person, so I have to go find them and fix them. If I don't, i'll get yelled at, because clearly it's my fault.
- Moving on from Jira. As some of you might have seen in your companies, if you use things like TestFlight, HockeyApp, AppCenter, BuddyBuild etc. that when you release a new app version for testing, each version comes with an automated change-log, listing ticket numbers addressed ...... yeah we don't do that. No we use this shitty service, which is effectively an FTP server and a webpage, that only allows you to host the new versions. Sending out those emails is all manual ... distribution groups?? ... whats that?
- Moving back to Jira. Can't even automate the changelog with a script, because I can't even make sense of the tickets, in order to translate that to a script.
- Moving on from Jira. Me and one of the remote testers play this great game I like to call "tag team ticketing". It's so much fun. Right heres how to play, you'll need a QA and a PM.
*QA creates a ticket, and puts nothing of any use inside it, and assigns to the PM.
*PM fires it back asking for clarification.
*QA adds in what he feels is clarification (hes wrong) and assigns it back to the PM.
*PM sends detailed instructions, with examples as to what is needed and assigns it back.
*QA adds 1 of the 3 things required and assigns it back.
*PM assigns it back saying the one thing added is from the wrong day, and reminds him about the other 2 items.
*QA adds some random piece of unrelated info to the ticket instead, forgetting about the 3 things and assigns it back.
and you just continue doing this for the whole dev / release cycle hahaha. Oh you guys have no idea how much fun it is, seriously give it a go, you'll thank me later ... or kill yourselves, each to their own.
- Moving back to Jira. I decided to take an action of creating a new project for my team (the mobile team) and set it up the way we want and just ignore everything going on around us. Use proper automation, and a kanban board. Maybe only give product a slack bot interface that won't allow them to create a ticket without what we need etc. Spent 25 minutes looking for the "create new project" button before finding the link which says I need to open a ticket with support and wait ... 5 ... fucking ... long ... painful ... unnecessary ... business days.
... Heres hoping my head continues to not have a bullet hole in it by then.
Id love to talk more, but those filters ain't gonna fix themselves. So we'll have to leave it here for today. Tune in again for another episode soon.
And remember to always practiseSafeHex16