🥳 Happy Monday, everyone!

We made it to the forth issue! Thank you to everyone who read last week’s issue ❤️

📣 I’m migrating the newsletter email subsciption from SendGrid to ConvertKit due to problems with previous issues going out to all subscribers with SendGrid. I want to have confidence that each newsletters makes it to each subscriber’s inbox. I’m hopeful that ConvertKit will be the better solution going forward 😊


📆 Today I’m featuring Chris Vasselli and Nghia Tran.

Chris is the creator Nihongo. Nihongo is a modern Japanese dictionary and study tool for iOS. I’m so excited that I discovered this app when I was attempting to brush up on my Japanese skills (I took 5.5 years of Japanese class in junior high and high school 😀). I sadly don’t remember much of the Japanese I learned all those years ago but Chris’ solution with Nihongo filled a gap in my study tools. I’m in love with all of the unique solutions that Chris implemented to make studying Japanese fun and easy!

Nghia is the creator of Proxyman. Proxyman is a native, high-performance macOS application, which enables developers to observe and manipulate HTTP/HTTPS requests. I often have to debug websites/APIs when workinig on fastlane and Proxyman is always my tool of choice for this 💪 Setting up the certificates to observe SSL requests is straight forward with only a few clicks. The user interface for viewing requests and responses is clean and powerful. The other proxy tools I’ve used in the past have had messy and complicated user interfaces that left me not wanting to use it unless I had to… but I’m always excited when I get to open Proxyman 😏

👉 Please make sure to follow them or support them anyway you can! 😇 I’m excited to share their indie dev stories.


Indie Devs

Chris Vasselli

Putney, VT, USA

Part-time stay-at-home-dad and part-time indie dev working on Nihongo.

Nghia Tran

Saigon, Vietnam

Full-time student and full-time indie dev working Proxyman


Chris Vasselli

Q&A

1) What is your name? Where do you live?

Chris Vasselli, and I live in Putney, VT, USA.

2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?

I’m a techie gamer living in beautiful rural Vermont! I’ve been here about 6 years, and before that lived in Oregon, New Jersey, California, and Japan. I’ve got a degree in Computer Science from UC Berkeley (go bears!) and actually spent most of my professional life as a software developer in the enterprise security space (BigFix, IBM, Subspace, and Box). I left my full-time job at Box about two years ago to be a part-time stay-at-home-dad, part-time indie app developer. 👶

My husband and I both speak Japanese, and we have a 3 year old son who we’re trying to raise bilingual. We don’t live there any more, but we both have a special connection to the country, and still try to spend a month or two in Japan every year.

I’m very into videogames, mostly Nintendo games, JRPGs, and clever indie stuff. Final Fantasy XIV is my current addiction. 🙃

Outside of tech, we’re raising chickens in our backyard this year, which is surprisingly rewarding! Our chickens are super dumb, but super sweet. I also like to play piano, and hike and swim in the woods of Vermont.

3) Have you ever considered yourself an indie developer?

I do! It’s funny, when I left my full-time job to focus on Nihongo, I didn’t even put those words to it. I just told people I was leaving to focus on this app I had built. Then I got more involved in the community and realized that I was an “indie developer” now. I liked the sound of that, so now that’s what I tell people I am. 🙂

4) What got you started/interested in creating your own applications outside of your “normal” job?

I actually started with games. I learned to program in high school, when my “normal” job was shelving books at the library. I started making games just to figure out how they worked; little throwaway games in a bunch of different genres: a platformer, a shmup, a 2D Zelda-style game, an RPG… but the scope of games like that is generally too big for a single person, let alone a high schooler, to finish in their free time. So I made something smaller scope, a puzzle game called Swap-n-Drop (basically a Tetris Attack knock-off) and managed to sell it to a web games site for $500. At the time it was pretty mind-blowing that someone would actually pay me for something I made. That was my first taste of indie life.

5) How do you balance your time between friends/family, work, hobbies, and indie dev?

I think it’s actually one of the central contradictions of being an indie developer. The dream is to be your own boss, and have the flexibility and freedom that comes with that. But there’s also the reality that if you don’t get done what you need to get done, there’s no safety net. If you don’t keep up with your competitors, don’t get that new marketing done, don’t finish that new feature, your app can fail and you will lose that dream.

You can deal with that by (1) working like crazy and just letting your work be your life, or (2) accepting and coming to peace with the risk of failure, and live your best life right now. I don’t pass judgment on either approach. Personally I aspire to #2, but it’s hard.

For me, a lot if it is setting up clear mental boundaries between work life and home life. I have a separate room in my house that we call the office, and I only work in there. Once I leave the office, I’m not at work any more. I try to delineate the time boundaries in my day clearly too. I don’t get started going through my emails before breakfast, because then my head will already be in work-mode. Once I eat dinner, I don’t go back to work.

I won’t say it’s easy. It’s been especially hard since my kid’s preschool shut down as a result of COVID-19. I do sometimes break my own rules. But when I follow them, I find I’m happier.

6) Nihongo - What got you inspired to create the Nihongo app? Did you want it for yourself? Did the features/method of the app work for you and you wanted to share it with others?

Yeah, exactly.

When I first moved to Japan, I was using a flashcard app called Flashcards Deluxe to study. When I encountered a new word, I would create a flashcard for that word so that I could study it later. Writing flashcards got really tedious, and I found that I was spending a huge amount of time just looking up words and manually writing out cards. I eventually got lazy, and just went back to studying from premade decks. It dawned on me how big of a waste this was, that I was surrounded by real-world Japanese everywhere, and I was still studying the same way I would at home in the US.

The dictionary app I used at the time, imiwa?, had the ability to export your recently looked up words to Dropbox, and Flashcards Deluxe had the ability to import flashcards from Dropbox. 💡! So my first attempt was to script my way out of this problem: Look up words in imiwa?. Export my dictionary history to Dropbox. Leave my laptop open at home all day, with a Folder Action set to trigger a script when it detects a new file in my Dropbox. Run a script that transforms the imiwa? dictionary history format to the Flashcards Deluxe flashcard format, and puts it in a new folder. Import the new Flashcards Deluxe flashcards from Dropbox. Of course the natural next thought is “hmm, wouldn’t it be great if there were a single app that could just do this?” And that was how Nihongo started — the very first features I built were a spaced repetition system flashcard system and a basic dictionary, that would automatically create flashcards from the words I looked up.

7) Nihongo - What got you interested in the Japanese language and culture? Asking this because I’m blindly assuming this was inspiration for the Nihongo app 🙃

I was a nerdy kid, and was very into videogames and anime, so that’s definitely where it started. I took French in middle school, but when Japanese was offered in high school, that seemed much more relevant to me. 😛 I think I had this idea that I could take a year or two of Japanese, and then I’d get to start playing new videogames when they came out in Japan, and wouldn’t have to wait for them to come out in English.

But as I got older, it really turned into a love of Japan the country, and especially the people. I’ve met some of the warmest, friendliest people I’ve ever met in my life in Japan. I was in Japan in 2011 when the Tohoku earthquake and tsunami hit. It was scary, but also incredible to see how the country came together to support one another. I came back a year or so later to live in Japan, and fell in love. Even if I don’t have the chance to live there again, it’ll be with me the rest of my life.

8) Nihongo - Would you be able to give a short explanation of hiragana, katakana, kanji, and furigana to our readers that aren’t familiar with the Japanese language?

Of course! These words all correspond to aspects of the Japanese writing system, which is pretty different from English.

Hiragana and Katakana are the Japanese characters that represent sounds, kind of like English letters. In general, hiragana is used for Japanese words, and katakana is used for loan words from other languages. In English, a single character can be pronounced many different ways, but in Japanese each character always represents a single sound. So if you know how to write a word in hiragana or katakana, you know how to say it out loud.

Most words in Japanese can also be written using Kanji, which instead of representing a sound, represent an idea. Kanji usually have a few different pronunciations based on the particular word they’re showing up in. We actually have something similar in English - numbers! Consider the numeral 2. On its own, it’s pronounced “two”. But if you put “nd” after it (2nd), we instead pronounce it “seco” (as in, “second”). Instead of representing a sound, the numeral 2 represents an idea.

Because kanji represent ideas and not sounds, when you see a word written in kanji that you haven’t seen before, you might not know how to pronounce it. So in material written for kids or learners, they’ll often put hiragana on top of the kanji so you know how to pronounce it. That hiragana on top of the kanji is called Furigana.

9) Nihongo - The clippings feature so cool! I’ve always learned best by example so this seems perfect for me. Being able to paste a blob text and see furigana is so helpful. Was this a feature you originally planned to implemented? Where there any challenges implementing this feature?

Clippings was the second big feature I implemented, after the automatic flashcard generation. It actually came about because I loved playing old RPG’s in Japanese, and wanted to be able to look up words quicker. I was able to find scripts online for the games, and I wanted something that would let me paste that text in and then just tap to look up words as I went along. That’s how clippings started. Clippings also generates flashcards automatically, and you can filter based on how many times a word shows up in a piece of text. So I could, say, pre-study the words that show up 3 or more times in the next section of Final Fantasy VI.

Clippings was/is one of the most technically challenging parts of the app to build. Japanese doesn’t have spaces, so tokenization (finding the boundaries between words) is actually quite difficult. You also need to be able to find conjugated words, and the way Japanese works, conjugated words can often themselves be further conjugated to form these multi-layer nested conjugations.

I also actually had some serious memory usage problems at first, and this was pre-Swift, so I ended up building my own system for pulling out substrings of NSStrings that would point at the memory of the original NSString, instead of allocating a copy. I haven’t converted that code to Swift yet, so that’s still how it works today.

10) Nihongo - I’m slightly blown away by the “Word Commonality” feature 🤯 I took Japanese for 5 years in junior high and high school and I remember this being hard to remember. No question here but seeing this type of information / metadata is so 🔥

Knowing the commonality is so important, but dictionaries often bury it, if they expose it at all! Glad you like it. 🙌

11) Nihongo - To be honest, I have never used a Safari extension on iOS and also didn’t really know they existed 🤦‍♂️ But the Safari extension your Pro version offers looks like the perfect implementation of a Safari extension. I don’t even know what my question is here but like… How did you even make it work and look so good? 😇

Yeah, unfortunately most people don’t know they exist, so it doesn’t get a lot of usage. It’s kind of hidden under the “Share” menu in Safari too, which is super unintuitive for users to discover. But I’m glad you like it!

There was another big memory management challenge with the Safari Extension because of the way that extensions work. They’re (1) strictly limited in the amount of memory they can use, and (2) have to deliver their payload from the extension back to the webpage all at once, at the end of the work. They can’t stream results across. And when you’re delivering that payload across, it copies the data, and effectively double-charges you for that memory usage! So on large websites, you can get through the entire expensive parsing/tokenizing operation, only to crash when the extension tries to copy the data back to the webpage. 😭

12) Nihongo - I’ve been wanting (and poorly trying) to re-learn Japanese. Are there any other companion apps or services that you recommend to use with Nihongo to help proficiency?

I think one of the most important things is just to set yourself up with the right mindset and the right set of tools, so you don’t waste a bunch of energy in unproductive ways. I highly recommend checking out John Fotheringham’s book Master Japanese, which rather than trying to teach you Japanese, teaches you how to learn Japanese.

For learning grammar, I think the app Bunpo (also an indie I believe) is really great. Wanikani is another really well-designed course for learning kanji and vocab.

13) Nihongo - What’s next for Nihongo? Your feature offering already looks perfect but curious if you have anything else you’d like to add 😀

Ooooooh man do I ever have stuff I want to add! My current feature backlog has 126 items in it. If I wanted to, I could literally spend the rest of my life working on just this app. 😅

The top of that list right now is cloud syncing and pitch accent information, both of which I’m hoping to add in my next release. Other things on that list include real human audio pronunciation of words, handwritten kanji input, “web clippings”, “photo clippings”, better accessibility support, flashcard goals and statistics, example sentences on flashcards, custom kanji decks, better clipping tokenization, Siri shortcuts, clipping and flashcard folders, a Mac version… I could go on and on!

14) What’s been the hardest part of being an indie dev? What the most fun part of being an indie dev?

The hardest part is probably all the work/life balance stuff. That plus making friends. Without an office to go to, you really have to find other ways to put yourself out there and meet people, and that’s hard. Fortunately having a three year old means I get to meet a lot of other parents, so that’s helped a lot.

The most fun part is probably hearing from people that love your app. I heard from someone recently who told me that they bought an iPad just so they could use my new OCR feature to read manga on a big screen. Stories about how people are using the app and loving it bring me a huge amount of joy and pride. ☺️

15) Is there anything else you’d like to tell the indie dev community about you?

I took a pretty cautious path to get into indie development, and I’d love to share a little more of that story.

I started Nihongo on the side, and it took me about 18 months to get to a 1.0 release. I made almost no money from it for the first couple years after launch, but continued working on it as a side project while I had another full-time software development job. When it did start to make some money, and I realized I might actually be able to do that as a job, me and my husband put together a plan for when it would make sense to actually take the leap. We built up a nest egg for a couple more years, and waited for Nihongo to get a little closer to sustainability. It was over six years from when I started working on Nihongo to when it became my main job.

I think it’s important for people to know that their product doesn’t have to immediately be a huge success. Slow growth can happen too, and that’s what’s led me to where I am.

Nghia Tran

Q&A

1) What is your name? Where do you live?

My name is Nghia Tran. I’m currently based in Saigon, Vietnam.

2) Introduce yourself. Education? Background? Main job? Interests outside of tech? Interests inside of tech?

I dropped out of my first university 6 years ago after applying for my first job at Feels - a remote-based company in the UK. I worked as an iOS developer for 4 years and then worked as a macOS developer at Toggl for almost 2 years. I am currently both a full-time student at RMIT University (yes :P) and an indie developer working for Proxyman. I have a fondness for scuba diving and I just got a diving license a couple of months ago :P. I hope the pandemic will be over soon so that I can go diving with my friends in Phuket, Thailand. In terms of technology, I fall in love with applications written on iOS and macOS platforms, especially developer tools. I believe that the developer domain is worth investing in because working with the right tools could make our life (developers) easier.

3) Have you ever considered yourself an indie developer?

I had never thought of being an indie developer when I was a first-year student 9 years ago. Yet now I work full-time for Proxyman and can live on that, I guess I am becoming an indie developer, and I am happy that I am 😛.

4) What got you started/interested in creating your applications outside of your “normal” job?

In general, I think that doing side projects is fun as they will keep you up with technology as well as stay relevant in your field. Before starting Proxyman, I have created several mobile applications in my spare time to visualize and apply what I learned. Among them, Proxyman is the first macOS application that I have created which brings me both revenue and the chance to step out of my comfort zone. To be honest, I felt that there were thousands more technical challenges than what I did when I was an iOS developer 😅.

5) How do you balance your time between friends/family, work, hobbies, and indie dev?

I have no secrets for balancing time, I guess when you enjoy doing something, you can always find time for it. Yet if you want to start your side-project while being a full-time developer, I think commitment is crucial. When I was working at Toggl, I tried to spend at least 2-3 hours every day with Proxyman and stick with it for nearly two years. Besides, going to sleep before midnight is also essential in my opinion (even when I have tons of work to do). It helps me to stay fresh the next day and less stressed.

6) Proxyman - Congrats ongoing full-time Proxyman! How has your life changed now that you work on Proxyman full-time?

Leaving a full-time job means I have more time for myself, Proxyman, and my second-year study at RMIT University. It’s the first time I decided to leave the job without finding a new job and to be honest, I was hesitant to do it at the beginning. But right now, this decision is the best decision I have made 😅. Spending entire days to do what we truly love and are passionate about is the best feeling ever.

7) Proxyman - When and where did you get the idea to start Proxyman?

I started Proxyman in late 2018 when our team used Charles Proxy for debugging and escalating bugs. I remembered at that time I had to google how to set up the certificate on my iOS simulator, and interestingly, there were many folks on StackOverflow asking similar questions like mine. When I started to dig deeper, I found some limitations in both UI and UX of the product, so I asked myself what if I created a similar app that can fix those problems. That is how I started Proxyman.

8) Proxyman - I know why I use Proxyman over Charles Proxy or Fiddler 😜 But how do you try to position Proxyman against other proxies?

As you might know, Fiddler or Charles are both cross-platform apps. Their features are highly-matured but some advanced features are designed with a lot of low-level information that might make it hard to use. Whereas, there are developers in our community who prefer to use “platform-specific” apps or demand a seamless experience. To me, Proxyman does not completely compete with Charles Proxy, Fiddler or Wireshark. Instead, it is tailored to serve a certain group of users. If you’re a hacker or savvy developer who would go deeper to analyze network traffic from TCP, SSL, HTTP Layers, Charles Proxy, Fiddler and Wireshark might be the tools you need. If you’re front-end, mobile developers, who want a Mac app to see HTTPS contents or to debug your apps easily, Proxyman might be your friend 😊. I believe each product has its own advantages/ disadvantages as its features are designed for different groups of users.

9) Proxyman - I believe that you just rewrote Proxyman to use Swift-NIO. This sounds cool but I have no idea what benefits Proxyman gained 🙃 Would you be able to explain the benefits from a user perspective?

Before Swift-NIO, the initial version of Proxyman was built on top of AsyncCocoaSocket, which provides basic sockets for communication on MiTM apps. Even though this library isn’t built for high-performance networking applications and lacks man-in-the-middle tool features, such as HTTP Server, HTTP Parser, HTTP/2, … it is reasonable to kick start the project and have more time to focus on the UI/UX Proxyman part. Eventually, more and more big features have to implement, like Map Local, Map Remote, and Breakpoint,… I evaluate that AsyncCocoaSocket is not good enough and it’s difficult to build more features on the top of an unstable foundation.

For that reason, I planned to write ProxymanCore v2 with cutting-edge technology, and luckily I found Swift NIO and its active community. I spent 1-2 months researching and writing a first Swift-NIO prototype. The more I use Swift-NIO, the more amazed how it’s. To elaborate, Swift NIO is an event-driven network framework, which has built-in Client/Server Bootstrap, HTTP Parser, HTTP/2, SSL,.. which is what you need to rapidly develop a networking application. Additionally, Swift NIO has the same design structure and philosophy as Netty (Java), so I have extra resources to implement the core.

From a technical perspective, it means I have more confidence to build new tools and features and I’m able to ship the core to other platforms: iOS (in progress), Windows (near future) and Linux (already supports by Swift-NIO)

From the user perspective, it means Proxyman is now more reliable, less unexpected crashes, and high-performance than the v1 “ten times” 😄. You can notice how it’s better by trying to intercept all traffic and reload a bunch of heavy websites between the v1 and v2. You’d be mind blown 🙌

10) Proxyman - Your SSL proxying setup is sooooo nice 💯 I struggled with SSL setup on other proxies but Proxyman made it so easy. How many versions of this screen have you gone through to get to the current version?

As I remember, this feature took me two to three version to improve until Proxyman-ers stop asking/emailing me why it doesn’t work on their machine 😁? If there are a number of users who repeatedly ask the same question, it means that the UI/UX of this part is the problem. Thus, I had to categorize those problems from mailbox and StackOverflow, then redesign it to the final version.

Other than that, the Map Local tool took three versions to refine too. The first version of Map Local is the MVP version. Get stuff done and you’re able to select a local file and map as a Response. The second and the latest, I introduced the built-in Editor which is easier for folks to edit the HTTP Message. Therefore, it’s possible to map the entire Response, including Status Code, Headers, and the Body.

As you see, it’s impossible to come up with the perfect solution in the first place. Just write the MVP design and implementation first and then refine later.

11) Proxyman - I’ve been a user of Proxyman for a while but I recently just discovered your docs and OMG 🤯 Its so well done. Clean, simple, and pretty. Do you have any tips and tricks to create great documentation and keep it up to date?

Proxyman Document is built on top of GitBook and to be honest, I don’t have any tips to write the documentation. I just write what I suppose to be helpful 😅

12) Proxyman - What is the feature you are most proud of implementing / most excited about in Proxyman? I’m sure each user has their own favorite part but I’m curious what your favorite part is.

The feature that I’m most proud of is the ease of seeing the HTTPS response without having solid knowledge about networking stack 😁 In comparison with other tools, users might need to do a little search in order to use the tools efficiently. For instance, you have to manually open the KeyChain and trust the certificate and know how to override the HTTP System Proxy. It’s more difficult when doing it on iOS, Simulator, and Android devices too.

Therefore, Hide the complexity and doing automatically mundane tasks for the users is crucial for Proxyman users. To illustrate, instead of letting the user do it, Proxyman automatically overrides the HTTP Proxy by using Helper Tools or networksetup, generating the certificate and trust on the Keychain. For savvy users, Proxyman also offers manual solutions as their desired.

It’s easier for the end-users and its more complex and more workload are for me. Thus, I’m proud that I chose the difficult approach and left the easy part to the users.

On the other hand, categorizing HTTP Requests by domain or clients is one of the features I love too. It enables us to filter out the unnecessary requests and focus on what we actually need. Overall, it increases our productivity too.

The final design has been refined more than five times as far as I remember, and right now I’m happy with the current version 😊

13) Proxyman - What’s next?! Now that you are full-time Proxyman I’m going to assume you have some amazing plans

Full debugging features (Scripting, Plugs-in,…) are on our release schedule and we are currently working on the iOS version of Proxyman so it is anticipated that you would be able to see them all in upcoming releases. Besides, we’re also working our butts off to bring Proxyman to the Windows platform 🙏, hopefully, you can enjoy it as much as the current macOS version 😄. In case your team needs customization or any feature requests, don’t hesitate to drop us a message at support@proxyman.io or create a ticket at our Github, we will get back to you shortly.

14) What’s been the hardest part of being an indie dev? What the most fun part of being an indie dev?

I suppose the hardest part of being an indie dev is to deal with gray areas. When I first started Proxyman, I didn’t know for sure if there were any users, let alone paid users. Even when there were users, I still questioned myself a lot about how to design the same feature yet satisfy the different needs of users. There might be no certainty so I often go with “trial-and-errors” then tailor the features based on users’ feedback.

The fun part is definitely the recognition and support from the community. There was no better feeling than waking up and receiving emails or tweets from users saying how much they loved your app and saved their time. I think it is the motivation that drives me to deliver a better app.

15) Is there anything else you’d like to tell the indie dev community about you?

Thank you for reading this far and thank you Josh for having me.


Thank you to everybody who made it to this footer! You either spent the time to read or took the effort to scroll 😊

Make sure to visit https://indiedevmonday.com/subscribe to get an email of future issues!

And go to Twitter and give @IndieDevMonday a follow… or multiple follows if you manage more than one Twitter account 😜