Skip to main content

Weekly Engineering Meeting

Jan 24:​

Agenda: Ben Ross: PM approval before testing Praneeta Mhatre:

  1. are we leaving enough time for testing in our planning? - Getting stuff out correctly is more important than rushing into something and pushing broken code.
  2. #spankthejankTM - Can we create tickets for jank when we see it/ add it for hotfixes and like POWr hour have an spankthejank hour for cleaning it up? Doesn't have to be every week.

jankparty - pair Sr with a Jr. Wednesday. QA process:

  1. How do we parallelize testing with a mirror of prod. - Docker QA Tool.
  2. How do we ensure that two tickets touching similar parts of code doesn't break on prod because they don't together. - QuASS
  3. Aways follow the process. You can do code review and PM approval in parallel.
  4. If many bugs, PM needs to be looped in will prioritize the bugs.
  5. Batch testing notes, and they can go through PM Approval code review. iteration .#2.
  6. Exception is hotfixes.

Show and Tell: Joe: These are ongoing issues i see crop up in our Javascript code

  1. default function params and other stuff which isn't supported by IE
  2. mutating state directly (causing rendering issues) -> this.state.xyz = "123";
  3. setState to mutate state in methods where it should not be called such as render (can cause render loops)
  4. failure to remove listeners in componentWillUnmount (can cause memory leaks for the user)
  5. over-reliance on jquery (we want to stomp jquery out of our code as much as possible -- if your'e reaching out of a component and into the dom its usually (not always) a sign of a bad pattern that needs to be re-worked)
  6. lots of reliance on global methods and variables (lets start including these)
  7. binding this incorrectly (should be using foo => { // method code here } to declare functions (i've been failing at this)

the above list is non-exhaustive but super important to start hammering down because lots of time is being spent fixing bugs due to the above issues.

interfacing with this sort of code can be extremely difficult as well which means either rewriting it so that its clear for all developers and fixes bugs (which takes time) or everyone has to hack around it (which also takes time and compounds the issue).

writing correct code takes less time than writing fragile code quickly and shipping it to prod because correct code has to be supported less (by everyone involved, this includes QA, support, engineering and PMs) and can be improved and modified faster, whereas incorrect code breaks and takes time away from all of the previously mentioned team members.

eslint is a really good linter which is completely set up and ready to use with the powr codebase -- you can get it to work with atom and vscode -- it will give you a list of errors and warnings in your console on save -- if you're not seeing those messages then you haven't set your linter up correctly... if you are seeing those messages and you're letting it fly... why? some warnings are fine to ignore at times (such as the magic number warning) but true errors should never be ignored.

you should not use auto-correct with your linter, you should use it as you would use spell check when writing an email (so that you can learn from your mistakes, like spell check or any other auto-correct / hint system -- its AI assistance for developers).

also, its useful to keep your developer toolbar open in chrome during the duration of development as you will be able to see errors and warnings (such as the plethora of ~memory~ React related warnings and errors throughout our site) and this will help you fix these things before launching to prod. (edited)

Follow ups:

  1. Jobs - Ivan posted a list in the channel. Do we need tickets?
  2. Should we have a #firesfromlastweek?
  3. Puru: check if restart server works when mem issues.
  4. MobX show and tell - Praneeta
  5. eslint - Joe
  6. request for QA - @eng ticket link has passed QA. I have moved it to “Ready To Launch” in the QuASS Sheet.
  7. QA updated process - meeting / rewatch recordings.
  8. Testing time - automate, ensure we are testing only what needs to be tested.

possibly selenium? record and quick test. - should we look into this.

firesfromlastweek: Databases should be avoided on /view page. If we need to make a call, it should be cached. Scout is a good tool for this. also has a little chrome extension.

how do we feel this week?

  1. collisions
  2. Sharing test servers
  3. wario rooms
  4. public channels
  5. fuck threads
  6. qa testing
  7. all things nice

Jan 17:​

Agenda:

Praneeta Mhatre:

  1. zendesk tickets >> jira tickets.

  2. praneeta shame - slate in IE and localstorage issues

  3. if (document.querySelector('#js-standalone-loader')){
    ReactDOM.render(

    , document.querySelector('#js-standalone-loader')); }

  4. refresher on outline for new members

Aigul Imadildayeva:

  1. Praneeta summary: components.yml is not responsible loading things in Ruby and on the /view page. We avoid loading simple copies on /view

Detail: guys, regarding SC components.yml not loading automatically correct English version: Praneeta pointed into layouts/application.haml.html file where we are excluding “views” for SC loader, also it will auto load only for JS files, haml files we have to do it manually in an old school way: https://www.powr.io/simple_copies/4759/edit Thx Praneeta!

  1. does anyone else has this error in their local terminal, whenever I try to create new plugin, in terminal I see this error: ActionController::RoutingError (No route matches [POST] “/1113”) => where 1113 is my created plugin’s ID

Show off: Yerassyl: Tests https://www.getoutline.com/collections/7fc385cf-78f0-442b-bf87-c2f0e0b26262

Follow ups: Puru: Did everyone add the cron jobs they are aware of? Pilar: channel to use to alert support about important updates: we killed #supportupdates, so please put everything in #support (we’ll clean up the spam from automated stuff in there at some point :bowser:)

how do we feel this week?

  1. collisions
  2. Sharing test servers
  3. wario rooms
  4. public channels
  5. qa testing
  6. all things nice

Jan 10:

Agenda: Zac: Paypal thing https://www.lucidchart.com/invitations/accept/6a19d734-a7ff-4c2e-9bed-20c85d75c00f

Pilar Sterne: Communicating/documenting migrations Card status

Puru Dahal: Followup on list of all the schedulers

Praneeta Mhatre:

  1. Good resources to know about https://docs.google.com/spreadsheets/d/1BBmam35RdQznHXJWYoXNEJeg-ehTY6bAA66EvenzI2E/edit#gid=0 and https://docs.google.com/spreadsheets/d/1EkAR7Tog8l1As3_5KWaozFQ9v1sT8ewftw1AT5z3kMc/edit#gid=0
  1. ressurecting (Wix UI stage formbuilder) https://i.imgur.com/qft8XiU.png It’s almost configured and works AF, just has some modal height issues. What’s needed for that?

Brent Gummow :

  1. Jira status: Who moves card to done?

(discussion point, not a current question to be answered here 😉 ) 2. Letting support know about updates - support or supportupdates slack channel?

Sergey Tyan: testing pure JS helper functions using Jest: https://www.getoutline.com/doc/testing-pure-javascript-helper-functions-TlqJvr5loQ

Show off:

Follow ups: Wix testing on staging- Puru needs a Jira for this.

QA corner:

how do we feel this week?

  • collisions
  • Sharing test servers
  • wario rooms
  • public channels
  • all things nice

Jan 3:

Agenda: Puru Dahal: List of all the scheduler (possibly on getoutline) with Cron times (so its easier for #support folks and me to know what caused the sidekiq spike, and if its expected or not when #monitor channel is reporting high enqueued list?). For example:-

  1. PowrMailSaveWorker (Everyday at 9 AM PST)

Suggestion: Calendar for schedulers. Support can look at it if monitor is red alert eng. If Job 1 and Job 2 have same time slots, it causes craziness. If db connections are not high, can increase workers(for eng) Puru will list from heroku scheduler and calendar. Will need estimate from responsible eng for how long the task needs to run.

Praneeta Mhatre: Wix formbuilder reactification and the decisions made.

Show off: Zac's amazing campaign builder demo

Follow ups: Paypal thing from Zac - Pilar Jira for Zac Emails testing on staging alpha Wix testing on staging- Puru needs a Jira for this.

how do we feel this week?

  • collisions
  • Sharing test servers
  • wario rooms
  • public channels
  • all things nice

Dec 20:

  • PURU: What is and how to setup/use .gitmessage template and automagically have better git message and MR title/description. Follow-up on last week's and this week's @Curlee's git suggestion.
  • JOE: Suggestion:add extra info to your MRs in gitlab:
    1. add link to any jira tickets which the MR covers
    2. add extra info if your MR has any dependencies (migrations, dependent on a different MR first etc.)
    3. Add a quick blurb explaining what the MR is doing examples:

Wix APP by user - PURU working on this.

Dec 13:

  • BRENT: ignore/forceIgnore in inputs to keep backbone from triggering - And do we still need to have the crazy uber-listener in base_settings? (line 1131)
    • ONLY add ignore when you don't want your input to directly impact the backbone model - default behavior WILL update backbone. This problem will go away when we switch 100% to mobX and drop backbone.
  • ZAC: staging and alpha workers don't always get along - has been a problem testing form payment updates, likely to cause problems for other things moving forward, worth a discussion
  • We now have redis instances for alpha and staging so we should be good!
  • If there are other issues, please let puru know
  • We need to make a ticket to test this stuff - Liza can test - PURU
  • We do NOT want to separate the db..
  • PURU: few thing to consider while running migration on app model (especially if you do not want to trigger screenshot on each update):-=> If you are calling app.save please make sure to assignapp.skip_screenshot = true followed by app.save=> If you are calling app.update(attributes) you can just pass skip_screenshot as an argument. Example:- app.update(content: {}, skip_screenshot: true)Posted in #engineeringDec 11thView messagehttps://www.getoutline.com/doc/migration-checklist-3QjXxFgOUX
  • Zac still working on paypal knowledge dump - potentially with killer presentation

Dec 6:

  • JOE: created a generic powr react modal that uses react modal...
    • powr_react_modal.jsx
    • Joe will create a GetOutline tutorial for how to use it...
  • Follow up on react component documentation - talk to Kelsey
 consider folder in get outline? Or can everything live in the style guide?
  • BEN: Availability over holidays
    • IF YOU ARE GOING TO BE OFF, PLEASE REQUEST TIME OFF ASAP AND UPDATE CALENDAR
  • Paypal engineering school with zac if possible:
    • Start with a high level Payapl Technical Audit doc so we can know what's being used and where - then chat about it.

Nov 29:

Aigul: reassigning the value => Bad! BAD: app_created_at = DateTime.now app_created_at = @meta[“created_at”] if user_signed_in? && @meta

GOOD: Use a new variable... app_created_at = @meta.try(:[], ‘created_at’).present? ? @meta.try(:[], ‘created_at’) : DateTime.now

Zac: find ~/powr_projects/powr *.rb -exec ruby -c {} \; Tells you where your syntax error is in Ruby.. (can it be added to our local foreman's procfile.dev?) Zac will check out and make an outline or report back..

Puru: Prevent running multiple parallel deploys on same environment. If 2 deploys are triggered within like a minute, the second one can replace the first one and might not have all the changes
 (because we have 2 runners with different cache) - can we keep this from being possible? (sergey/puru looked into). Takeaway: - LOOK AT JOBS ON GITLAB WHEN PUSHING TO SEE THAT SOMETHING WAS JUST PUSHED TO YOUR SERVER - GIVE IT 5 TO 10 MINUTES BEFORE. (Sergey and Puru will continue to look for solutions)

Puru: nil? vs empty? vs blank? Learn the difference: https://blog.arkency.com/2017/07/nil-empty-blank-ruby-rails-difference/ Takeaway: USE BLANK? AS YOUR DEFAULT

Sergey: add optional chaining polyfill to our project https://babeljs.io/docs/en/babel-plugin-proposal-optional-chaining Works like .try for ruby but for javascript
 Takeaway: SERGEY WILL ADD TO OUR CODEBASE

How to fix local webpacker compile - this is soooo slow right now. (FIXED!) To make it prettier when you debug locally in powr/config/webpack/development.js:

devtool: 'source-map' // slow, but shows pretty code
...
devtool: 'eval' // fast, but shows ugly code
...

Yerassyl: Testing shopify with mocks - (vcr?) He is writing tests (aigul is helping with knowledge and documentation), starting with pricing, goal of doing full end-to-end testing... When dealing with third parties (like shopify), it gets slow and tricky. VCR https://github.com/vcr/vcr - a tool for making mocks, it records what a proper response looks like (use for something like recurring shopify payments...)

  • start by manually testing and see what type of responses you get Joe has written some tests on the social feeds side you can look at for an example
 (he was using jest)

Yerassyl: He's hopefully going to be joining us in person next year!!!! WOOOHOOO CONGRATS!!

Liza starting as QA lead on monday - will own QUASS

Zac: How to deal with QA focusing on wrong things sometimes (like interface) when you really want to just see if the flow works or not
 . Try being more vocal about exactly WHAT you want to have tested.

Can we see exactly what branches are on staging at any given point?

Nov 15:

Praneeta Mhatre: Josh’s email needs to be swapped out with [email protected] for AWS - send code issues

Ben Ross: updating specs to a task when you make additions not in orig specs

  • when working on a task and you do some cleaning up or touch any code that is outside of the testing specs - please add a note to test other things which are affected. May be nice if MR (reviewer also suggests)

Ben Ross: PM approval + testing sheet sync

  • Ben Ross:stop using functions that crash ie: startsWith, includes, etc.# Nov 8:

Brent: Weird email thing - works locally, not on staging... anyone have any ideas about user_mailer/end_user_app_form_mail.html.haml ? If emails don't show updated code, may be workers havent' picked up the new code. Restart.

Ben Ross:

  1. Revisit: How to use simple copies

  2. how do we remove prettier and never speak of it again

Praneeta Mhatre: https://docs.google.com/spreadsheets/d/1Qn2xBVz2TITRw0JmrSzGkJTpectUVFgUfwypDsAoRSw/edit#gid=0<- Tyrone’s magical list of shit that keeps breaking

Praneeta: Staging db - and how to make sure that the data from migrations is also added to the db if the database is removed and started over (columns/schema came back correctly, but no migrations that added data to tables were run)

Nov 1:

Agenda: Praneeta:

  1. sharing updates to application.yml REDISTOGO_URL: redis://localhost:6379

  2. reactify-button-settings - content team, what is status?

  3. prettier - do we all hate it? - kill it and ensure you write readable code. - Praneeta will kill

    1. pros: code looks nice
    2. cons: wip commits are pain
  4. Experiments and writing code that can be cleaned easily (Are we creating tickets for cleanup?)

  5. MRs - please add tickets and screenshots/screencasts

  6. Css changes: 1 fix to break them all - how do we test how our 1 css change breaks unrelated things - shopify css changing dropdowns everywhere in settings in low res mode - I know super edge case - but couldn’t think of another example. But there are plenty

  7. How to share testing environments - please be vocal, use public channels for communications.** **

  8. Ivan / Joe pricing storing structure jam?

Zac:

  1. quick talk on smart butt-ons and powrmail to powr campaigns

Sergey:

  1. Docker demo on Teddy’s computer
  2. Qa dashboard demo on my computer

Follow ups: Praneeta - collisions, how do we feel this week?

Wario rooms, public channels, qa testing channel and everything nice bugsnags clearing partaaaaaayyy.

Oct 25:

Agenda: Reminder - record for Sergey and Aigul (also Puru) Ben: process related items PM approval column before QA

  • could be in parallel/ before code review.
  • to ensure we are pushing what we thought we wanted to push.
  • all projects will have project managers moving forth

QA

  • Sunil could also be used to overnight testing. Platform related (shopify etc) could go to him. Has product experience.

Praneeta: Button reactificathon Help slides - https://slides.com/praneetamhatre/deck#/ Some more documentation WIP https://www.getoutline.com/doc/fantastic-configs-and-where-to-find-them-9ofg4iRrRx https://www.getoutline.com/doc/powr-components-930C38ynVs Reactificathon: Brent, Joe, Pilar, (Chelsea may be) - Content Tab Ben, Zac, Kelsey, Devis (Teddy, may be) - Design Tab Praneeta will answer questions and continue documentation as questions come up.

branch: reactify-button-settings (brent/joe/pilar) branch on gitlab: content-reactify-button-settings

Social Media icons for Sergey And Aigul.

Follow ups: Praneeta - collisions, how do we feel this week?

Wario rooms, public channels, qa testing channel and everything nice bugsnags clearing partaaaaaayyy.

Ticket for Pilar to list strengths of QA

Oct 18:

Agenda: Praneeta: Updates channel.

  • This is not just for major updates, it's also for tiny little changes, including simple copy and marketing updates etc.

Praneeta: Launch fail, explanation, lessons, Get suggestions.

  • Import prod forms locally when you are building something to ensure things are ok.
  • Have test forms on prod that have all the things/ different combinations, makes it easy to test.
  • Good to have a testing sheet/specs ahead of time.
  • Good to break tickets down with small points and reasonable amount of technical detail (only because this is technical project). This one was tough because there was no baseline.
  • Prioritizing bugs/ testing/ getting feedback.
  • Always test with non admin users

Praneeta: Note about slug size and docker.

  • Praneeta will investigate on staging.

Praneeta: Show and tell may be for TODO solutions.

  • TODO list ticket works great for me.

Follow ups: Praneeta - collisions, how do we feel this week?

Pilar - TODOs/ PRs Wario rooms, public channels, qa testing channel and everything nice bugsnags clearing partaaaaaay.

When you get an error: error: cannot lock ref 'refs/remotes/origin git remote prune origin

Oct 11:

Sergey upgrading babel will reduce the bundle size https://babeljs.io/blog/2018/08/27/7.0.0

Kelsey Raczak [1:54 PM] updating bootstrap

Praneeta Mhatre [2:48 PM] project collisions

Oct 4

Agenda: Reactified settings https://slides.com/praneetamhatre/deck#/ QA testing: Check calendar and ask for help. If no response @mention people

From last week: Pilar - May be Jira for code reviews. TODOS are terrible Wario rooms, public channels, qa testing channel and everything nice

Sept 27

Agenda: Puru: What is Memoization and how to Memoize database calls?

Brent Gummow RE: Spec and Public assets. It turns out that I had a bunch of files in my project that were compiled assets (thousands) that were not needed. If you have files in your public/assets folder, you can safely delete these. That was the biggest issue i was having with my searches. Ben also found a way to exclude folders from atom searches, so rather than delete specs (since they are very occasionally used), I have added information on excluding folders in your Atom searches to outline - you can see that here: https://www.getoutline.com/doc/exclude-directories-like-spec-when-searching-in-atom-xG717cPms3

Ben Ross:

  1. 404s and 500s in console every time you load a page getting annoying
  2. if you run a migration on existing Apps, use update with skip_screenshot: true or you will generate millions of screenshots

Praneeta Mhatre:

  1. refresher on simple copies in js

  2. reminder on how to update powr react components outside of the react component https://www.getoutline.com/doc/creating-react-components-for-powr-settings-fxkESTMBVe#Triggers\\\-\\\-1

  3. Praneeta show off

Sergey Tyan:

  1. https://docs.gitlab.com/ee/ci/yaml/

docs.gitlab.com Configuration of your jobs with .gitlab-ci.yml | GitLab Documentation for GitLab Community Edition, GitLab Enterprise Edition, Omnibus GitLab, and GitLab Runner. 2. Docker presentation

From 2 weeks ago: Pilar - May be Jira for code reviews. TODOS are terrible - everything sucks Wario rooms, public channels and everything nice

Followup:

  1. Doc for migration checklist

  2. service worker js 200 - puru

  3. powrcounter staging - zac

Sept 13

Praneeta: different color/icon for staging and local powr icon. Will prevent derp things like looking at the wrong place (doesn’t happen here often), emails from staging will be less freaky and easy to identify (happens often) And may be whitelist some staging emails.

Sergey: No more chunks ci makes sense - build assets using CI - becuase heroku has lower RAM. > 5 mins to compile clientside newrelic to benchmark

Follow ups: Sergey require next week - Teddy - May be Jira for code reviews. TODOS are terrible JSON B demo Wario rooms, public channels and everything nice

Sept 6

Agenda:

Aigul Imadildayeva - Manual on upgrading Hirefire workers => it is a request 😅 (edited)

PURU - getoutline, how to disable hirefire and increase workers - - if queue > x -> notify - Ben making eng task

Praneeta Mhatre quick way to add extra attrs on model objects (eg current user) (Aigul) ^^ as_json in user model (edited)

Puru Dahal [12:08 PM]

  1. Redis.cache vs Fallback::Cache
  2. REDIS.get/set vs Fallback::Redis.get/set
  3. Separate redis instances/list for cache, redis.rb, sidekiq, DDOS, split

Puru Dahal [1:25 PM] https://i.imgur.com/YQWM2k9.png https://i.imgur.com/YQWM2k9.png

Followups from last week: Heroku slug size - slack bot reminder for Puru to do it manually

Wario rooms Public channels usage Tickets from last week

Aug 30

Brent

  • Do we still need all the old spec/ and public/assets/pages in the code base? They significantly increase time searching

Ticket - Brent will sync with Ben

  • jQuery click listeners in a react world el.click, ()=>{} -> document.on('click', el, ()=>{})
    • possibly create a outline wiki - also add !! warnings from Ben
  • powr_helpers and POWr.premiumStatusLabel[level]

POWR HOUR? - change old cases.

Zac Wickstrom 😎

  • Rails error messages aren't a thing anymore. Can we bring those back?

POWR HOUR for Puru - how to debug this

Puru Dahal

  • Addressed Rails log here:-

Puru Dahal Here is the error. Its easier to miss, even during the review process. Take away from this issue:-

  • When you have hotfixes like this, please make sure your app restarts.
  • Introducing JSONB

Praneeta Mhatre the comeback of wariorooms when server is down powroutlet mem leaks

Pilar Sterne

  • Introducing Teddy to the team
  • Using public Slack channels for communicating status of things

Aug 23

Sergey - TIL Webpack parses require calls withs dynamic arguments and converts them into regular expressions in order to know which files to include during a compile time.

Praneeta - Code reviews. is there a better way to do followups? TODOS is pretty useless mobx configs

Ben Ross - we need to stop ignoring bugsnogs proposed alt solution to ab testing

Brent volcano automated testing >> core apps

Kelsey z-index doc

Followups from last week:

  • Updating support - going ok?
  • Redis issues addressed? large files / emails etc
  • This one is from before - Emails on follower db
  • periodically clean Heroku slug on production to reduce deployment time - ben will prioritize
  • killing old branch - PURU on it - Ben create task

Sergey require next week Teddy - May be Jira for code reviews. TODOS are terrible Bugsnag - if < 15 mins, fix it. > 15 mins add to Jira

Split gem is a pain in the ass. đŸȘ // Overrides would be totes

def powr_ab(ab_test_name, *ab_options)
random_seed = "#{ab_test_name}#{cookies[:unique_id]}".hash
random_generator = Random.new(random_seed)
random_index = random_generator.rand(0..ab_options.count-1)
ab_test_value = ab_options[random_index]
AbLog.find_or_create_by(user_cookie: cookies[:unique_id], name: ab_test_name) do |log|
log.value = ab_test_value
log.user_id = current_user.id if user_signed_in?
end
return [ab_test_value]
end

Aug 16 2018

Ben Ross; Updates to make support aware of what they need to pay attention to related to updates channel changes technical part should be gitlab

  • Call out support's attention - so better communication of what changed.
  • If P1 app or P1 platform is touched - post in support channel.
  • If site wide changes.

Puru Dahal

  • RESTful Controller#routes
  • Namespace Controller#routes

Brent Gummow

  • No documentation is better than incorrect documentation (PowrRadioImage)

Ben: Joe presents what he did in social feed

Zac: What is feature creep? How to spot it and what you can do to stop it

Praneeta Mhatre: Redis issues and what to look for in the future to avoid it - (when writing code and when reviewing code)

Followups from last week: 120 line, still not set. https://gitlab.com/powr/powr/merge_requests/423/diffs Sass compiling decisions periodically clean Heroku slug on production to reduce deployment time - ben will prioritize killing old branch - PURU on it