iteration cover image

iteration

Latest episodes

undefined
Oct 21, 2019 • 54min

Roundtable: When Tech Meets Business 🤝

A weekly podcast about programming, development, and design.My name is John Jacob, I am a developer and designer.I am joined by my co-host JPConversation — When Tech Meets BusinessWho is Jon? Tell us a bit about your educational background and how you eventually landed at OpendoorJon, Briefly tell us why you're interested in Real Estatepotential to talk about the domains we are interested in as welleducationhealthAs a software engineer, why is it important to understand the domain that you're building for?Understand customer pain pointsExample searching for a home: Zillow and moreUnderstand the competitionUser value directly — Redfin and Zillow — are just lead gen tools. Let's focus on lower level.Build in domains you are excited aboutUnderstand customer pain pointsCheck out the competitive landscapeBooks books booksDo you think you need to be interested in the domain you're working in to do well?Not necessarily, building tech can be an interesting exercise in itselfYou have to be open minded, and empatheticObviously, when you are passionate about a product, there's magic in that.What are some insights (perhaps specific to real estate) that came from someone who was non-technical?How do you know when you should apply technology to solve a domain problem?Think about it in terms of PainHigh transaction is the opportunityRepetitive tasks is an opportunityPicksJP: NetlifyJohn: Duck Duck GoJon: Murphy bed LinksJohn Jacob JPGuest: Jon
undefined
Sep 30, 2019 • 37min

❌ Extreme Testing

Iteration — A weekly podcast about programming, development, and design through the lens of amazing books, chapter-by-chapter.This episode uses Chapter 13 of Extreme programing as a jumping off pointTesting Early, Often, and AutomatedHere is the dilemma in software development: defects are expensive, but eliminating defects is also expensive.Instead of talking about having a kick-ass automated test suite, frequently testing code, and all of that good stuff, we should talk about something a little different.Q: What was the last big bug you can think of? How did you handle it?Health coaching group discussions, mobile users could not post into group discussions for 48 hours. It’s a core feature of the platform.React Native Upgrade → Weird android bug where people could not take a photo to upload their proof of fundsQ: What was the reason for the latest big bug?lack of automated integration tests in the Mobile app.We have some unit testing we also have full API tests, but not enough coverage in the integration.We made a small change to the group discussion model, the mobile app wasn’t updated to consider this change, timing the rollout.Android Weirdness, lack of QA, rushing to get to the latest and greatestQ: How do you handle bugs in general?Testing is first line of defense.QA is backup (One other dev)App signal is the catch all (After deployment)Users are the last line of defense RABBITHOLEGive users a clear escape hatch / line of communication.So many times we’ve caught flawed design assumptions from that feedback. Users love it too.Superlative language "Thank you so much, you are the best, we really really appreciate you sending that in and I'm so sorry if you are having issues. "Q: John Ask: What’s the most common causes of bugs?Test data does not properly represent production data - phone formats / etcAn Edge case that wasn’t consideredThe feature functions properly but the functionality is wrong / not what the stakeholder intended.Rollout was not planned, data transition or all platforms are not in sync.Browser or context considerations. Mobile vs tablet / android device universe.Lack of QA, lack of testsRushing thingsJohn — Summary / Thoughts on book overallOverall got the most out of this vs other books we've readPicksJP: Heroku! Review Apps (spins up a new app every time a PR is opened); PipelinesJohn: Contentful + Rails to give clients ability to update copy and images on marketing pages.
undefined
Sep 23, 2019 • 52min

📦 Shipping Features — Planning, Estimates, Scopes and Shipping

Planning: Managing ScopeThis episode jumps off Chapter 12 of Extreme programing by Kent Beck.Planning is an exercise in listening, speaking, and aligning goals for a specific time period. It is valuable input for each team member. Without planning, we are individuals with haphazard connections and effectiveness. We are a team when we plan and work in harmony.XP recommends planning at any timescale with these four steps.1.) List the items of work that may need to be done.2.) Estimate the items.3.) Set a budget for the planning cycle.4.) Agree on the work that needs to be done within the budget. As you negotiate, don't change the estimates or the budget.Questions for discussionQuestion 1: Walk us through how you plan a new feature. In other words, how do you bring a new idea from concept to reality?1. PitchThis usually comes from the client, sometimes myself or the team.Here's an example of a recent client pitch:So here is our high level break down. 1st we add a new bottom tab that says students seeking this tab replaces the settings gear tab. The settings tab will be moved to the top right corner of the app. When a student clicks that tab the design attached (below) would show. * Design shows a list of students who have performed searches, with a "Message" button on each.Rules A student should show up on a tutors seeking list if......A student search is <7 days oldThey have not been messaged by 3 different tutors initiallyThey are within a tutors travel radiusSearched subject is on Tutor's subject listNotifications FiredEvery-time a new students signs-up a tutor that meets the above criteria will receive a notification about a new student signing up that they can reach out to.Additions:Add a box on the tutor stats page that lets tutors see new students seeking help in their area.Whiz Tutor — an app where you can find a book nearby tutors for in-person tutoring.Pitch was — when students search for but don't book a tutor, let relevant tutors message those students. This would happen through a "Students Seeking" tab that shows up in the tutors Mobile app.2. DesignHand off the pitch to a designer on the team to refine and recommend a scope.Question the workTry to tease out the "Jobs to be done", "user stories" that exist in the pitchQuestion if this needs to exist at all "Default to no"Look for "Off the shelf" > Workarounds using the current system.Can we do this with Zapier or a spreadsheet?Features often die in this phase.Define the workName the things. Attach nouns and verbs to the functionality."Students Seeking" became > "Leads" >"Message this student" became > "Reply to Lead" > Lead RepliesFigure out where this "lives" in the context of the existing feature set.Figure out each entities lifecycle, how does it get created, updated viewed and destroyed?A students search activity generates leads, a tutor can view relevant leads in their area, a tutor can reply to a lead, once three tutors reply to a lead that lead is no longer visible to other tutors.Try to get ahead of pitfalls, ask a lot of questions.Sometimes designer will talk with a developer just to make sure to identify and avoid any technical hotspots.Customer interviews if neededHandoff the designOutput — Low fidelity mockup, usually handed off with a screen recording, this is shared with client to capture any last pitfalls or miscommunication.We try to time-box each design iteration to just a couple hours.3. Initial Client ReviewWe shoot an email with the mockups and screen recording attached, just to be sure we are all on the same page.If there's tweaks we make a new low-fidelity design where it's still cheap.Client lays out "Must haves" and "nice to haves"4. Estimate and PlanOnce we are in alignment on the overall trajectory of the feature, Mockups and client context is handed over to a developer.Developer reviews the functionality, jobs to be done, user stories etc and attempts to estimate the work.This is the point where we break the work down into quantifiable, assignable "user stories" related to the feature.Plan the technical approachKeys to estimating more accuratelyLook at historyBreak things down smallerThink about all "Contexts" and "States"5. Client ApprovalWe have designs, we have estimated user stories.Here's the point where we can give ranges of hours and get a firmer list of "Must haves" and "nice to haves"Client gives us a go / no go on user stories.Again — Customer interviews if needed to be more confident in scope setting.Question 2: How do you decide when a feature is in scope vs. out of scope?Each step chips away at the scope, Example: in design, if we can't name things, it goes back to a pitch. In the estimates if it's too expensive it goes back to design.Question 3: Talk about a time when planning failed and scope creep was real. How do you think this could have been prevented?So recent and painful.Client reached out wanting to build a huge WebApp.I recommended we take a 3 weeks to refine the design, set a scope, basic feature list, basically this process. I gave very rough ballpark numbers of timelines and costs without having a feature list locked down.Client pushed hard to just get started, not define any of the work upfront, preached "Agile" — We got started with essentially no plan.Scope creep was massive, and scope within features. Example: Photo and file attachments in the messaging tool before a single use was using the messaging tool.Spent way too much time on functionality that was thrown out the window.Bottom line — client spent 4x my initial estimates, project went twice as long and they still don't have a working product.Closing thoughts on planningPlanning is people, planning takes time and intention.XP: Compromise Scope, not quality, time or cost. "Lowering the quality of your work doesn't eliminate the work, it just shifts it later... creates the illusion of progress... you pay in reduced satisfaction and damaged relationships"XP: Use past facts to guide estimates, not your gut.XP: Don't try to over-optimize planning, "You can't automate relationships"Our agency Project management overhead is about 15% of the project cost. Very real, very needed.PicksJP: React HooksJohn: Everything I googled for a week- In an attempt to dispel the idea that if you have to google stuff you’re not a proper engineer, this is a list of nearly everything I googled in a week at work, where I’m a software engineer with several years’ experience. https://twitter.com/type__error
undefined
Sep 16, 2019 • 35min

Deeper Into Extreme Programing

Welcome to Iteration: a weekly podcast about programming, development, and design through the lens of amazing books, chapter by chapterCorollary Practices of Extreme Programingcorollary: noun, a proposition that follows from one already proved. e.g. "The huge increases in unemployment were the corollary of expenditure cuts.TLDR: Walk before you runReal Customer InvolvementThe point of customer involvement is to reduce wasted effort by putting the people with the needs in direct contact with the people who can fill those needs.things I’ve missed from not including customers: block width buttons, “bookings” language, “clickable cards” SO much is missed without really involving customers.Root Cause Analysis(After you write tests and fix the bug...) Once the defect is resolved, figure out _why_ the defect was created and wasn't caught. Initiate the necessary changes to prevent this kind of defect in the futureFive Whyshint: it's usually a people-problemIncremental Development"Slices" concept from Shape UpScoping the work into a very tiny working piece of functionality and incrementing work from there. - If you were to rebuild facebook, just create a "Wall" and a "newsfeed", leave "likes" or "comments" for a future iteration.Negotiated scope contractMagic formula for success as an agency:It's taken me 4+ years of freelance software development to learn this lesson.Scope is flexible, budget, time quality are not.This is a game-changer, learn this as early as possible.Other practicesshared codesingle code basedaily deploymentThe Whole XP TeamA variety of people must work together in interlinking ways to make a project more effective. They have to work together as a group for each to be successful.TLDR: what should each of these roles do on an XP team?Tester - find the happy path; find ways to break itInteraction Designer - choose overall metaphors for the system; create personas and goals; help the team analyze and make sense of the world;Product Managers - write stories; pick themes and stories in quarterly cycles; prioritizes; encourage communication between customers and programmersProject Managers Facilitate communication, help identify priorities and consistent accountability.Executives Courage, confidence and accountabilityPicksJP: GatsbyJSJohn: Figma
undefined
Sep 9, 2019 • 45min

Essential Practices

A weekly podcast about programming, development, and design through the lens of amazing books, chapter by chapter John: Hi, I'm John and I'm joined by JP. JP: Today we will be going through chapters 6, 7, and 8 for those following alone - which are all about Extreme Programming practices. These are the things that XP teams are doing on a daily basis. Kent Beck defines two categories for practices: Primary Practices and Corollary Practices. You must first master the primary practices before considering corollary ones. This episode focuses on primary practices. Practices that do not serve a purpose or have values are empty. For example, pair programming for the sake of making your boss happy doesn't make much sense. However, pair programming to communicate, get feedback, simplify the system, catch errors, and bolster courage makes a lot of sense. Reminder - XP Principles Humanity Economics Mutual benefit Self-similarity Improvement Diversity Reflection Flow Opportunity Redundancy Failure Quality Baby steps Accepted responsibility Primary Practices (Chapter 7) Sit together XP predicts that the more face time you have, the more humane and productive the project. 👨‍🏫 humanity 👨‍🏫 improvement 👨‍🏫 quality Informative workspace Make your workspace about work. An interested observer should be able to walk into the team space and get a general idea of how the project is going in 15 seconds. 🐶 Digital workspace counts for remote teams — hygiene on backlogs, clarity on where project status is. 👨‍🏫 mutual benefit - doing stuff today that benefits me now and in the future 👨‍🏫 flow Energized work 🔥 Work only as many hours as you can be productive and only as many hours as you can sustain. Burning yourself out unproductively today and spoiling the next two days' work isn't good for you or for the team. Taking care of yourself is the quickest way back to energized work. I turn to long work hours as a way of grabbing control in a situation in which I am otherwise out of control 🐶 Recommended reading - Deep Work & Make Time 👨‍🏫 flow 👨‍🏫 humanity 👨‍🏫 improvement 👨‍🏫 mutual benefit Hot tips: ➡️ stay the same amount of time but manage time better ➡️️️️️ block off 2 hours at a time in your calendar just for coding ➡️ turn off phone, email, and slack notifications Pair programming 🐶 Nothing better for getting better and writing better code. Need to make a more regular practice of this. Stories Plan using customer-visible functionality. As soon as the story is written, try to estimate the development effort necessary to implement it. Write stories on index cards and put them on a frequently passed wall. Every attempt I've seen to computerize stories has failed to provide a fraction of the value of having real cards on a real wall. 🐶 Small discrete shippable changes. Should fit on an index card. 🐶 I've written my share of stories that are 2.0 Messaging tool. That's waaaay too open ended. 👨‍🏫 flow 👨‍🏫 reflection 👨‍🏫 quality Ten-minute build 🐶 Absolutely true, anything more than 10-15 mins you end up with a bunch of PR's with a broken build. Continuous integration 🐶 If you don't have CI set up, even for a solo project. Do it. Getting Started (Chapter 8) REMEMBER! XP is a way to improve both your development process and your experience in it. adapt by adding practices that meet your goals and express your values you don't have to implement all of the practices at once. pick one, see how they meet your goals and align with your values. baby steps! 🐶 Even if you can't get your team to switch, adopt a practice on your own. 🐶 The only person you can actually change is yourself, even if you are the boss! Change always starts at home. The only person you can actually change is yourself. [...] Dictating practices to a team destroys trust and creates resentment. lead by example 🐶 Find a practice - List out Things that drain you, list out things that energize your work, adopt practices around these two things, preventing drain and supporting energizing! Picks JP: http://www.pythontutor.com/visualize.html#mode=edit - so cool! John: https://github.com/sirupsen/airrecord - Worked so well to hack to gather an MVP, incredible. No migrations and the rest of the team could read / write data to the database.
undefined
Aug 26, 2019 • 46min

Principles in Extreme Programing

Season 7 Episode 3 A weekly podcast about programming, development, and design through the lens of amazing books, chapter-by-chapter Hi, I'm John and I'm joined by JP. Today we will be going through chapter 5 and continuing our discussion about the guiding principles of Extreme Programming. Intros Chit Chat Recap: values are the roots of things we like and don't like in a situation communication, simplicity, feedback, courage, respect practices are evidence of values principles bridge the gap between values and practices Values are too abstract to directly guide behavior. (This is why we discuss things in the context of principles) Other principles may guide your team, but these are the principles that guide XP: Humanity Economics Mutual benefit Self-similarity Improvement Diversity Reflection Flow Opportunity Redundancy Failure Quality Baby steps Accepted responsibility Now obviously we aren't going to bore you with discussion on all 14 of these principles, so today we'll only talk about a handful of them. Humanity - noun, the characteristics that make us human 🐸 Copy and paste alert What do people need to be good developers? What are some basic human needs? Safety - freedom from hunger, physical harm and threats to loved ones. Fear of job loss threatens this Accomplishment - opportunity to contribute to their society Belonging - ability to identify with a group from which they receive validation Growth - opportunity to expand their skills and perspective Intimacy - ability to understand and be understood by others Interestingly, satisfying these requisites meets both business and human needs. Self-Similarity 👻 "Fractal Nature of geology" When nature finds a shape that works, she uses it wherever she can. A crystal is a material whose constituents, such as atoms, molecules or ions, are arranged in a highly ordered microscopic structure — the same arrangment all the way to an atomic level. The same shape, makes up arrangments that make the same shape, that makes up arrangements that make the same shape. All's to say - I've found that many things that prove useful at a small scale, work at larger scales Concepts like Good names work for functions, methods, models, controllers, variables and namespaces — breaking things up into smaller peices, methods, functions, models controllers, etc process If it works to break up a method, it will probably work to break up a controler extraction Definining data in one organized place (switch statment Javascript example?) Simplicity Diversity 🐸 Software development teams where everyone is alike, while comfotable, are not effective. Teams need to bring together a variety of skills, attitudes, and perspectives to see problems and pitfalls, to think of multiple ways to solve problems, and to implement the solutions. Teams need diversity The principle of diversity suggets that the programmers should work together on the problem and both opinions should be valued. Oppourtunity 👻 "Learn to see problems as opportunities for change." To reach exellence, problems need to turn into opportunities for learning and improvment, not just survival. Conciously choose to transform each problem into an opportunity. Good book on this the obsticle is the way Example: .env files for all of our projects got posted to a public repo. We migrated toward a better more secure system, credentials that would be harder to leak and are easier to rotate. We used the problem as an oppourtunity to improve our architecture. Quality 👻 Sacrificing quality is not effective as a means of control... Quality should not be a control variable. These are the variables you should change: Time, Cost, Money and Scope. Never quality This is really extreme. Author makes the aurgument that when you skimp on quality you end up spending even more time or money. This rings true, I have often taken the wrong approach in projects of skipming on design, testing or refacting and it doesn't really help in the long run. We'd all like to get more features out the door for less money, it's just not doable. Less is less. Failure 🐸 If you're having trouble succeeding, fail. Don't know which of the three ways to implement a story? Try it all three ways. When you don't know what to do, risking failure can be the shortest, surest road to success Conclusion: Principles give you a better idea of what the practice is intended to accomplish Understanding the principles gives you the opportunity to create practices that work in harmony with your existing practices and your overall goals Picks JP: Burke Williams deep tissue massage. I'm all about the self-care John: App called "Mood" free app that helped me be more mindful of my emotions. It's been really insightful and helpful. I've moved from an average of 44% negative emotions to 55% positive emotions in just about 2 weeks. Just stoping and noticing my humanity, how some things make me feel has made a big impact in my overall mental wellness. I'm finding really interesting corollaries between my activities and diet and my overall happiness.
undefined
Aug 12, 2019 • 50min

5 Essential Values in Extreme Programming

Explore the essential values of Extreme Programming, including communication, simplicity, feedback, courage, and respect. Discover how frequent small adjustments in programming mirror the art of driving. Dive into the significance of making values explicit to guide practices effectively. Navigate the importance of transparent team communication in agile settings and the challenges faced in diverse environments. Finally, uncover the advantages of collaborative code reviews, enhancing team dynamics and efficiency in software development.
undefined
Jul 29, 2019 • 40min

New Book: Extreme Programming

The conversation dives into the principles of Extreme Programming, emphasizing social change over mere technical efficiency. Hosts explore the emotional aspects of development, balancing productivity with developer well-being. They discuss viewing life through a problem-solving lens and the importance of creativity in work. Time constraints are tackled, highlighting the struggle between quality and meeting deadlines. Additionally, insights on engineering management underscore the need for effective productivity systems to enhance both personal and professional efficiency.
undefined
Jul 22, 2019 • 54min

Career Development Roundtable: Getting Great Work in Tech

Join John Anthony Rivera, a cross-platform mobile developer who recently joined Amazon's photos team, as he shares his inspiring journey from low-wage jobs to a fulfilling tech career. He dives into the importance of networking and self-advocacy, recounting a pivotal networking event that changed his trajectory. The conversation also emphasizes unconventional paths to tech, the balance between technical and soft skills during job searches, and strategies for maintaining well-being while pursuing career advancement.
undefined
Jul 15, 2019 • 35min

Refactoring Wrap Up & Summary

Discover the delicate balance between work and personal life in tech. Dive into the world of Vue JS and its applications with Rails, while exploring design patterns like Decorator and Service Objects. Learn about the importance of incremental refactoring and spotting 'bad smells' in code. The hosts share their favorite productivity tools, including a Gmail scheduling feature and the Time Timer. Lastly, enjoy a thrilling tale of their drive along the Angeles Crest Highway, hinting at exciting discussions ahead!

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