Sr. Content Developer at Microsoft, working remotely in PA, TechBash conference organizer, former Microsoft MVP, Husband, Dad and Geek.
161806 stories
·
33 followers

AspiriFridays - 13.6 is coming!!

1 Share
From: aspiredotdev
Duration: 3:57:59
Views: 462

Join Maddy, David Pine 🌲, and the team while we try out some 13.6 features and see if we're actually ready to ship or not.

Read the whole story
alvinashcraft
24 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

IoT Coffee Talk: Episode 332 -"Wham Bam Amsterdam" (The Things Conference 2026)

1 Share
From: Iot Coffee Talk
Duration: 1:02:09
Views: 32

Welcome to IoT Coffee Talk, where hype comes to die a terrible death. We have a fireside chat about all things #IoT over a cup of coffee or two with some of the industry's leading business minds, thought leaders and technologists in a totally unscripted, non-AI affected and manipulated, organic format.

This week Wienke, Devin, Steve, Pete, Rob and Leonard jump on Web3 for a discussion about:

🎶 🎙️ BAD KARAOKE! 🎸 🥁 "Panama", Van Halen
🐣 The IoT Coffee Talk crew share thoughts on The Things Conference 2026.
🐣 Devin recaps IMTS and Automate and how they are the Hanover Messe of the US.
🐣 Who to you determine which building is the tallest in the world?
🐣 Reflecting on how Amsterdam is a really cool city. The rail system!
🐣 How the adoption of some innovations can result in high taxes.
🐣 What is a betel nut and why is Pete so into it?
🐣 Steve's first time at The Things Conference. He liked it!
🐣 A solutions-oriented future for The Things Conference?
🐣 Rob's book "Saving the Earth with IoT" was the hit of the show!
🐣 Why Ray Ozzie is the under-appreciated tech genius and pioneer of Microsoft.
🐣 The physical AI rude awakening to come..... It ain't new!
🐣 What's this twisted and late concern about safe AI?
🐣 The problem with startups? Most of them don't focus on building a business.
🐣 Why super intelligence is so good at doing bad stuff?
🐣 Is the business of shipping AI junk good business?

It's a great episode. Grab an extraordinarily expensive latte at your local coffee shop and check out the whole thing. You will get all you need to survive another week in the world of IoT and greater tech!

Tune in! Like! Share! Comment and share your thoughts on IoT Coffee Talk, the greatest weekly assembly of Thinkers 360 and CBT tech and IoT influencers on the planet!!

If you are interested in sponsoring an episode, please contact Stephanie Atkinson at Elevate Communities. Just make a minimally required donation to www.elevatecommunities.org and you can jump on and hang with the gang and amplify your brand on one of the top IoT/Tech podcasts in the known metaverse!!!

Take IoT Coffee Talk on the road with you on your favorite podcast platform. Go to IoT Coffee Talk on Buzzsprout, like, subscribe, and share: https://lnkd.in/gyuhNZ62

Read the whole story
alvinashcraft
24 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Meta’s Muse Revival, Frontier AI Under Threat, The Rise Of Dopamine Sites

1 Share

Ranjan Roy from Margins is back for our weekly discussion of the latest tech news. We cover: 1) The rise of Muse 2) Is Meta back? 3) OpenAI's consumer blind spot 4) Meta's butthole marketing 5) What Muse means for ecommerce 6) Meta's Muse Charm, aka; The Muse Buddy or Muse Tamagotchi 7) Meta introduces camera-free smart glasses 8) What Meta Muse says about Frontier AI's weakness 9) Standard models are on the rise vs. frontier 10) The new Dopamine Site phenomenon is... good?

---

Enjoying Big Technology Podcast? Please rate us five stars ⭐⭐⭐⭐⭐ in your podcast app of choice.

Want a discount for Big Technology on Substack + Discord? Here’s 25% off for the first year: https://www.bigtechnology.com/subscribe?coupon=0843016b

Learn more about your ad choices. Visit megaphone.fm/adchoices





Download audio: https://pdst.fm/e/tracking.swap.fm/track/t7yC0rGPUqahTF4et8YD/pscrb.fm/rss/p/traffic.megaphone.fm/AMPP3840245588.mp3
Read the whole story
alvinashcraft
25 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

You Don’t Have to Live at Work to Become a Director of Engineering

1 Share

Jeff stopped answering his phone and started declining same-day meetings.

Five months later he was a director of engineering.

Everything you can see from where you’re standing says that’s backwards. You look at your boss, then at your skip, and you see the 10pm Slack. The weekend work. The calendar with no white space left in it. Then you draw a conclusion, and the conclusion sends you one of two directions.

Either you decide that’s what it takes and start paying a price nobody ever asked you for. Or you decide that’s what it takes and quietly stop wanting the job.

Same misread, opposite casualties. One of them overpays with her evenings, her health, sometimes her marriage. The other walks away from a role he’d have been great in — and usually never notices he decided anything. He just stops reaching.

Here’s the problem with the evidence you’re working from.

I stepped outside at an Airbnb one morning and the driveway was soaked. Must have rained. I said so to a friend over coffee. It hadn’t. The sprinklers ran at 5am. My observation was real, but the “why” was wrong.

That’s the move you’re making on the org chart. The evidence is always real. It’s the conclusion that’s invented.

When Jeff changed his view to one from above, he landed Director of Engineering in just five months. He created new boundaries, delegated more work, and said “no” to more requests.

Jeff’s new boundaries cleared room for a multi-million-dollar proposal he’d been too busy to work on, while a $20,000 project ate his calendar. He went to his boss and told him that’s what he was doing. His boss said: focus on what’s most important.

In this episode I draw the two columns on the whiteboard — what you can see from below, and what actually gets seen from above — and walk through how to sort the behaviors you’ve absorbed into the ones that earned the job and the ones that were only ever baggage of bad leadership along the way.

You don’t have to choose between the scope you want and the life you want.

The Happy Engineer Podcast

LISTEN NOW

Back to ALL EPISODES

 

What You’ll Learn

 

The Imitator and the Refuser

Two engineering leaders can make the identical misread and get wrecked in opposite directions. The imitator sees the VP online at 10pm, decides that’s the price of admission, and starts paying it — with his evenings, his health, sometimes his marriage. The refuser sees the same thing, decides that’s the price of admission, and opts out of a role she’d have been excellent in. She usually never notices she decided anything. She just stops reaching.

 

What Gets Seen From Above, and What Doesn’t

From below, the visible list is ugly: long hours, meetings, always-on availability. Put on the VP’s hat and look down the same org chart and the list is completely different: good judgment, decisions nobody else could have made, what your team can now do alone, scope handled without escalation, problems permanently removed. None of it is measured on a clock. And because none of it is visible from below, it’s often the last thing that gets copied.

 

Two Rules That Changed What Jeff Was Seen For

Jeff was the guy you call when something breaks, which is exactly how you become the person who always gets called. Two rules changed it: he stopped answering his phone (he always calls back), and he stopped accepting same-day meetings. Then came the specific “no” moments — declining a $20,000 project so he could put the hours into a multi-million-dollar proposal, and telling his boss that’s what he was doing. His boss told him to focus on what’s most important. He’d started in March. He was a Director of Engineering that August.

 

About Zach White

Zach White is the founder of Oasis of Courage and the host of The Happy Engineer podcast, now in its second season with more than 200 episodes published.

He holds mechanical engineering degrees from Purdue and the University of Michigan and spent his corporate career as an engineering leader at Whirlpool before leaving in 2019 to coach full time. Since then he has coached more than 300 engineering leaders at over 200 companies — big tech to rust belt, and everything in between.

His flagship program, the Lifestyle Engineering Blueprint™, is a 12-week coaching program that helps engineering managers and directors get promoted without handing over their nights and weekends to do it. He also runs an invite-only Mastermind for Blueprint graduates and hosts OACO Live Events around the country.

He built all of it around one belief: you shouldn’t have to sacrifice your life to reach your potential at work.

 

Links & Resources

Watch next

Work with Zach — Book a free Career Growth Audit 

Connect — Follow Zach White on LinkedIn

 

FULL EPISODE TRANSCRIPT:

Please note the full transcript is 90-95% accuracy. Reference the podcast audio to confirm exact quotations.

[00:00:00] When you look 1 or 2 levels above you on the org chart and think, I want their impact, I want their income, But I don’t want their life. You’re walking toward one of two major mistakes, copying the visible sacrifices that you assume got them there, or opting out of an opportunity that you actually want. And there is another way. I’ve seen engineering leaders take on much bigger scope without sacrificing their family or their sanity by getting more selective. About where their time and their judgment create value. So today, let’s separate what you can see from what actually gets rewarded, and then I’ll show you exactly what’s possible when you update your leadership blueprint. You see, starting out as a junior engineer, the blueprint is simple. Get a great job, get some opportunities, Go learn new skills, start climbing the ladder.

 

Expand to Read Full Transcript

And at the beginning, the rewards are for expanding your capabilities, those skills, so that you can take on more difficult assignments, move up to more difficult projects, be delegated a bigger scope, have more responsibility, a bit more leash. And all of that makes sense. And it’s really fun to expand and you’re willing to work hard. You’re young, you just got out of college and you got nothing else to lose. So you go and pour it into your career. I remember those days fondly. It was fun. But eventually, you get to a level in your career where you’re pretty busy. You got a lot on the calendar. You have a scope that’s already difficult to juggle, and one more project or one more meeting or one more thing just feels really hard to handle. And going to the whiteboard, let’s look at an org chart. You might relate to an experience like this. Here you are with a team already reporting to you. You’ve got one-on-ones, you’ve got career development conversations, you’ve got project updates. You know, you’ve got a big group of peers, especially with the flattening of organizations that’s happening across the country, around the world. It’s amazing what I’ve seen. Just got off a call recently with a leader who has 26 direct reports. If he spent 1 hour a week with each of them, that’s more than half of his week. He can’t afford even to do that. So you’re busy.

And then you think about the level of your boss and you’re like, man, I really want that promotion. I’d love to get to that level. But Zach, How do you do it with all of those directs and the downline scope and all the projects and all the pressure? And you look up 2 levels at your skip and it’s like, man, of course I would love to have that opportunity to lead at that level, to have the vision and the impact and the strategic, you know, opportunities to really drive the organization from that level. But the pressure, the stakes are so high, the number of people that they’re expected to lead. The VP walking into their office and barking at them for hitting those KPIs. It’s like, man, I just don’t know if I want what they have because of the sacrifices that it looks like they need to make. And what you see from the perspective of your role, looking up, thinking about what you see in your boss, it’s like, man, maybe I could handle that. But when you look at your skip and you see the hours that they’re putting in, you see the pressure that they’re under. You’re not so sure if that’s something that you actually want because you’ve got other commitments. You have a family, you have hobbies and passions and things you want to do outside the office. And that makes it difficult to know where you want to go. So let’s look at 2 sides. I want you to grab a piece of paper and follow along with me and add your own perspective to what I show you here on the whiteboard. Draw a line right down the middle of your piece of paper. And on the left-hand side, it’s what you can see From below, looking up at those aspirational roles, your boss, your skip, maybe 2 levels beyond that. What are the things that you can see? And be honest, especially with the things that you’re not so sure that you would want if you got there, the things that make you hesitate to gun for that next promotion.

I want you to add to your own list. Just pause. the video for a moment and put some of your own items down, and I’ll meet you on the other side. Just give yourself 30 seconds and I’ll show you what’s on my list. All right, if you’re driving or working out while you’re watching this, I’ll let you off the hook if you didn’t write anything down. But if you did, let’s see if it looks similar to mine. First thing that I captured are the long hours. It always felt like my boss was at work before me and at work after I left. Long hours, late nights, Slack, email. When I was in my engineering career, it felt like if I emailed my boss before I left work, there was a reply already back that same night. And then it made me feel pressure to log back on and check for those replies and reply back before I went to bed. Weekend work, traveling a lot, global time zone calls. I hear this one all the time. Man, Zach, if I get promoted, I’m going to pick up that team in India or China. or Europe, and then I’m going to be on calls early in the morning and late at night, and I don’t want that. More meetings. Zach, my boss is in every meeting. They have their own meetings with up the org chart. They have all the meetings with their directs and these other projects and cross-functional. And how can they possibly do their own job when they’re in meetings all the time? And you see these things from your perspective looking up and think, I just don’t know if I want that job. Maybe the level that I’m at is good enough. But there’s a real problem with that perspective. It’s like when I was traveling recently and I stayed at an Airbnb. And when I got up in the morning and stepped outside, the driveway and my car was wet. So I assumed that it had rained. And I went and met a friend for coffee and I said, man, it must have rained last night. He said, no, it didn’t. Turns out the Airbnb had sprinklers that came on early in the morning, soaked everything, and I just assumed because I saw the water on the driveway that it must have rained. You see, the observation was real. I was correct in my observation that everything was wet, but the cause was something that I just assumed. I guessed, and I guessed wrong. And that can happen to you when you’re looking up the org chart Your observations are real. It’s very possible that your leader is putting in crazy hours. They are going to all of the meetings. They do have the challenges that you observed. But to draw the conclusion that those behaviors are the ones that got them to that level, it’s the same risk of me going to coffee and saying it must have Rained. The truth could be something very different. Taking that observation and drawing the wrong conclusion leads to 2 really dangerous failure modes. The first one is called the imitator. The imitator. What the imitator sees might be the director or the vice president online at 10 PM at night. And what they conclude is, well, that must be what it takes. Being online late at night after the kids are in bed is what it takes to get to that level.

So I’d better start logging on and being available late at night. And so what happens is you pay a price that may never have been required to get you to that level. And there’s a cost— your evenings, your health, your marriage. I experienced divorce as the result of bad decisions just like this. Maybe you’ve already paid a price for imitating a behavior that you saw above you on the org chart. But the second failure mode is called the refuser. The refuser. The refuser sees those late nights. It sees 2 predecessors who had that job, who each were working 12-hour days constantly. And they conclude something a bit different. The refuser says, if that’s what it takes, I’m out. I don’t want this. I’m going to stop growing, stop pursuing the next level, because that’s not something that I want. And so you end up disqualifying yourself from a role that you might be great in, that you might be the most qualified to do, Because you don’t want the lifestyle that you see above you from your boss or from your skip. And the cost of that may seem lower because you’re not giving up your life, but then you have the next 5, 10, 15 years or more of your career at the same level, doing the same kinds of projects in the same kinds of teams, and eventually— You will burn out from boredom, like I’ve talked about in another video. You still pay a price. You don’t then earn that income to be able to take your family on that extra vacation or buy that house or really leave a legacy in your family line. You don’t get that opportunity to do those things because of the decision to see from below something that you don’t want to repeat and conclude that therefore it’s not For you. And I’ll tell you right now that both of these failure modes can be overcome. The imitator, I think of Alec. He was working 70 hours a week. Through the Blueprint program, he brought that down to 50, and then in the 40s. And it was during that downshift in his work that he then got promoted to the next level. It was the reduction that led to the promotion. And I think about the refuser. I just started working with a gentleman named Kyle. The last 2 people before him who held the job that he just got promoted into were working 12-hour days, traveling nonstop. And he has decided, I will not follow in those footprints. And the reason we’re working together is to change that blueprint, to show him a new way. Both of these failure modes, the imitator and the refuser show up everywhere that I look in engineering, and I don’t want it to be you. So if this is already resonating and you want to jump ahead to what the full blueprint looks like, I’ll show you in a different video, which will be linked in the description below. 3 of the career killers that I see the most at these levels, the 3 shifts that matter in order for you to be able to create a different outcome. Than what you see happening above you on the org chart, to live a more balanced, more complete, more whole life while you experience the success that you want in your career. The same blueprint that I’ve used with hundreds of engineering leaders to connect career growth with the lifestyle that you dream of and a system underneath both to help you sustain that growth without burning out. So if you want that full model and you wanna jump ahead, Go ahead and click through and watch that next. But for now, let’s continue on how we can change our perspective and not fall into that wet driveway trap that I did when I was traveling. The key is this: what’s visible isn’t always what’s valuable. What’s visible isn’t what’s valuable.

So back to our list. What you can see from below is limited in your perspective. You can only see so much. Here’s you, you’re looking up, and that perspective is bringing your own experience, your own capabilities, your own skills. And I don’t mean this as an insult, but you can only see it from below. You aren’t able yet to see from above. What is it that the leaders above your skip are seeing? What is the actual value that matters? And so the right-hand side of this chart really matters. What actually gets seen from above? What is it that the VP is really looking for? So I’d encourage you again, before you just let me tell you the answer, pause this video, take 30 seconds and ask yourself, if I do my best to put myself in the shoes of maybe my mentor who’s at that level or things that I’ve read, other things that I’ve listened to, other career development that I’ve done. What is it that actually creates the value that somebody from above my boss, from above my skip on the org chart would see? Where is the value from above? I want you to just take a moment and consider that. Pause the video and then meet me back here and I’ll share with you some of those keys and the shift that we must make. All right, put your vice president hat on, put your CTO hat on, and let’s look down the org chart. What you see is good judgment. By the way, good judgment often comes from making mistakes and having bad judgment. That’s how you get good judgment. What else? It’s decisions. Not just are you making decisions, but are you making decisions that no one else could make? Are you making them with speed, with accuracy, with ownership? How’s your decision-making? I hope that you captured business results. It’s not just about tasks. It’s not about to-do lists. It’s about driving the business. We’re here to win as a business. Team leverage. What can your team now do that they couldn’t do before? Have you increased their skills? Can they do more alone, more without your support? What about the scope that you can handle? And I added on my list, not just the scope, but Scope without escalation. The scope that you can handle without bothering me all the time. If I’m the CTO, I don’t want you constantly coming to me for every little thing, right? You must be able to handle the scope without escalation. Thinking about problems that are permanently removed. How have you improved the way we work overall? These kinds of things that are looked at from above. It’s a totally different lens. Notice now that none of these things, none of them are about time, late nights, weekend work. That’s not what the leaders above you are actually paying attention to. And you’re making the assumption that weekend work is what’s required to get business results, that it’s a wet driveway, it must have rained. You’re assuming that because they’re in more meetings, That it’s improving their judgment. Wet driveway. Did it rain? You’re assuming that all of these things were necessary to create those outcomes. And what I want you to know is that that is not necessarily true.

In fact, it is not that often true. What I have seen over and over again is that those behaviors of taking on more and more and more, this nonessentialist way of thinking, this— undisciplined pursuit of taking on everything that leads to those late-night slacks, that leads to that weekend work. That is a leader bringing along the baggage of their bad habits from their lower levels in the org chart where they never did the work in personal development and in career development to find a better way. And so they just keep adding on and adding on And adding on when in fact a very small chunk of their work is what got them the visibility and the decision to promote them in the first place. So how can you discern what actually creates the value versus what’s just visible? To help you see this more clearly, I’d like to share a story about an amazing leader who I worked with named Jeff. Jeff been a client of mine for many years now, and let me tell you exactly what he said when I interviewed him. He was talking about his role at the power plant. He said, we got married right when I started the plant, and that first kind of 4 years of our marriage was like we were probably headed towards divorce. And I didn’t know it. We were roommates. I was constantly thinking about work. I can relate to this. I did the exact same thing. And he also went on to say that he didn’t even realize until he left. There were a lot of different reasons, but I didn’t articulate that I was burning out. That strategy, that work hard, become the go-to guy strategy, then led Jeff to start a side hustle. He started building additional income streams on the side. He continued to move up and succeed at work, and these things piled up. And when he and I got together for coaching, the first couple of things that came up was, how are we going to change the strategy? And let me share with you what Jeff said when we got going. He said, man, it’s not just knowledge. It’s not what you know. It’s about being able to take action on what you know. A lot of these things weren’t new to me, but I never had the tools or the mindset, everything that I actually needed to apply it. And the Blueprint gave me the courage to say, no, it doesn’t have to be this way. I can influence what’s going around, going on around me more than I think. And that’s what I want you to really understand.

This shift from what you can see from below, This I see grinding, work harder, add more to your calendar mindset. It takes courage, but there is another way. You can influence it more than you believe you can. Just because you’re not the VP yet doesn’t mean that you must say yes to everything. Jeff needed the courage to say no. And let me share with you what transformed When he started to do that. First, Jeff put in a new set of rules around his time and how his focus would be directed. Rule number 1, he decided not to answer his phone. He always calls people back. Here’s what Jeff said. It’s not just ghosting people. It’s like, because I’m so busy, people can’t get ahold of me. I’m working on the highest priorities. So if I am answering the phone, it’s because it’s related to my top Priorities. And now that people know that, me not answering the phone isn’t a big deal. He thought it would be huge. Turns out, once people understood it’s because he was working on the highest priorities, nobody cared. Rule number 2, he said no same-day meetings. Jeff totally changed the way he approached his calendar. And if somebody sent him a meeting invite day of, he would just reply back and say, I’m sorry, Absolutely not. I’m already committed to my highest priorities. Now, I know you’re already thinking, but Zach, and you have some exception in your mind. And even for Jeff, there are exceptions. If a true crisis on one of his top priorities came up, he would take the call. The problem is most of those things were not crisis situations. And Jeff told a story about a time when he got invited to a meeting on a $20,000 project. And there were already 4 other leaders in that meeting. And I’m looking at what he shared and he said, it would only take a few hours of our combined salary to take away all the profitability from this $20,000 project. Meanwhile, he had a multimillion-dollar proposal to be working on that he was not working on because he’d gotten pulled into that meeting. And those were the moments where he recognized, I must change my strategy. And he went to his leader and said, Will you care if I decline all of these low-value activities and put all of my effort into making sure this multimillion-dollar proposal goes to the best it can possibly go? And what do you think his leader said? Of course not. Focus on what’s most important.

That shift then forced Jeff to learn how to lead better, how to delegate better, how to control those boundaries better. And as a result, Here’s what Jeff said. The blueprint was just a series of actions that were like the first domino that fell, this huge chain reaction at work that ultimately led to us restructuring our division, our entire engineering organization. And that reorg included me getting my promotion to director that August. And we started the work in March. So in just a few months’ time, Jeff was able to completely change the way that he worked, and it ended up in a director promotion for him in just a few months. That is the kind of growth that we want, one where you’re not overworking, you’re not putting in all the hours, and you are still seeing that aspirational growth that prevents burnout from boredom and also prevents you becoming an imitator of behaviors that don’t serve you. Or refusing opportunities that you could absolutely crush at. And let me be honest with you for a moment. I have fallen into the wet driveway trap in my personal life outside of work as well. I did it in fitness. I really wanted to build muscle. I was getting remarried to my now wife, Johanna, who I love so much. She’s amazing. And I wanted to get in shape and build some muscle. And so I looked around and said, all the guys with a lot of muscle are in the gym a lot. So I started doing P90X and I started putting in hours and hours at the gym, working out more and more. And I did get more lean and a bit more ripped, but I really didn’t gain any muscle mass at all. And I was super frustrated. What I found out later is that I simply was not eating enough protein for my body to grow. So hypertrophy couldn’t happen even if my body wanted to grow because I wasn’t fueling my body the right way. And I’m back in a growth phase right now, and I’m focusing all of my effort just on eating right and getting the protein levels that I need. And I’m working out the same, and the gains have been great. And come back in 6 months and see if you could tell a difference. But I’ll tell you that it’s harder to change your paradigm, to change your mindset, to change your viewpoint from looking up the org chart and thinking, oh, I don’t want what they’re doing. To looking from the view of a leader above, to stop thinking about more hours in the gym and start thinking about just eating more protein in your career. And the sting of this is that your boss, your boss is just evidence that their career strategy got them there, but it’s not evidence that their current habits are the strategy that you should copy. And it’s not evidence that that strategy is the only way. And I’ll tell you, there are companies, there are bosses, there are places that reward heroic hours, that expect some of the things that are here on the from below side of our chart. They want you to work those late nights. They’re expecting you to be on at 10:00 PM replying to emails and, and doing calls at all hours and being in every single meeting.

And I understand that those places do exist, and if that’s the kind of environment that you’re in, it still doesn’t prove that overwork is what makes someone a better leader. It doesn’t mean that it’s going to be what’s required for you now, or that it’s the only path forward for you in your career. Don’t let one bad environment, one bad place that’s not aligned with your values, ruin it for the rest of your So like I said, if long hours aren’t the real cause, if it’s just a wet driveway but it didn’t actually rain, then what actually moves the needle as an engineering leader from feeling stuck with already at your capacity as an engineering manager or senior manager? How do you get into that director, senior director, VP-level scope without doing everything on the left-hand side of what you can see from below? Well, that’s what I unpack in the next video. Like I said before, I’m gonna show you 3 career killers, the ones that I see the most in this middle management level, the 3 shifts that matter the most, and the blueprint, the tactics, the tools that I’ve used with hundreds of engineering leaders to connect career growth with their ideal lifestyle and a system, an operating system underneath both. If you want the full model, click through to the video that I’ve linked below in the description and will show up here on the screen. Watch that video next if you want to put all the pieces together from what we talked about today. I’ll see you there in the next video.

 

Back to ALL EPISODES

The post You Don’t Have to Live at Work to Become a Director of Engineering appeared first on OACO.

Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

173: $15K Chinese EV Charges 2x Faster Than A $200K Bentley Torcal

1 Share

In this episode:
• Bentley reveals the Torcal, its first EV
• Geely's AI-powered charging hits 10-70% in 4.5 minutes
• BMW i3 US reservations open next week
• Much much more

Get pre-approved for your EV loan at Clean Energy CU: https://sl.cleanenergycu.org/cevlo

Special guest this week: Andrew Lambrecht of Ever Cars
https://evercars.com/

Host:
Domenick Yoney from Drive Electric With Domenick
https://www.youtube.com/@DriveElectricWithDomenick

Cohosts:
Tom Moloughney from State of Charge and EVchargingstations.com
https://evchargingstations.com/ | https://www.youtube.com/StateOfChargeWithTomMoloughney

If Batteries Included helps you keep up with EVs, you can help keep it going — buymeacoffee.com/batteriesincluded 🔋





Download audio: https://dts.podtrac.com/redirect.mp3/audioboom.com/posts/8957163.mp3?modified=1790352476&sid=5141110&source=rss
Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete

Flutter Gemma: The hidden gem of cross-platform local AI

1 Share

Build Flutter mobile apps with cutting-edge local LLM features

Photo by Google DeepMind from Pexels

One codebase, multiple platforms, and all using local LLMs — can this work without compromises? When thinking about integrating local LLM features into your app, you will also start thinking about performance soon. The answer to performance is often “build native”. It makes perfect sense considering with LLMs you’ll want GPU access and NPU acceleration. All that is platform-specific.
And yet, Flutter Gemma v1.x takes a modular approach to resolve this conflict. In this article we’ll show you exactly how this works using a real demo app for Android and iOS with six feature areas: setup, text generation, analysis, embeddings, RAG capabilities, and chat.

Why Cross-platform for on-device AI?

For classical business use cases, the argument for having one codebase is well-known: Write logic once and deploy on multiple platforms like iOS and Android. For features including local models, this becomes more important because model handling and prompting strategies come on top of classical UI frontend development. Things you really don’t want to maintain in more than one place.

The inference itself stays platform-specific. Native runtimes, GPU, and NPU access differ fundamentally between Android and iOS. Android relies on open acceleration APIs such as NNAPI and GPU delegates via LiteRT, used to run Gemini Nano on modern Android devices. Apple devices use Core ML and the Neural Engine to run the Foundation Model inside a closed, vendor-specific stack. A good cross-platform layer bridges this gap without hiding it. The developer is still in control of which engine runs on which platform. For real-time applications where performance is critical, native development remains the way to go. However, for most product features related to on-device local LLMs, Flutter is becoming an increasingly viable choice.

The Ecosystem: Cross-platform options for local LLMs

Before diving deep into Flutter Gemma, we will look at the solution space: Generic approaches rely on Dart FFI and bind directly to llama.cpp/ggml or custom platform channel bridges for each platform. For example, llamadart uses llama.cpp for GGUF models and LiteRT for .litertlm models. But there are also pure Dart approaches even without an ffi dependency like ollama_dart. In addition, there are other smaller Flutter packages with similar concepts at various stages of maturity and varying levels of maintenance and active development.

Outside of Flutter, it’s worth taking a look at the purely native solution LLM.swift for iOS. It is a platform-exclusive approach that clearly illustrates the native control you give up when you opt for cross-platform development but also how much platform-specific work you save yourself in the process.

The common thread among most approaches is that they solve the question “can the model run at all?” rather than “how do I build a product feature interface around it?” That’s exactly where Flutter Gemma comes in.

Why Flutter Gemma stands out

Since release v1.0.0 Flutter Gemma follows a modular architecture: a core package and optional engine packages, instead of one big monolithic dependency. Right now, developers can choose between the following:

  • flutter_gemma_mediapipe: .task and .bin models (Android, iOS, Web)
  • flutter_gemma_litertlm: .litertlm models (Android, iOS, Desktop)
  • flutter_gemma_embeddings: text embeddings
  • flutter_gemma_rag_sqlite: sqlite vector store enabling RAG capabilities

How to choose the correct model for Flutter Gemma?

Answering this question isn’t too easy and includes more pitfalls than you might think at first.

Format first

Flutter Gemma does not just load any GGUF or Safetensor file you give it to. It explicitly expects .task/ .bin files (MediaPipe) or .litertlm files (LiteRT-LM). Both formats are already converted and ready for the engine. Practically this means: You look for a fitting model on HuggingFace, e.g., the Gemma family from the Google community or some LiteRT-LM models from the LiteRT community, instead of converting a model yourself.

Quantization is no trivial matter

Most pre-converted models are quantized, very often as INT4 (sometimes as INT8). This drastically reduces download size and RAM requirements — exactly what makes on-device inference on a smartphone even possible in the first place. The trade-off is a certain loss of quality compared to full precision. For most everyday use cases, like rewriting, classification, and summarization, INT4 is a good compromise. If you think the output is becoming too imprecise, you should look for a higher-resolution variant of the same model, rather than simply choosing a larger model across the board.

RAM is the real limiting factor, not storage space: The download size provides only a rough estimate for the required RAM. During inference, the model requires additional RAM depending on the context length and backend (LiteRT-LM or MediaPipe), which can result in significantly larger memory usage than the file size. A model that runs smoothly on your own test device may already reach its limits on an older device or one with less RAM and crash the app when trying to load the model or run inference.

Additional Considerations for Selection

  • Gated vs public
    Some models like Gemma3, Gemma4 or EmbeddingGemma require a license agreement and a HuggingFace API token, while Qwen3 or Gecko are freely available. This is relevant for user onboarding as well as CI/CD and not just for local development. We enjoy using Gemma models because they offer pretty good quality in the context of mobile on-device inference, but Qwen3 and Gecko are great alternatives that don’t require auth.
  • Backend support
    Not every quantization level performs equally on GPU and CPU delegates. Some combinations only perform well on one of the two. This requires good testing with a variety of devices.
  • Context length
    Smaller models often come with smaller maximum context windows. For long RAG contexts or detailed chat histories, this can quickly become a limiting factor. In our experience, this is the biggest drawback — but for all mobile local LLMs.

The Flutter Gemma Demo App

For this article, we built a small Flutter app that serves as a central theme. It uses flutter_gemma and all its submodules for model setup and inference as well as flutter_bloc for state management. We’re deliberately leaving out the navigation and similar peripheral topics. The app is divided into five tabs (Generation, Analysis, Embedding, RAG and Chat) and a setup screen. Each feature is built as its own Bloc + Widget pair with model access handled centrally using the FlutterGemma API.

The demo app uses Qwen3 0.6B for text inference and Gecko 256 for embeddings. Both models are publicly available and do not require a HuggingFace API token.

The central initialization runs once at app start and includes registering the engine.

Future<void> main() async {
// ...
await FlutterGemma.initialize(
inferenceEngines: const [
LiteRtLmEngine(), // .litertlm — Android, iOS, Desktop
MediaPipeEngine(), // .task / .bin — Android, iOS, Web
],
embeddingBackends: const [
LiteRtEmbeddingBackend(),
],
vectorStore: kIsWeb ? WebSqliteVectorStore() : SqliteVectorStore(),
huggingFaceToken: dotenv.env['HUGGING_FACE_API_KEY'],
);
}

Model Setup: Download, Installation, Availability

The entry point for the app is the Setup screen. First, it checks if there is any model installed without loading it.

/// [hasActiveModel] is a synchronous and cheap check
if (FlutterGemma.hasActiveModel()) {
emit(state.copyWith(status: SetupStatus.ready));
} else {
emit(state.copyWith(status: SetupStatus.notInstalled));
}

If there is no model available, the app automatically initiates a download from HuggingFace with a progress bar visible in the UI.

await FlutterGemma.installModel(
modelType: ModelType.qwen3,
fileType: ModelFileType.litertlm,
)
.fromNetwork(
ModelConstants.inferenceModelUrl,
)
.withProgress((progress) => add(_ProgressUpdated(progress)))
.install();

Public models like Qwen3 or Gecko do not need API tokens. If your model requires a token, you can use a .env file in combination with the dotenv package to securely provide the API token. If the download fails, e.g., a network or storage problem occurs, the package throws a dedicated DownloadException instead of a generic Exception or Error:

try {
await FlutterGemma.installModel(
modelType: ModelType.qwen3,
fileType: ModelFileType.litertlm,
)
.fromNetwork(
ModelConstants.inferenceModelUrl,
// dotenv.env['HUGGING_FACE_API_KEY'], // pass token here if required
)
.withProgress((progress) => add(_ProgressUpdated(progress)))
.install();
} on DownloadException catch (e) {
emit(
state.copyWith(
status: SetupStatus.error,
errorMessage: e.error.toUserMessage(),
),
);
}

In short: Setup is the only place where network or storage problems could realistically occur. The rest of the app can rely on the already installed models.

Feature: Text generation (Rewrite & Summarize)

The Generation Tab rewrites text in a specific mood or simply summarizes the text. The prompt gives the model clear instructions, including the instruction to preserve critical data like numbers or names.

enum AiMood {
professional,
casual,
concise,
analytical;

String get label {
return switch (this) {
AiMood.professional => 'Professional',
AiMood.casual => 'Casual',
AiMood.concise => 'Concise',
AiMood.analytical => 'Analytical',
};
}
}

final prompt = '''
You are a professional writing assistant. Rewrite the following text
to sound highly ${event.mood.label.toLowerCase()}. Maintain all
critical data facts, numbers, dates, names, and contact details
exactly as written. Do not omit them.\n\n
Text to rewrite:\n${state.inputText};'''

The technical flow behind this is a pattern, that will be used in several places in the app:

  1. Get the active model
  2. Create a chat session
  3. Get the response
  4. Close the model
final model = await FlutterGemma.getActiveModel(
maxTokens: ModelConstants.maxTokens,
);
try {
final chat = await model.createChat();
await chat.addQueryChunk(Message.text(text: prompt, isUser: true));
final response = await chat.generateChatResponse();
final text = response is TextResponse ? response.token : '';
emit(state.copyWith(status: GenerationStatus.success, output: text));
} finally {
await model.close();
}

This chat/session pattern of Flutter Gemma is perfectly fine and a good reusable pattern for every text feature, but not for classical chats, as we will see later in the chapter Feature: Chat with History. The quality of responses varies a lot between models used. For Qwen3 0.6B, the results for summarization and rewriting are quite good, although sometimes it just repeats the original text.

Feature: Structured Analysis (Classification and Entity Extraction)

The Analysis tab includes two scenarios: Classifying a support mail and extracting entities from log entries. The key to getting structured output here is prompting and telling the model (Qwen3) to generate plain JSON without Markdown or explanations.

const prompt = '''
Classify this content and respond with valid JSON only —
no markdown, no explanation:\n
$_kScenario3Text\n\n
JSON format:\n
{"category":"...","priority":"...","labels":["...","..."]};'''

Even the bigger mobile local LLMs don’t always strictly follow these rules. That’s why post-processing matters even more. The code must be robust against format deviations. An easy fallback is returning the raw response.

String _formatClassification(String raw) {
try {
final json = jsonDecode(_extractJson(raw)) as Map<String, dynamic>;
final category = json['category'] ?? '—';
final priority = json['priority'] ?? '—';
final labels = (json['labels'] as List?)?.join(', ') ?? '—';
return '📋 CLASSIFICATION REPORT\n'
'Category: $category\n'
'Priority: $priority\n'
'Tags: $labels';
} catch (_) {
return raw.trim();
}
}

String _extractJson(String raw) {
final start = raw.indexOf('{');
final end = raw.lastIndexOf('}');
if (start == -1 || end == -1) return raw;
return raw.substring(start, end + 1);
}

While classification with Qwen3 0.6B seems to work reliably, entity extraction almost never succeeds in extracting all the information. In most cases it struggles to detect the “Impacted Users” (which is “14,000” in the example, but “0” got extracted). Repeating the entity extraction multiple times results in different outcomes for each execution.

Feature: Embeddings and Semantic Similarity

The Embedding tab uses its own model (Gecko 256), along with its own runtime ( flutter_gemma_embeddings), separate from the text generation model (Qwen3). Embeddings are a different class of models with their own workflow and use case: similarity and search rather than text generation. They need a completely different mental model consisting of vectors instead of words and similarity instead of responses. When choosing a model, there’s a classic trade-off. For example, Gecko 256 is small and publicly available, while EmbeddingGemma 512 is more accurate but gated.

The technical flow is rather simple:

  1. Embed reference text
  2. Embed user input
  3. Calculate cosine similarity between the two vectors
final embedder = await FlutterGemma.getActiveEmbedder();
try {
final inputVec = await embedder.generateEmbedding(
state.similarityInput,
);
final score = _cosineSimilarity(state.referenceVector!, inputVec);
emit(
state.copyWith(
status: EmbeddingStatus.referenceReady,
similarityScore: score,
),
);
} finally {
await embedder.close();
}

Calculating the cosine similarity is pure Dart code and not part of the FlutterGemma API.

double _cosineSimilarity(List<double> a, List<double> b) {
double dot = 0, magA = 0, magB = 0;
for (var i = 0; i < a.length; i++) {
dot += a[i] * b[i];
magA += a[i] * a[i];
magB += b[i] * b[i];
}
final denom = math.sqrt(magA) * math.sqrt(magB);
return denom == 0 ? 0 : dot / denom;
}

In the demo app, we embedded a small text about planets. Comparing our two inputs, “Planets are big rocks in the universe” (A) and “Bees are very important insects because they are the global pollinators” (B), we can see that input A has a higher similarity score than input B because it is semantically closer to the topic in the embedded text. At least with English text, Gecko 256 enables reliable similarity matching on mobile devices.

Feature: RAG with SQLite-VEC and filters

The RAG tab comes with its own small knowledge base consisting of seven short documents on science, cooking, and history. The knowledge base is indexed and searchable fully on-device, without a server or an external vector store.

Notably, we don’t need to install a second embedding model to use Flutter Gemma RAG capabilities. Instead, we use the same active Gecko 256 embedder as the Embedding tab.

Storage is handled by flutter_gemma_rag_sqlite. A SQLite-VEC store is created directly in the app’s Documents directory, and indexing is performed via addDocument() using text and JSON metadata.

await FlutterGemma.rag.initialize('${dir.path}/$_kRagDbFileName');

for (final doc in _kCorpus) {
await FlutterGemma.rag.addDocument(
id: doc.id,
content: doc.content,
metadata: doc.metadataJson, // {"topic": "...", "year": ...}
);
}

The real “out-of-the-box” experience is delivered by searchSimilar(). Embedding the user request and performing a cosine-similarity search run in one single call — no manual vector handling required like in the Embedding chapter.

final results = await FlutterGemma.rag.searchSimilar(
query: state.searchQuery,
topK: 5,
filter: _buildFilter(),
);

New in Flutter Gemma v1.x are type-safe metadata filters FilterSchema and FilterField, declared once in FlutterGemma.initialize().

await FlutterGemma.initialize(
inferenceEngines: const [
LiteRtLmEngine(),
MediaPipeEngine(),
],
embeddingBackends: const [
LiteRtEmbeddingBackend(),
],
vectorStore: kIsWeb ? WebSqliteVectorStore() : SqliteVectorStore(),
filterSchema: const FilterSchema(
fields: [
FilterField(name: 'topic', type: FilterFieldType.string),
FilterField(name: 'year', type: FilterFieldType.number),
],
),
huggingFaceToken: dotenv.env['HUGGING_FACE_API_KEY'],
);

As a result, the filters for topic and year run as true vec0 column conditions directly in sqlite-vec, rather than post-filtering in Dart. Every column in a virtual table follows strict rules for typing, formatting, and structure requirements. This means robustness, better performance, and less development overhead. In the demo, topic chips and a “from 2020” filter combine to form exactly such a typed condition.

Filter? _buildFilter() {
final must = <Condition>[];
if (state.topicFilter != kAllTopics) {
must.add(FieldEquals(key: 'topic', value: state.topicFilter));
}
if (state.recentOnly) {
must.add(FieldRange(key: 'year', gte: 2020));
}
return must.isEmpty ? null : Filter(must: must);
}

Each match also provides a similarity score, which makes it easy to distinguish strong matches from weak ones. While the Embedding chapter shows the basic concept of similarity between two texts, the RAG tab shows a practical application as a searchable knowledge base.

In short, with sqlite-vec and typed filters, Flutter Gemma delivers RAG as a ready-made component rather than a patchwork of individual parts (or packages in Flutter terms).

To get a good mixture of knowledge in the demo app, we provided documents from different centuries about science, history, and cooking with rather complex information to really challenge the on-device LLM capabilities. Again, the Gecko 256 Embedder does a great job, and RAG features of Flutter Gemma seem to work like a charm. Asking, “How is sourdough bread made?

Feature: Chat with History

The Chat tab differs from the previous features in a crucial way: the Generation and Analysis tabs create a new chat session for each request, fetch a single response, and close the model again. For a real chat, this is insufficient because the model needs to remember the whole conversation. In Flutter Gemma this is not a special case but a matter of lifecycle management: InferenceChat maintains its own history internally if you reuse the same instance across multiple turns, rather than creating a new one for each message.

Future<void> _onStarted(ChatStarted event, Emitter<ChatState> emit) async {
final model = await FlutterGemma.getActiveModel(
maxTokens: ModelConstants.maxTokens,
);
final chat = await model.createChat(
modelType: ModelType.qwen3,
);
}

The parameter modelType is not a minor detail here. For Qwen3 Flutter Gemma automatically appends /no_think to every user message to suppress the built-in thinking mode of the model. The <think> tags are also filtered from the response stream. Without this parameter, Qwen3 behaves significantly more unpredictably.

Every new message is passed to the chat instance via addQueryChunk(). The method generateChatResponseAsync() streams the response token by token. An emit.forEach loop is used to transfer those tokens into UI state.

Future<void> _onSubmitted(ChatMessageSubmitted event, Emitter<ChatState> emit,) async {
await chat.addQueryChunk(Message.text(text: text, isUser: true));

final buffer = StringBuffer();
await emit.forEach<ModelResponse>(
chat.generateChatResponseAsync(),
onData: (response) {
if (response is TextResponse) buffer.write(response.token);
return state.copyWith(messages: _withStreamedReply(buffer.toString()));
},
);
}

History is being persisted in session memory as well as internally by InferenceChat from Flutter Gemma. Like this, the next call of generateChatResponseAsync() knows the whole conversation and not only the last message. This means we don’t have to glue something together or maintain the history ourselves.

Resetting a conversation with clearHistory() does not only clear the message list but also closes the native session and reopens it. Otherwise, the model would continue to respond based on a transcript that is no longer visible in the UI.

await chat.clearHistory();

During this chapter, we learned that multi-turn chat is not an extra feature of Flutter Gemma but rather a direct result of the InferenceChat lifecycle. Chat history is being persisted by keeping the chat instance alive and not because you rebuild it yourself.

Qwen3 0.6B has met exactly the expectations we had for an LLM running on smartphone hardware. The quality of the chat is “okay”, but not really much more than that. Qwen3 0.6B has a mediocre understanding of context: It can stick to a topic quite well, but most information is hallucinated entirely. Sometimes the model strays from the topic after one or two requests. In one case, the model responded with an empty text after three questions, and it did not respond to requests anymore. After clearing the chat, it worked again. Usually, we can write about 8–15 messages before the end of the context window is reached. What I’ve noted very positively is that mixing languages like English and German seems to work better than expected. The model can translate a sentence and correctly switch back to the original language of the conversation. The only problem that occurs when using a language other than English: there are garbled characters at the end of the messages. I don’t know why but it always happens as soon as I start chatting in German. Of course, you must take the model size into account here, and for just 0.6B parameters, it’s astonishing that it produces such a quality at all. Newer models like Gemma4, with more parameters and better quantization, are likely to perform even significantly better in this regard. However, such a comparison would go beyond the scope of this article.

Limitations, Pitfalls and Practical Lessons

On-device models have real storage and memory budgets. Download size and RAM requirements during inference on mobile devices are not an implementation detail — they are a hard limiting factor. Recurring patterns in the demo app: Models need to be closed (e.g., model.close() and embedder.close()) after finishing the task, or otherwise the resources will not be freed.

Despite a unified Dart API, platform differences persist under the hood. The engines of MediaPipe and LiteRT, as well as the systems iOS and Android themselves, do not always behave identically. There are cases where native approaches remain the better choice: Performance-critical scenarios or highly platform-specific hardware acceleration (as with LLM.swift mentioned earlier).

Conclusion

Cross-platform and local AI are not mutually exclusive. This article’s demo app demonstrates how the modular approach of Flutter Gemma resolves an apparent conflict of objectives. For teams that maintain a shared codebase for Android and iOS and don’t have extremely performance-critical real-time requirements, this is a very practical path to on-device LLM features.

Flutter Gemma really shines for small tasks and is a great way to implement local AI features for older smartphones that don’t have native support for Google’s Gemini Nano or Apple’s Foundation Model. Where native solutions continue to lead remains a matter of requirements.

This is evident across all five feature areas: Flutter Gemma doesn’t just answer the question, “Does the model even run?”. Instead, it provides the concepts needed for real product features, ranging from the download pipeline and typed RAG filters to the session lifecycle in chat. The actual work then lies in prompt engineering and product logic, not in the infrastructure.

The quality of the output from on-device smartphone LLMs remains a matter of debate. In our view, it’s already suitable for some use cases, but not so much for others. For example, summarizing and classifying shorter texts, as well as embedding texts, works surprisingly well with these small models. However, when working with complex, longer texts or performing entity extraction, there are still too many errors, so these tasks should continue to be handled by a powerful external model.

You can find the complete code in the our GitHub repository:

GitHub - EXXETA/flutter_local_llm: A small cross-platform mobile app to demonstrate on-device LLMs with Flutter Gemma. It features text generation, classification, entity extraction, RAG capabilities and a chat.

Feel free to try out the app right away with your own model!
(by Jonas Klock)


Flutter Gemma: The hidden gem of cross-platform local AI was originally published in Flutter Community on Medium, where people are continuing the conversation by highlighting and responding to this story.

Read the whole story
alvinashcraft
26 minutes ago
reply
Pennsylvania, USA
Share this story
Delete
Next Page of Stories