iteration cover image

iteration

Latest episodes

undefined
Mar 23, 2020 • 57min

Developer Roadmap 2020 🗺

Welcome to Iteration, a weekly podcast about programming, development, and design.My name is JP, I am a software engineer at Opendoor. Today I am joined by JohnJohn Intro — I build and maintain Web Apps for startups.Developer roadmap 2020Web search "Developer roadmap 2020" and you'll find this Github repohttps://github.com/kamranahmedse/developer-roadmapYou can also find it at https://roadmap.sh/Its a set of charts demonstrating the paths that you can take and the technologies that you would want to adopt in order to become a frontend, backend or a DevOps.Looking at a chart with hundreds of "Nodes" each representing potentially hundreds of hours and their own specialties all-togetherLooking at this for 2 reasons1 — If you are new to development, this helps you make sense of all the resources, languages and frameworks. These roadmaps cover everything that is there to learn. Don't feel overwhelmed, you don't need to learn it all in the beginning if you are just getting started, focus on the core and the rest comes over time 2 — If you are experienced it helps you identify and organize gaps in your knowledge. The two PathsFront End — "Everything the user sees"Back endDev opsJohn: What about Mobile? This is called the "Web Developer Roadmap" but there is a lot of overlapBasicsWeb Dev 2020Front end + back end + dev opsPre-reqs:John: How does someone choose a path? JP: It depends — what interests you? Everything is biasing toward the front end.John: When in doubt pick front-end, especially in 2020. Serverless, GraphQL etcFront End Roadmap"Everything the user sees" https://roadmap.sh/frontendJP: Honestly, I don't know how DNS works. I should really do a google search for what happens when you do a google searchJP: Surprisingly, I know a lot of the stuff up until it drops down into PWA stuff.JP: mmm... do you really need to know GraphQL? This might be one of those things where I'm old man shaking fist at cloudBack-end Roadmap"Everything that the user doesn't see" https://roadmap.sh/backendJP: I wonder why javascript is the personal recommendation for back end languageJohn: Web: JavaScript, Ruby, Go or PHP seem to be good choices in today's landscape. Mobile of course is C# or JavaDevOps Roadmap"The equipment it all runs on" — The boiler room in titanic https://roadmap.sh/devopsJP and John are least experienced in this bucket. JP: Learn heroku lol"Get some administration knowledge in some OS"Wrap UpPicks:Cloud App — Way easier way to share screenshots + gifshttps://www.onsched.com/ - Appointment API
undefined
Mar 13, 2020 • 42min

😷 Working Remote: Coronavirus Special

Welcome to Iteration, a weekly podcast about programming, development, and design.John: Hi I'm John a software engineer at a tech start up — Joined by JPJP: I'm JP, I'm a software engineer at a tech start upToday we're going to be talking about something that's frequently discussed on the Twitters-phere:Remote work.Take me through your day(day in the life of a remote developer)Get dressedTake a lunchWhat are some of the challenges you've faced?John: schedule work just becomes intertwined with life. Dedicated meeting days or blocks make life so much better. Having some kind of boundaries.John: communications making sure to have a place for “chatter” and an “updates” cadence.Some tips?Get dressed every morningHave a dedicated space or deviceGet good at notification settings and use themSlack Status vs "Snooze" — For the hourOffice Hours / ScheduleOver communicate in passive channelsVideo / Audio SetupGood Audio is most importantInvest in lighting before a camera.A bad camera with good lighting is better than good camera with bad lighting.Change your sceneryWork from energy not time.Reduce distractions. Really don’t work with Netflix on in the background.What are some of the pros / cons of working remote?John: Pros: random bunch dates with the wife. We brunch hard.John: Flexibility to travel and work. (Trip to Nashville this weekend) .John: Lunch break bike rides and dip in the ocean.John: Changing scenery, will regularly work from a park on a mountain top or pretentious coffee shopsWhat are your favorite tools?Standing DeskLoomSlackMiranda time zones appAudio / Video SetupHeadphones with Good Audio #1 priority, #2 is noise canceling (if you need it)Blue Yeti MicA bad camera with good lighting is better than a good camera with bad lighting.Elgato Key LightLogitech Brio Webcamhttps://github.com/KyleAMathews/typefacesPhotos of our home office Desk SetupsResourcesBook: RemoteBook: Ultimate Guide to remote workPicksTrailer Github AppTypefaces — Self host google fontsSupermarket — Just a fun book
undefined
Mar 9, 2020 • 38min

Third-Party API's 🔌

This week: Essential integrations / services / API' sWe are going to be talking through the main / really popular API partners out there and give some quick feedback on how to integrate/go about them. Plus some lessons learned to keep in mind when planning integrations like this.Sendgrid + Other Transactional EmailJohn: Formatting emails — inline styles only.John: Some services have "Templates" with "Placeholders", some you pass the full HTMLJohn: Having some kind fo "log" object in your own domain can be very helpful.John: Priority on background jobs for timely emails —JP: Iterable. Opendoor uses this tool to send text, email, and push notifications. Everything hinges around handlebars / mustache and OOF - inline stylesJP: Side project with send grid, just a list of template idsawait deliverTemplateEmail({ to: user.emailAddress, templateId: SOME_TEMPLATE_ID, data: { contactFirstName: user.firstName, viewMyAccountLink: ${config.BASE_URL}/user/dashboard, }, });Stripe + Other Payment ProvidersJohn: Tokenization and data storageJohn: Drop in vs Whitelabel — "Checkout" vs "Elements"John: Embrace Test Mode in Stipe (Super powerful)John: Subscriptions, Promocodes + MoreJP: I actually don't have much to say about payment providers. The interesting thing is that in Opendoor world, we hand off our users to an operator. I.e. you wouldn't purchase a home a la AmazonTwilio (SMS)John: STOP replies edge caseJohn: Logs are helpfulJohn: Twilio WebhooksJohn: Testing mocks is really usefulJP: Seriously, twilio powers the world. We've used tools that hook into Twilio that provide an interface for customer support. See Front AppScheduler / Chron JobsJohn: Heroku SchedulerJohn: Think about failure handling, resend logic into scheudulersOAuth Login?Other?PicksJohn: Sweet Maria's Green Coffee Beans and Roasting GuidesJP: None!
undefined
Mar 2, 2020 • 47min

Code Reviews 🤓

Welcome to Iteration, a weekly podcast about programming, development, and design.My name is JP, I am a software engineer at Opendoor. Today I am joined by JohnJohn IntroThis week on code reviews What makes good code review? Here's a link I found on reddit a while ago:http://cassandra.apache.org/doc/latest/development/how_to_review.htmlhttps://www.reddit.com/r/cscareerquestions/comments/byxmk1/what_makes_for_a_good_code_review_session/Another tweet:https://twitter.com/addyosmani/status/1198502828425150465Any good / bad experiences with CR?JP: It's not personalJohn: I've worked with team members who take feedback as a prescription for every timeRant about chefs, recipes and conceptsJohn: People not giving the PR in context. It's flagged WIP and then calling out a comment or a long method. Focus on the approach not the syntax at this point.John: I give code reviews for my clients team or other agencies.Can feel like a power struggle.I have to sometimes be open minded about solutions.If tests are passing and it's reasonably documented and maintainable, it gets merged.Example: Very javascript heavy interaction that could of just been MarkupWhat was your first CR like (receiving it and giving it)?JP: it took me a while to get comfortable leaving code review for people who I looked up to. +1John: It's hard getting feedback from the team who works under you, they can be shy about it. Can be frustrating. That's why at several points I've literally paid a tutor.How frequently do you do it?John: I get reviewed once a week. I give reviews multiple times a day.How is CR Conducted at John's agency vs at Opendoor?JP: Different kinds of PR's - WIP, Ready for Code Review, etcJP: CR EtiquetteJohn: It's pretty informal — working on stronger processes around this. We "Sometimes" do a WIP review. Lead Dev or I always do a final review before deployments.John: For more "final" reviews, I try to summarize my thoughts into an actual checklist into the main comment body.CR TipsJP: Take your time with itJP: Pull the code down and run it. Tinker around. This helps me see the bigger pictureJP: Know when to leave nit pick comments.JP: Think of the potential test cases before you read them.John: Giving Good feedbackConsider the McKinsey ApproachPermissionObservationI noticed that... Have you considered...Try to take ego out of itNever assumeCompliment Sandwich —Bring it all together: Wow, this was a lot of hard work. Great job overall. I noticed that you brought in JQuery as a dependency. Have you considered using Vanila JS instead? That way we keep our site fast and avoid possibly uneccisary dependencies. Here's an article that might help. Very impressed by your CSS skills in this. Keep rocking!JP: Get other engineers involved +1 Mob ReviewJohn: Ideally the person who submitted the PR takes the time to fix their own code. Sometimes you've just got to get code live.Async "Pair" — turn on screen recorder, walk through all your comments as you fix them. Do this when code is pressed for time.PicksJP: https://www.gitify.io/JP2: https://www.reddit.com/r/cscareerquestions/comments/byxmk1/what_makes_for_a_good_code_review_session/John: Rocket Emoji's - https://matthewpalmer.net/rocket/
undefined
Feb 24, 2020 • 57min

The Freelance Episode 💰

Iteration: A weekly podcast about programming, development, and design.JP's ExperienceMinimalOften saying "yes" too frequentlyThis year I only said yes to opportunities I could deliver onDoing consulting work for friends.... 🤔❌I come from a design background where I was known as the "design guy". To this day, people still ask me if I can make logos for them.John's experience with freelanceI started Freelancing in June 2015 (Small Rails work)The last 5 years I've built it into a small agencyWe did over $350k last yearI've been able to travel, have flexible hours, and pick and choose projects and learning.Pros of freelancingExtra cash (on the side)FlexibilityLot of different projectsLess politicsYou have the power to negotiate and capture your full value with no lost efficiency or politics at play.Cons of freelanceNo paid time offNo benefitsNo growth opportunities - You have to be a self-starterTaxes, paperwork business developmentSometimes you get boring projectsLonelinessHard to find work at firstYou have to be paid less than you are worth. That’s capitalism. There has to be a gap between what you cost and the value you provide.Moving from project to project gets hard. You need to be sure you really like / want shallow variety.Getting startedYou need to pick a skill/stack/specialty.Make sure you have someone out there who’s paying people for it.People need to understand what you do and who you do it for.“I build Wordpress sites for dentists”“I do Ruby on Rails for medical startups”It positions you as a specialist. Specialists have more authority, less competition and make more money.How to find clients (at first)Free or discounted work for NonprofitsUpwork / Thumbtack / CraigslistPortfolio work that's as close to a real project as possibleEquity work for startupsOpen sourceBlogging (my top 2 biggest clients were from my blog)This season shouldn’t last for more than a year. If it does, you may want to consider a "joby job"Once leads are coming to you:Raise your rate by at least 20% or so every estimate until your rejection rate is over half.If you are landing every bid, it’s a bad sign. You are too cheap.JP's Formula = Hourly rate at his "joby job" ~ $50/hr — double it or triple itBilling approachesFixed FeeMilestone paymentsYou get to a point of your hourly being dilutedValue based billingMilestone paymentsUnderstand the business enough to get a sense of the potential value you can provide.Ask lots of questions to really understand their business. Skim books, YouTube anything to be able to speak intelligently about their business needs.Once you quantify the outcome:“You make $300k a year from your website leads now, you think my work could improve that by 20%. That’s $60,000. My services are just an investment of $12,000 that you’ve estimated will give you a return of $60k in your first year”So instead of charging $2k for that static marketing site, you can be confident in charging $12,000 - it’s a small investment for the returns the client says they should get. It’s a deal.Charge more.By pricing yourself “competitively,” you inadvertently signal to them that you’re “average” — and great clients, by definition, aren’t looking for average.It takes time.My average client lead to close has been about 2-3 months in the last 3 years. The average client revenue has been over $50k per client.Hourly / Retainer BillingPre-pay is the way I was doing it. Discounts for higher chunks of hours. This worked really well for ongoing development and maintence contracts.ToolsHarvestUpworkCatchTransferwiseBenchProject Management software (notion, sheets, basecamp)How to write estimatesfixed priceRetainerHourlyValue based fixed priceMistakes / misconceptionsit’s a numbers game. This is false! Don’t spray 300 people with a cold email and no context. I get these constantly. Spend 3 hours researching 3 clients you can offer value too. Build a relationship, be a resource, it takes time.Provide a ton of value at a sustainable but low wage.Selling outcomes you don’t fully control. Example: I want this rich interactive functionality on a square space site that I can’t give you admin access for. Not having copy, not having design assets, domain access. Etc.Fixed price billing with a lack of scope.Growing to quicklyHaving a closed mind to unknown domains.Taxes + LLC's WTF?In the states - you have to pay taxes (I retain at least 20% of my income)LLC protects youErrors and omissions insurance is good to have as wellLinks / ResourcesSeth Godin Freelancers workshopThe business of authorityPickshttps://www.llcuniversity.com/ - LLC UniversityStipe Atlas — Pay the money get an LLC
undefined
Feb 10, 2020 • 51min

🚂Rails: Hate it or Love it

Welcome to Iteration, a weekly podcast about programming, development, and design.Ruby on Rails: 5 Things we hate 5 things we love. A quick overview of some of the key concepts, limitations, and strengths of the Ruby on Rails Framework.😍John - Convention over configurationThere is a strong "Rails way" this lets you focus on product, higher level abstractions, and move quicker through your day to day. You have less decisions to make.🤮Convention over configurationThe "Rails way" is stupid, puts you in a box. Sometimes my needs and problems don't fit into the rails conventions.😍Love: It's Stable and reliable.No "shiny object" syndrome that you get in the JavaScript community.🤮Hate: It's boring and doesn't keep up with modern trends. [jp]I never know the right balance of "React" sprinkles inside of my .erb files. Sometimes it feels like I should just do a full blown SPA? Plus, sometimes making a form in React is so much easier for me than remembering all of the weird Rails Form shit😍Love: It's server rendered.🤮Hate: It's server rendered.😍Love: It' just Ruby🤮Hate: FormsWhy are forms so damn complicated? Maybe I just don't have a good understanding of data modeling...😍Love: Old tutorials for things are mostly still relevant🤮Hate: Rails devs are just "Script kiddies"PicksJP: 🧦 https://bombas.com/ John: Abstract — Netfilx
undefined
Feb 3, 2020 • 40min

✅ 2020 Developer Goals

Welcome to Iteration, a weekly podcast about programming, development, and design.John: Hey I'm John I run a firm that builds web and mobile apps. Happy new year — this week we're talking through resolutions and goals for 2020 as software developers: JP — Goal #1: Build a full stack app with Elixirreally stretching myself here on this full stack node appJP — Goal #2: System designmaybe even pick up UML?JP — Goal #3: Algorithm fundamentalsGoing through https://interviewcamp.io/John — Goal #1 BlogBlog / Write / Document my work moreMotivation:It helps ideas stickSome of my best clients have been gained through my blog.It's a good way to give back.Become a better communicator.Document for the team.John — Goal #2: System designI'm copying JP Here — already been wanting to re-read through Domain Driven Design, (The lost season 1 LOLZ)Web Scaleabaility for Startup EngeneersJohn — Goal #3 JavaScriptJavaScript Skillz Up.I've made strides in 2019 but I want to take it to the next level.I still find front end intimidating.I limit myself in functionality to avoid complex UI.It holds back product sometimes.John — Goal #4 FocusFocus more on my core.I spend a lot of time on accounting, project management, issue triage and more.I want to have better processes, tooling, automation and team support on the things I'm not good at.Processes — QA, Client Handoff, DocumentationTooling — Project Management, Error Handling, Staging, DocumentationAutomation — Weekly updates, Invoicing, PayrollPicksA Youtube Playlist of every office deleted sceneMacOS — Sidecarhttps://www.princestreetpizzamenu.com/
undefined
Dec 9, 2019 • 39min

Joy of JavaScript 😍

Join us this week as we talk about JavaScript. So much to love. We go deep with Author Luis Atencio. We talk through JavaScript's future, keeping up, learning and walk through a lot of nitty-gritty technical parts. Where to find Luis:Twitter: @luijarBlog: https://medium.com/@luijarBooks by LuisJoy of JavaScriptFunctional Programming in JavaScriptRxJS in Action
undefined
Dec 2, 2019 • 45min

The Git Episode ⑂

Git-ing things done.A weekly podcast about programming, development, and design.I'm John, I run a design and development firm that builds apps and websites. I'm joined by JP: Hi everyone! I'm a full stack software engineer at a real estate tech start up.Catch up / What's today's episode about?John: California is on fire 🔥Making my job — complicatedLet's talk about git!I recently watched this quick 4 hour course which is going to be my pick: https://frontendmasters.com/courses/git-in-depth/Let's assume that listeners use git dailyTeaching / Learning sectionGit at a very high levelVersion ControlMajor, major oversimplification: key value storekey = hash of datavalue = dataYou use the key to retrieve your data (i.e. git checkout is just moving the pointer to the particular commit hash)Three (4 if you count remote) areas where code livesWorking: "untracked" files - this is your playground or scratch pad, current "working area"Staging: files that will be part of your next commit. this is like saying, 'hey, I want to add these files and changes to my repo as they are no longer just scratchpad thoughts'this is how git knows what changed between last commit and your current commitRepo: files that git knows about. the repo contains all of your commitsRemote: Github, bitbucket, etcWhat does your personal / work git workflow look like?i.e. walk me through how you might use git when you implement a new featurethis can be a longer section where we talk about git / github as it relates to working on a productHow often you commitWhat your commit messages look likePR etiquetteGit Squash vs Leaving all the historyGoodies + TIL sectionGit Goodie #1: --no-pagerHave you ever done a git diff or a git branch and your terminal opens up a "new page"? You can throw in the --no-pager flag and it will display the contents in the same window insteadGit TIL: git commit without the -m flagI learned that the -m flag is only for short commit messagesJohn: Git Goodie — git stashI only learned this one a year ago, incredibly useful.you can name your stashes!pop + applygit stash list
undefined
Nov 25, 2019 • 48min

Beef 🥩 or Bust 💥 Learning from other platforms

A weekly podcast about programming, development, and design.I'm John, I run a design and development firm that builds apps and websites.I'm joined by JP:Hi, I'm a software engineer at a real estate tech start upCatch up / What's today's episode about?This week Best and Worst AppsDesign and development patterns we love and hate.JP: Gripe 1: 👎 Page ReloadsWeb app: Iterable - every "save" reloads the pageMobile app: Notion - every change to a kanban board reloads the page; every time you swipe back, the page reloadsTakeaway: Optimistic renderingJohn: Password resets taking a thousand yearsTakeaway: Prioritize the background job, please.JP: Gripe 2: Resetting my filter settingsMobile app: apartments.com; I would need to register to save my settings. Maybe this is intended?Takeaway: Don't be user-hostile, don't use negative incentives.Takeaway: Use local storage (Cookies) or local device when a user is not authenticated, redirect on account creation and save that data.John: Not thinking about the size of the devicePutting things I care about at the tippy top of the app. Put it under my thumb!Takeaway: Test your apps in different contexts, huuuuge and tiny.I've made this mistake - shipped apps that don't render properly on an iPhone 5sJP: Gripe 3: Login button on marketing page opens new tab and authenticates meBad Web apps: Iterable, LeverGood web apps: AmplitudeWeird in the middle apps: CoderpadTakeaway: Take the time to get auth right. Be careful how you handle oAuthJohn: Facebook Logout BullshitIf you log out of the facebook app it doesn't actually log you out.It goes to this screen with your profile photo and a password field, it's still collecting data on accounts associated with that phone.Takeaway: Don't prioritize business needs over product simplicity and privacy.Slack GripesJP: Slack turns apostrophes into curly apostropheshttps://practicaltypography.com/straight-and-curly-quotes.html“ - curly" - straightJohn: Drafts jump up to the top of the screen and go missing from your threadsJohn: Global notification "Mute" switch outside of your system settings.John: The account management strategy is bonkers — Why can't I have one login that gets me to all my workspaces?John: Deranged Email Collection Pop Ups"Would you like to be rich and beautiful?"Yes! I'm awesome.No thanks, I'll stay poor and ugly"Takeaway: "Push back on stakeholders, suggest more thoughtful design solutions, if well executed "interstitial" email collection can be just as effective and way less user hostile.Keep in mind: Google knocks down SEO significantly on email pop ups websitesJP: Cool feature 1: Power user shortcutsDesktop app: Slack has a cmd + k to search, cmd + r to refresh, etcDesktop app: Youtube scroll on a full screen videoChrome: youtube + tab to search | ebay + tab to searchTakeaway: Provide more than one way to access common functionality, this can be a keyboard shortcut, a gesture. Reward power users.John: In app pop up adsSpotify new album announcementsNetflix new showsYoutube Premium adsWORST: Apple "Have you tried the new maps?"Fuuuuuuuuuuck that.Takeaway: Feature new features or content passively in context. Highlight new content etc. Don't interrupt users. We are better than that.John: Multiple Accounts + Team ManagementStripe does this so so well. One login can get to multiple accounts, secure, simple.Bank of America — basically just need to delete the app every time to switch between my company and personal accounts.Pastel — You can't belong to more than one "Team"Slack — Multiple "Workspaces" new phone sign into 4 different workspaces.Takeaway:Be really thoughtful about user account management, understand that more than one person need to use your app and access your data. Think about from day one tying data to an "Account", "company" or "Household" that includes the single user.Example: App for dog trainers, every trainer belongs to a "School" even if it's just themselves, every dog and client belongs to a "Household" that way you can easily add and remove user's access to a "School" or "Hosuehold"If you tie all the data to the individual user, it's really tough to share access.John: Hitlist of Beautiful platforms that get most things mostly rightRobinhoodReddit MobileAirbnbSquareTwitterPinterestJohn: iOS "Smartlinks"Drive me bananansIf you tap a phone number there is no way to "Copy" it. the only option is to "Call"If you tap an address "Open in Maps" 🙄 🤮If you tap an email "Apple Mail" 🙄 🤮Lock-in BSPicks:John: Blinkist - Book summariesJP: Away

Get the Snipd
podcast app

Unlock the knowledge in podcasts with the podcast player of the future.
App store bannerPlay store banner

AI-powered
podcast player

Listen to all your favourite podcasts with AI-powered features

Discover
highlights

Listen to the best highlights from the podcasts you love and dive into the full episode

Save any
moment

Hear something you like? Tap your headphones to save it with AI-generated key takeaways

Share
& Export

Send highlights to Twitter, WhatsApp or export them to Notion, Readwise & more

AI-powered
podcast player

Listen to all your favourite podcasts with AI-powered features

Discover
highlights

Listen to the best highlights from the podcasts you love and dive into the full episode