Praveen Pendyala

Praveen Pendyala

@pkp.io

Ex-Google & Ex-Microsoft. Bootstrapping my own indie apps. Profitable πŸ’° Now Scaling up πŸš€πŸ€ž Transcriptions - https://transcript.lol Content repurposing - https://repurpose.lol Travel planning - https://roamaround.app Personal portfolio - https://pkp.io

1K followers245 following179 posts

I'm glad I added dark mode to Transcript LOL. I spend most of day building / dogfooding transcript - cannot look at a bright screen for so long!

Personal moats in tech are eroding fast! Are distribution and sales the only skills with long term moat? A year ago: skilled programmer is a scarce and sought after skill. Now: demand shifted and effective scarcity is low.

What’s your main motivation to work for yourself? I started out just for the fun of building. Freedom is another big factor I discovered along the way. It was rainy this weekend so, worked on Sunday and took Monday off instead πŸ˜…

Week 33: Email sequences - example where it really helps knowing how to code + sell πŸ”₯ Spent a lot of time researching techniques specific to each sequence: - πŸ”’ # of emails in the sequence - πŸ’¬ Key message in each email - ⏱️ Timing the message

I knew follow up communication is essential but I didn't want to just send off 1 filler email and be done. So, took the time to research, write & rewrite copy, implement tooling and setup the sequences.

This took so much longer than I thought as I also had to create new functionality (in reporting or internal tooling) to support specific sequences like: - ⏳9 days before subscription ends - πŸ€‘ Unique, user specific discount codes that expire in days

Week 32: Started off feeling defeated 😞 πŸ“’ Ad campaigns: Weeks of work leading up to this moment! Launched our first Google Ads campaign on Sunday. Got rejected with an inconspicuous policy error. I have tried everything I could think of to get around this - Google is very unhelpful here!

πŸ’ͺ Powering through Despite this, I have showed up everyday: Improved transcript for our users and tried things to get resolve the issue. PS: The campaign is live, for now (🀞 we don't run into this again)

Week 31: Bottom of funnel optimisations Moved to Spain for the next couple of months. Same consistency in the routine just a different location. Rebuilt the pricing page and upsell components. Focusing on the final step in the funnel: Visitor -> User -> Key feature use -> Subscriber

Who Is Your ICP? An onboarding survey can capture this! Inspired by @TallyForms I'm adding this. But... I don't want to overload the path to key feature usage. I plan to show this right after user requests their first transcript and waiting for the result. Are there better ways to gather this?

Week 29: No one cares about your product... It's your job to convince your users to care! We have to get users to the wow moment as quickly as possible! In practice, this means: keeping the funnel to key feature usage as short and distraction free as possible.

In Transcript v1, I have done this well using my learnings at SwiftKey. While building v2 from ground up, I haven't paid attention to it because I know I can always revise later. Sketched out the current flow to create a transcript for a new user. Spent this week to optimise this funnel.

Week 28: Marketing, marketing, marketing Word of mouth has been good but not enough for the growth I want to see in Transcript. This week's focus has been on doing some ground work to test new marketing channels. Excited to hit the ground running by next week!

Week 27: Marketing work Been doing some groundwork for a consistent marketing push. Need to crack the distribution problem well or everything else I’m building is for nothing Also, I have finally taken a few days off this week with a long weekend trip to Norway.

Week 26: A slow week 🐒 πŸ”’ Dashboard to track conversions per channel πŸ“’ Prep for Ads and organic experiments πŸš€ Fixed bottlenecks with database

I will give investor updates bootstrapping. I will give investor updates bootstrapping. I will give investor updates bootstrapping. I will give investor updates bootstrapping.

Just because I did not take outside investment, doesn't mean I'm absolved of most communication responsibilities. You must constantly stay in touch with your users. This is everything I do each month:

Daily: Respond to support requests Weekly: Evaluate product feedback Monthly: Send detailed product updates This is in addition to special announcements, onboarding flows, promotions etc.

Week 25: I survived a week without AI πŸ€– Here's what I learned... Thanks to @EE I'm practically cut-off from internet this week so, I challenged myself to build offline!

βœ… Optimised the auto-scalar (love algorithmic challenges) πŸš€ Built a Zapier extension for Transcript LOL ⬆️ Cleaned up & upgraded dependencies πŸ“ Prepared release notes for monthly product updates

I gave the same problem to ChatGPT, Deepseek R1, Claude and Grok. The results tell a very different story to benchmarks! Models tested: - o3-mini-high (ChatGPT) - DeepThink R1 (DeepSeek) - Claude 3.5 Sonnet - Grok 3 beta (thinking on)

View full thread

Claude: Fastest response and very similar solution to Deepseek. Optimal and usable as is. Grok 3: Thought for 120 seconds. Similar solution as above 2. But code conventions are very different to typical Typescript.

Conclusion: Claude still best at coding. Beats them all with speed and maintainable code. Deepseek thinks too long. But gave a usable solution. Grok 3 takes time and gives a solution that is logically correct but needs edits to make it maintainable. ChatGPT has fallen so far behind!

I gave the same problem to ChatGPT, Deepseek R1, Claude and Grok. The results tell a very different story to benchmarks! Models tested: - o3-mini-high (ChatGPT) - DeepThink R1 (DeepSeek) - Claude 3.5 Sonnet - Grok 3 beta (thinking on)

The problem: Using the state of current transcription jobs (active + pending), write a function which returns true if we need to add another worker, false otherwise. We also know the size and times of each job. And we have a target time per job size. (my actual prompt is much more detailed).

The output: ChatGPT: Reasoned for 68 seconds and gave a naive solution that aggregates all timings and far from optimal. Deepseek: Thought for 423 seconds and gave a usable function that simulates the state and returns the optimal answer.

One thing I learnt from successful founders and good programmers. Successful founders 🏎️ When building something, built it fast so you can do: users πŸ” feedback πŸ” improve Good programmers 🧠 When building something, build it right so you don't have to keep coming back to it

How I combine it πŸ”₯ For new things: Like testing a new idea, pricing strategy, or copy; I follow the founders advice. For foundational things: Like building app architecture, background job framework; I follow the good programmers advice.

0 ➑️ 25 ➑️ 0 - in just a few minutes. Very happy with the results of scaling work last week. Transcript LOL demonstrated it can scale, and more importantly scale quick! Onto improving other areas now!

What did you do last week? Everyone should be asking this question themselves. It’s a basic pulse check if you want to grow! I been answering this question every week, publicly, for 24 weeks now!

I been getting a lot of requests lately to chat about startups. I'm always enthusiastic to listen and share my experience! If you do book a meeting, please show up because, I will! And it's not fun sitting in a cold room (where I take my calls), in my weekend, waiting for you to never join the call!

Week 24: Scaling up: millions of hours per year ⬆️ πŸ’ͺ Transcript is now ready to handle ~100 hours of transcription per minute πŸ›£οΈ Clear path to scale this further 2-5x βŒ›οΈ Cold boot optimisations Scaling is an endless pit of things to do. Will revisit after demand catch ups.

Stress tested Transcript LOL’s scaling mechanism today. Hit a peak of 200 hours per minute, no problems πŸ”₯πŸ”₯ Making improvements to cold boot speeds before the next test.

The simple autoscaler we use in production. Can make it smarter as we know so much else that we don't use: - Size of each active job - Size of each queued job - Mean-time to completion per job per size

Unpopular opinion: Computer science fundamentals are useful and essential! I'm thoroughly enjoying building an auto-scalar for Transcript LOL workers. A very interesting scheduler problem. You can make it however smart as you want! And the impact is real and tangible!

- Save big money as a business πŸ’°πŸ’° - Provide faster transcriptions for our users πŸš€ - I satisfy my intellectual curiosity πŸ˜† WIN-WIN-WIN!

Before someone says, "use XYZ serverless": I have tried them all. The serverless offerings are typically 3-5x more expensive for the time they are active. Definitely better to scale up and recycle instances - of course the cost is higher engineering effort.

Fastest transcriptions without zero compromise on quality! πŸš€ 1.9 minutes to transcribe per hour of audio πŸš€ 13 seconds or less for files under 20 mins What's measured will be improved!

View full thread

I'm glad to report that I finally found a tool that can do it all and very affordable! - checkout @dittofeed. Live for Transcript LOL this week πŸ”₯

➑️ Transactional (billing, transcription updates) - πŸ’° (many tools) ➑️ Broadcasts (product updates, broad marketing) - πŸ’°πŸ’° (few tools) ➑️ Automated flows (onboarding, promotions) - πŸ’°πŸ’°πŸ’° (fewer tools) ➑️ Selective comms (based on recent user actions) - πŸ’°πŸ’°πŸ’° (very few tools)

The best internal feature I have built into transcript, by far! - Imitate a user! Saves me so much time as I don't have to go back and forth when a customer writes to me with an issue. I can easily log-in as them and dissect the issue faster!

My complete strategy on how to win this year: Make Transcript a little bit better each day, everyday. These small improvements will compound and give the best value for money to my customers. It is really that simple. The key is consistency!