More from TokyoDev
Over my career, I’ve spent at least one thousand working hours on supporting local developer communities. My current business, TokyoDev, has spent over 8 million Japanese yen (about 53,000 USD) on community sponsorships. What have I received in return? That depends on your viewpoint. From a cold-hearted capitalist perspective, that time and money I invested hasn’t produced enough direct returns to justify the expense. Personally, I don’t see it as wasted—all of it has had a positive impact on society. What’s more, the three businesses I founded have owed much of their success to my community involvement. Those companies are: Mobalean, a technical consultancy that helped companies like PayPal, Match.com, and Estee Lauder build web apps for Japanese feature phones Doorkeeper, an event registration platform that hosted thousands of events per month TokyoDev, a job board that helps international software engineers get jobs in Japan If I hadn’t volunteered for and donated to various developer communities, two out of those three businesses would never have been founded at all, and TokyoDev certainly wouldn’t be the success story it is today. So, despite these “unequal” returns, one of the best strategies for my startups has been to get involved with communities whenever possible. I’ll go over some of the different ways communities have helped grow my businesses, and give specific examples of wins we’ve experienced over the years. Growing through existing communities There are two kinds of communities that can help you grow your startup: preexisting communities independent of your business, and communities you build around the business itself. My companies got their start due to my involvement in existing communities, and I think that is the easier place to begin. Already-established communities not only come with their own networks, but are usually easy to join and happy to receive support. Volunteering This was the origin of Doorkeeper. An industry event, Mobile Monday Tokyo, was registering hundreds of people for their events. Checking those people in at the door was always time-consuming, particularly as some names were in English and others in Japanese, giving no good way to sort the list. Seeing this, my cofounders and I proposed building some software to send out QR code tickets. Back in 2008, that was still a relatively novel idea. Mobile Monday was happy for us to do it, so we quickly built a one-off solution for them. We went further than that though—we also personally manned the doors for their events. I remember the first event where we checked in people using the new QR code tickets. It was quite rewarding to be able to tell the participants, “I built this.” That sense of satisfaction wasn’t the only immediate payoff—because we got involved in the event, it also served as marketing for Mobalean, our technical consultancy. We made connections with people in the industry, and when they had projects related to mobile web development, they started coming to us. Later, after we’d solved all of Mobile Monday’s event registration and ticketing needs, we thought other organizations might benefit from our work. We spent months rebuilding the tool to support multiple communities and launched it as Doorkeeper. Initially, though, it struggled to get users. Meanwhile, we continued to volunteer with other communities we were interested in, such as Startup Weekend Japan and RubyKaigi, Japan’s (and possibly the world’s) largest Ruby conference. We didn’t directly ask those communities to use our software, but after we got involved with them, they decided of their own accord to start using Doorkeeper. Because these events made quite an impact on the tech community in Japan, they helped us grow immensely, leading Doorkeeper to become the most popular platform for developer events in Japan. This wasn’t some sort of coldly-calculated strategy. I don’t think it would have worked if it had been. Sure, we knew that if we were running an event platform, it was a good idea to be involved with events, both to make connections and to personally experience our target audience’s problems. But our main motivation was just to help causes we believed in. I think our sincerity helped motivate the organizers to take a chance on a product that was still rather rough around the edges. Business-wise, Doorkeeper was never a runaway success. We struggled for years to monetize it. The turning point was when we announced we’d go from being a freemium service to an exclusively paid one. A lot of organizers stopped using us, but enough continued that I could finally pay myself a decent salary from the product’s revenue alone. What’s more, there was almost no backlash against the move. I think this was because we’d been socially connected to the organizers for the entire history of the company, and they could see that we were being genuine when we said there was no other way forward. I’ve since sold Doorkeeper, but the lessons I learned still stick with me. Speaking at community events Over the years, I’ve delivered numerous presentations on software development and entrepreneurship at different community events. At least for someone like myself, who doesn’t regularly give talks, preparing for them can be quite time-consuming. While I do believe it has helped keep my businesses in the minds of my target audience, I can’t think of a single example where giving a presentation led directly to a new lead. The closest we came to that was after speaking at a Ruby event about a library for handling subscriptions with PayPal. As part of the talk, we mentioned a new side project we were working on, a web app to make Japanese invoices. One of the attendees, a prominent member of the Japanese Ruby community, tweeted about the new service, effectively launching it. That initial buzz and the SEO-friendly domain name (the Japanese word for invoice), helped us become one of the top search results. The project didn’t end up going anywhere as a business, though, and we sold it around a year later. Starting your own independent community In 2010, I created Tokyo Rubyist Meetup, Japan’s first English-language community for Ruby developers. The goal of the group was to bring together the Japanese and international Ruby communities, and I believe we’ve succeeded. I think my efforts in organizing that community may have been why RubyKaigi chose to adopt Doorkeeper for their event registration. It also helped me connect with some of Mobalean’s best consulting clients. Finally—and most importantly—it indirectly led to developing TokyoDev as a business. The CTO of a local startup said something like, “Paul, I’ve been having trouble hiring developers. I know you’re well-connected with the community. Could I pay you to help hire some?” That CTO, along with others in similar situations, became the first clients for TokyoDev’s job board. Sponsoring existing organizations The methods I’ve talked about so far involve a lot of time but no cost. Sponsoring existing organizations is the opposite: all it requires is money. The cost involved depends on the scale of the sponsorship, and the perceived value of the community. When I saw in TokyoDev’s own data that women software engineers were being compensated worse than men, I wanted to do something about it. The simplest solution I came up with was sponsoring local communities that empower women in technology. I sought out some local organizations and offered to sponsor them, including a few that had never had sponsors before. Since then, TokyoDev has also sponsored local tech conferences, including RubyKaigi. These sponsorships have ranged from 100,000 yen (about 665 USD) on the low end to 1.5 million yen (about 10,000 USD) on the high end. In total, TokyoDev has spent over 8 million yen (about 53,000 USD) on sponsorships. Some of the big-ticket sponsorships have come with booths at conferences, which do provide new opportunities, but also additional costs—staffing the booths, airfare, hotels, etc. The more expensive conference sponsorships have directly resulted in several new clients for the job board, but not yet in any additional revenue (because we take a success-based approach, and those clients haven’t made any hires through us yet). I think for sponsorships to be really cost-effective, the target audience of the community must match your startup perfectly. Part of our challenge has been that many of these communities are primarily composed of Japanese software engineers, who aren’t the main users of TokyoDev. Still, while these sponsorships haven’t been a cost-effective way of improving our bottom line, they have helped communities and gotten the word out, as well as offering some other knock-on benefits. One specific example is from 2024, when we gave away one of our sponsor tickets to a job-hunting developer, and they found a position through a connection they made at the conference. Another example is “in-house.” One of our contractors introduced her daughter to a community we’ve sponsored, which helps young women get into software development. This inspired her daughter to become interested in programming and eventually to enroll in the program—something nobody in her family had anticipated! Growing your own communities While TokyoDev got its start thanks to local, preexisting organizations, we’ve also worked hard to create our own TokyoDev community, both online and off. Running an online community One of the first articles I wrote for TokyoDev was in response to a reader’s question about how I got my job as a developer in Japan. Over the years, I continued to receive emails asking for personalized advice. While I was happy to respond to people individually, it felt like that knowledge could also be of use to other people, so I started a forum using Discourse. Over the years I’d get questions on there, and occasionally someone else might chime in with their experience, but it was mostly just me responding to queries, and so wasn’t anything I’d call a “community.” Along the way, one of our contractors pointed out that it would be nice to create a space where we could casually talk to our users. After he brought it up several times, I made a Discord community. This quickly took off, and currently sits at about 7,000 members. Growing such a community hasn’t been without its challenges. The primary difficulty is moderation—no matter how we handle it, some users feel alienated. Have too soft a hand? The loudest voices win, driving away other valuable contributors. Reprimand or ban people? You make enemies out of what were once fans. I can’t say I’ve always done everything right here, but one thing I did do right was bring on a moderator who cares about the community. Besides having someone to bounce ideas around with, it also helps to have an additional person enforcing the rules. We have seen several benefits from our online community. At least one client made a hire through us that I can directly attribute to our Discord. That said, it’s the indirect benefits that have proven most valuable. For instance, our Discord helped us identify common challenges that developers face when relocating to Japan, making it a good source of topics for articles. We’ve also been able to ask members with unique experiences to write articles for the site, and their posts have been some of the most popular, such as one on Japan’s digital nomad visa. Organizing offline events As our Discord community grew, members started asking us to host offline meetups. We held our first one with a dozen or so people at a space we rented out ourselves, and provided soft drinks. This cost us about 30,000 yen (200 USD). The meetup was a success and we continued to host. Eventually, one of our members offered to hold the meetups at their company. This change allowed us to grow the meetups further, and we started regularly maxing out their capacity with 40 or so attendees. It also meant we only needed to pay for the soft drinks, bringing our cost down to 5,000 yen (33 USD). Not only was that quite cost-effective, but the company hosting the event eventually became a client of ours. We also started using our offline meetings to bring our clients together with the larger developer community, by holding collaborative events where the client gives presentations that are technically interesting to our audience. We’re careful to make sure these aren’t direct recruiting events, as I think that would drive away the very people our clients are looking to hire. By indirectly highlighting why it is interesting to work with them, however, our clients have been able to find more prospects. Initially, we catered these events with pizza and soft drinks, which cost around 30,000 yen (200 USD) for a 40 person event. Since we haven’t been charging clients for organizing these talks, we began asking them to provide food and drinks instead. As a result, these events have been win-win for everyone involved. Our clients get better branding amongst the developer community. Our community members enjoy interesting content and new connections. We establish stronger relationships with everyone involved. In addition to this offline community for software engineers, we’ve also started to build another offline community for the internal recruiters using TokyoDev. We began by hosting small dinners with internal recruiters from three or four different clients. This gave them the opportunity to share about the challenges they faced hiring international engineers. Hosting such a dinner cost us about 30,000 yen (200 USD), and led one company that was on the fence to start using TokyoDev. The dinners have proven to be a big success, and recruiters tell us they want to attend more, but there’s only so much time we can spend on them. To augment these networking meals, we’ve also started holding seminars on the topic of hiring engineers, so we can bring together a larger number of our clients at once. These don’t have quite the impact as the small dinners, but they are more scalable. Conclusion Communities have been key to all of my businesses. If my focus had been solely on maximizing revenues, I think the time and money I’ve spent on community involvement could have been better used elsewhere. But the nice thing about being an entrepreneur is that you get to choose your own metrics for success. And unlike with other business strategies, I can always feel good about what we accomplish. Even if an activity doesn’t create value for me personally, it does for someone else, so my efforts are never wasted. If you’re an entrepreneur looking to combine business and the common good, I recommend finding ways to build your company through the community as well. Whether it’s by spending your own time volunteering, contributing part of your business’s revenues to causes you care about, or building up a community around your brand, all these avenues can help both your enterprise and the public at large.
Japan already stipulates that employers must offer the option of reduced working hours to employees with children under three. However, the Child Care and Family Care Leave Act was amended in May 2024, with some of the new provisions coming into effect April 1 or October 1, 2025. The updates to the law address: Remote work Flexible start and end times Reduced hours On-site childcare facilities Compensation for lost salary And more Legal changes are one thing, of course, and social changes are another. Though employers are mandated to offer these options, how many employees in Japan actually avail themselves of these benefits? Does doing so create any stigma or resentment? Recent studies reveal an unsurprising gender disparity in accepting a modified work schedule, but generally positive attitudes toward these accommodations overall. The current reduced work options Reduced work schedules for employees with children under three years old are currently regulated by Article 23(1) of the Child Care and Family Care Leave Act. This Article stipulates that employers are required to offer accommodations to employees with children under three years old. Those accommodations must include the opportunity for a reduced work schedule of six hours a day. However, if the company is prepared to provide alternatives, and if the parent would prefer, this benefit can take other forms—for example, working seven hours a day or working fewer days per week. Eligible employees for the reduced work schedule are those who: Have children under three years old Normally work more than six hours a day Are not employed as day laborers Are not on childcare leave during the period to which the reduced work schedule applies Are not one of the following, which are exempted from the labor-management agreement Employees who have been employed by the company for less than one year Employees whose prescribed working days per week are two days or less Although the law requires employers to provide reduced work schedules only while the child is under three years old, some companies allow their employees with older children to work shorter hours as well. According to a 2020 survey by the Ministry of Health, Labor and Welfare, 15.8% of companies permit their employees to use the system until their children enter primary school, while 5.7% allow it until their children turn nine years old or enter third grade. Around 4% offer reduced hours until children graduate from elementary school, and 15.4% of companies give the option even after children have entered middle school. If, considering the nature or conditions of the work, it is difficult to give a reduced work schedule to employees, the law stipulates other measures such as flexible working hours. This law has now been altered, though, to include other accommodations. Updates to The Child Care and Family Care Leave Act Previously, remote work was not an option for employees with young children. Now, from April 1, 2025, employers must make an effort to allow employees with children under the age of three to work remotely if they choose. From October 1, 2025, employers are also obligated to provide two or more of the following measures to employees with children between the ages of three and the time they enter elementary school. An altered start time without changing the daily working hours, either by using a flex time system or by changing both the start and finish time for the workday The option to work remotely without changing daily working hours, which can be used 10 or more days per month Company-sponsored childcare, by providing childcare facilities or other equivalent benefits (e.g., arranging for babysitters and covering the cost) 10 days of leave per year to support employees’ childcare without changing daily working hours A reduced work schedule, which must include the option of 6-hour days How much it’s used in practice Of course, there’s always a gap between what the law specifies, and what actually happens in practice. How many parents typically make use of these legally-mandated accommodations, and for how long? The numbers A survey conducted by the Ministry of Health, Labor and Welfare in 2020 studied uptake of the reduced work schedule among employees with children under three years old. In this category, 40.8% of female permanent employees (正社員, seishain) and 21.6% of women who were not permanent employees answered that they use, or had used, the reduced work schedule. Only 12.3% of male permanent employees said the same. The same survey was conducted in 2022, and researchers found that the gap between female and male employees had actually widened. According to this second survey, 51.2% of female permanent employees and 24.3% of female non-permanent employees had reduced their hours, compared to only 7.6% of male permanent employees. Not only were fewer male employees using reduced work programs, but 41.2% of them said they did not intend to make use of them. By contrast, a mere 15.6% of female permanent employees answered they didn’t wish to claim the benefit. Of those employees who prefer the shorter schedule, how long do they typically use the benefit? The following charts, using data from the 2022 survey, show at what point those employees stop reducing their hours and return to a full-time schedule. Female permanent employees Female non-permanent employees Male permanent employees Male non-permanent employees Until youngest child turns 1 13.7% 17.9% 50.0% 25.9% Until youngest child turns 2 11.5% 7.9% 14.5% 29.6% Until youngest child turns 3 23.0% 16.3% 10.5% 11.1% Until youngest child enters primary school 18.9% 10.5% 6.6% 11.1% Sometime after the youngest child enters primary school 22.8% 16.9% 6.5% 11.1% Not sure 10% 30.5% 11.8% 11.1% From the companies’ perspectives, according to a survey conducted by the Cabinet Office in 2023, 65.9% of employers answered that their reduced work schedule system is fully used by their employees. What’s the public perception? Some fear that the number of people using the reduced work program—and, especially, the number of women—has created an impression of unfairness for those employees who work full-time. This is a natural concern, but statistics paint a different picture. In a survey of 300 people conducted in 2024, 49% actually expressed a favorable opinion of people who work shorter hours. Also, 38% had “no opinion” toward colleagues with reduced work schedules, indicating that 87% total don’t negatively view those parents who work shorter hours. While attitudes may vary from company to company, the public overall doesn’t seem to attach any stigma to parents who reduce their work schedules. Is this “the Mommy Track”? Others are concerned that working shorter hours will detour their career path. According to this report by the Ministry of Health, Labour and Welfare, 47.6% of male permanent employees indicated that, as the result of working fewer hours, they had been changed to a position with less responsibility. The same thing happened to 65.6% of male non-permanent employees, and 22.7% of female permanent employees. Therefore, it’s possible that using the reduced work schedule can affect one’s immediate chances for advancement. However, while 25% of male permanent employees and 15.5% of female permanent employees said the quality and importance of the work they were assigned had gone down, 21.4% of male and 18.1% of female permanent employees said the quality had gone up. Considering 53.6% of male and 66.4% of female permanent employees said it stayed the same, there seems to be no strong correlation between reducing one’s working hours, and being given less interesting or important tasks. Reduced work means reduced salary These reduced work schedules usually entail dropping below the originally-contracted work hours, which means the employer does not have to pay the employee for the time they did not work. For example, consider a person who normally works 8 hours a day reducing their work time to 6 hours a day (a 25% reduction). If their monthly salary is 300,000 yen, it would also decrease accordingly by 25% to 225,000 yen. Previously, both men and women have avoided reduced work schedules, because they do not want to lose income. As more mothers than fathers choose to work shorter hours, this financial burden tends to fall more heavily on women. To address this issue, childcare short-time employment benefits (育児時短就業給付) will start from April 2025. These benefits cover both male and female employees who work shorter hours to care for a child under two years old, and pay a stipend equivalent to 10% of their adjusted monthly salary during the reduced work schedule. Returning to the previous example, this stipend would grant 10% of the reduced salary, or 22,500 yen per month, bringing the total monthly paycheck to 247,500 yen, or 82.5% of the normal salary. This additional stipend, while helpful, may not be enough to persuade some families to accept shorter hours. The childcare short-time employment benefits are available to employees who meet the following criteria: The person is insured, and is working shorter hours to care for a child under two years old. The person started a reduced work schedule immediately after using the childcare leave covered by childcare leave benefits, or the person has been insured for 12 months in the two years prior to the reduced work schedule. Conclusion Japan’s newly-mandated options for reduced schedules, remote work, financial benefits, and other childcare accommodations could help many families in Japan. However, these programs will only prove beneficial if enough employees take advantage of them. As of now, there’s some concern that parents who accept shorter schedules could look bad or end up damaging their careers in the long run. Statistically speaking, some of the news is good: most people view parents who reduce their hours either positively or neutrally, not negatively. But other surveys indicate that a reduction in work hours often equates to a reduction in responsibility, which could indeed have long-term effects. That’s why it’s important for more parents to use these accommodations freely. Not only will doing so directly benefit the children, but it will also lessen any negative stigma associated with claiming them. This is particularly true for fathers, who can help even the playing field for their female colleagues by using these perks just as much as the mothers in their offices. And since the state is now offering a stipend to help compensate for lost income, there’s less and less reason not to take full advantage of these programs.
It’s a fact that Japan needs more international developers. That doesn’t mean integrating those developers into Japanese companies, as well as Japanese society, is a simple process. But what are the most common challenges encountered by these companies with multinational teams? To find out, TokyoDev interviewed a number of Japanese companies with international employees. In addition to discussing the benefits of hiring overseas, we also wanted to learn more about what challenges they had faced, and how they had overcome them. The companies interviewed included: Autify, which provides an AI-based software test automation platform Beatrust, which has created a search platform that automatically structures profile information Cybozu, Japan’s leading groupware provider DeepX, which automates heavy equipment machinery Givery, which scouts, hires, and trains world-class engineers Shippio, which digitalizes international trading and is Japan’s first digital forwarding company Yaraku, which offers web-based translation management According to those companies, the issues they experienced fell into two categories: addressing the language barrier, and helping new hires come to Japan. The language barrier Language issues are by far the most universal problem faced by Japanese companies with multinational teams. As a result, all of the companies we spoke to have evolved their own unique solutions. AI translation To help improve English-Japanese communication, Yaraku has turned to AI and its own translation tool, YarakuZen. With these they’ve reduced comprehension issues down to verbal communication alone. Since their engineering teams primarily communicate via text anyway, this has solved the majority of their language barrier issue, and engineers feel that they can now work smoothly together. Calling on bilinguals While DeepX employs engineers from over 20 countries, English is the common language between them. Documentation is written in English, and even Japanese departments still write minutes in English so colleagues can check them later. Likewise, explanations of company-wide meetings are delivered in both Japanese and English. Still, a communication gap exists. To overcome it, DeepX assigns Japanese project managers who can also speak English well. English skills weren’t previously a requirement, but once English became the official language of the engineering team, bilingualism was an essential part of the role. These project managers are responsible for taking requests from clients and communicating them accurately to the English-only engineers. In addition, DeepX is producing more bilingual employees by offering online training in both Japanese and English. The online lessons have proven particularly popular with international employees who have just arrived in Japan. Beatrust has pursued a similar policy of encouraging employees to learn and speak both languages. Dr. Andreas Dippon, the Vice President of Engineering at Beatrust, feels that bilingual colleagues are absolutely necessary to business. I think the biggest mistake you can make is just hiring foreigners who speak only English and assuming all the communication inside engineering is just English and that’s fine. You need to understand that business communication with [those] engineers will be immensely difficult . . . You need some almost bilingual people in between the business side and the engineering side to make it work. Similar to DeepX, Beatrust offers its employees a stipend for language learning. “So nowadays, it’s almost like 80 percent of both sides can speak English and Japanese to some extent, and then there are like two or three people on each side who cannot speak the other language,” Dippon said. “So we have like two or three engineers who cannot speak Japanese at all, and we have two or three business members who cannot speak English at all.” But in the engineering team itself “is 100 percent English. And the business team is almost 100 percent Japanese.” “ Of course the leaders try to bridge the gap,” Dippon explained. “So I’m now joining the business meetings that are in Japanese and trying to follow up on that and then share the information with the engineering team, and [it’s] also the same for the business lead, who is joining some engineering meetings and trying to update the business team on what’s happening inside engineering.” “Mixed language” Shippio, on the other hand, encountered negative results when they leaned too hard on their bilingual employees. Initially they asked bilinguals to provide simultaneous interpretation at meetings, but quickly decided that the burden on them was too great and not sustainable in the long term. Instead, Shippio has adopted a policy of “mixed language,” or combining Japanese and English together. The goal of mixed language is simple: to “understand each other.” Many employees who speak one language also know a bit of the other, and Shippio has found that by fostering a culture of flexible communication, employees can overcome the language barrier themselves. For example, a Japanese engineer might forget an English word, in which case he’ll do his best to explain the meaning in Japanese. If the international engineer can understand a bit of Japanese, he’ll be able to figure out what his coworker intended to say, at which point they will switch back to English. This method, while idiosyncratic to every conversation, strikes a balance between the stress of speaking another language and consideration for the other person. The most important thing, according to Shippio, is that the message is conveyed in any language. Meeting more often Another method these companies use is creating structured meeting schedules designed to improve cross-team communication. Givery teams hold what they call “win sessions” and “sync-up meetings” once or twice a month, to ensure thorough information-sharing within and between departments. These two types of meetings have different goals: A “win session” reviews business or project successes, with the aim of analyzing and then repeating that success in future. A “sync-up meeting” helps teams coordinate project deadlines. They report on their progress, discuss any obstacles that have arisen, and plan future tasks. In these meetings employees often speak Japanese, but the meetings are translated into English, and sometimes supplemented with additional English messages and explanations. By building these sort of regular, focused meetings into the company’s schedule, Givery aims to overcome language difficulties with extra personal contact. Beatrust takes a similarly structured, if somewhat more casual, approach. They tend to schedule most meetings on Friday, when engineers are likely to come to the office. However, in addition to the regular meetings, they also hold the “no meeting hour” for everyone, including the business team. “One of the reasons is to just let people talk to each other,” Dippon explained. “Let the engineers talk to business people and to each other.” This kind of interaction, we don’t really care if it’s personal stuff or work stuff that they talk about. Just to be there, talking to each other, and getting this feeling of a team [is what’s important]. . . . This is hugely beneficial, I think. Building Bonds Beatrust also believes in building team relationships through regular off-site events. “Last time we went to Takaosan, the mountain area,” said Dippon. “It was nice, we did udon-making. . . . This was kind of a workshop for QRs, and this was really fun, because even the Japanese people had never done it before by themselves. So it was a really great experience. After we did that, we had a half-day workshop about team culture, company culture, our next goals, and so on.” Dippon in particular appreciates any chance to learn more about his fellow employees. Like, ‘Why did you leave your country? Why did you come to Japan? What are the problems in your country? What’s good in your country?’ You hear a lot of very different stories. DeepX also hopes to deepen the bonds between employees with different cultures and backgrounds via family parties, barbecues, and other fun, relaxing events. This policy intensified after the COVID-19 pandemic, during which Japan’s borders were closed and international engineers weren’t able to immigrate. When the borders opened and those engineers finally did arrive, DeepX organized in-house get-togethers every two weeks, to fortify the newcomers’ relationships with other members of the company. Sponsoring visas Not every company that hires international developers actually brings them to Japan—-quite a few prefer to hire foreign employees who are already in-country. However, for those willing to sponsor new work visas, there is universal consensus on how best to do it: hire a professional. Cybozu has gone to the extent of bringing those professionals in-house. The first international member they hired was an engineer living in the United States. Though he wanted to work in Japan, at that time they didn’t have any experience in acquiring a work visa or relocating an employee, so they asked him to work for their US subsidiary instead. But as they continued hiring internationally, Cybozu realized that quite a few engineers were interested in physically relocating to Japan. To facilitate this, the company set up a new support system for their multinational team, for the purpose of providing their employees with work visas. Other companies prefer to outsource the visa process. DeepX, for example, has hired a certified administrative scrivener corporation to handle visa applications on behalf of the company. Autify also goes to a “dedicated, specialized” lawyer for immigration procedures. Thomas Santonja, VP of Engineering at Autify, feels that sponsoring visas is a necessary cost of business and that the advantages far outweigh the price. We used to have fully remote, long-term employees outside of Japan, but we stopped after we noticed that there is a lot of value in being able to meet in person and join in increased collaboration, especially with Japanese-speaking employees that are less inclined to make an effort when they don’t know the people individually. “It’s kind of become a requirement, in the last two years,” he concluded, “to at least be capable of being physically here.” However, Autify does prevent unnecessary expenses by having a new employee work remotely from their home country for a one month trial period before starting the visa process in earnest. So far, the only serious issues they encountered were with an employee based in Egypt; the visa process became so complicated, Autify eventually had to give up. But Autify also employs engineers from France, the Philippines, and Canada, among other countries, and has successfully brought their workers over many times. Helping employees adjust Sponsoring a visa is only the beginning of bringing an employee to Japan. The next step is providing special support for international employees, although this can look quite different from company to company. DeepX points out that just working at a new company is difficult enough; also beginning a new life in a new country, particularly when one doesn’t speak the language, can be incredibly challenging. That’s why DeepX not only covers the cost of international flights, but also implemented other support systems for new arrivals. To help them get started in Japan, DeepX provides a hired car to transport them from the airport, and a furnished monthly apartment for one month. Then they offer four days of special paid leave to complete necessary procedures: opening a bank account, signing a mobile phone contract, finding housing, etc. The company also introduces real estate companies that specialize in helping foreigners find housing, since that can sometimes be a difficult process on its own. Dippon at Beatrust believes that international employees need ongoing support, not just at the point of entry, and that it’s best to have at least one person in-house who is prepared to assist them. I think that one trap many companies run into is that they know all about Japanese laws and taxes and so on, and everybody grew up with that, so they are all familiar. But suddenly you have foreigners who have basically no idea about the systems, and they need a lot of support, because it can be quite different. Santonja at Autify, by contrast, has had a different experience helping employees get settled. “I am extremely tempted to say that I don’t have any challenges. I would be extremely hard pressed to tell you anything that could be remotely considered difficult or, you know, require some organization or even extra work or thinking.” Most people we hire look for us, right? So they are looking for an opportunity to move to Japan and be supported with a visa, which is again a very rare occurrence. They tend to be extremely motivated to live and make it work here. So I don’t think that integration in Japan is such a challenge. Conclusion To companies unfamiliar with the process, the barriers to hiring internationally may seem high. However, there are typically only two major challenges when integrating developers from other countries. The first, language issues, has a variety of solutions ranging from the technical to the cultural. The second, attaining the correct work visa, is best handled by trained professionals, whether in-house or through contractors. Neither of these difficulties is insurmountable, particularly with expert assistance. In addition, Givery in particular has stressed that it’s not necessary to figure out all the details in advance of hiring: in fact, it can benefit a company to introduce international workers early on, before its own internal policies are overly fixed. This information should also benefit international developers hoping to work in Japan. Since this article reflects the top concerns of Japanese companies, developers can work to proactively relieve those worries. Learning even basic Japanese helps reduce the language barrier, while becoming preemptively familiar with Japanese society reassures employers that you’re capable of taking care of yourself here. If you’d like to learn more about the benefits these companies enjoy from hiring international developers, see part one of this article series here. Want to find a job in Japan? Check out the TokyoDev job board. If you want to know more about multinational teams, moving to Japan, or Japanese work life in general, see our extensive library of articles. If you’d like to continue the conversation, please join the TokyoDev Discord.
TokyoDev has already reported that Japan really needs international developers. But the more Japanese companies we’ve interviewed, the more we’ve realized that a talent shortage is not the only reason for Japanese companies to hire from overseas. There are a host of other advantages to recruiting internationally, and a growing number of managers are beginning to recognize the benefits. To gain more perspective on how multinational teams enhance their Japanese companies, we conducted interviews with the following businesses: Autify, which provides an AI-based software test automation platform Beatrust, which provides solutions to help companies maximize their human capital Cybozu, Japan’s leading groupware provider DeepX, which automates heavy equipment machinery Givery, which scouts, hires, and trains world-class engineers KOMOJU by Degica, a payment processor MODE, which pioneers innovative solutions to connect the digital and physical worlds Yaraku, which offers web-based translation management Below we’ve compiled the top reasons they gave for hiring international developers, and the specific ways in which those developers have improved their businesses. These range from the obvious—a greater talent pool to draw from—to surprising and even counterintuitive upsides, such as improved domestic recruiting and sheer enjoyment. The global talent pool Because Japan is suffering a developer shortage, and particularly lacks specialized and senior engineers, Japanese companies are expanding their recruiting efforts worldwide to find the staff and skill sets they need. That was DeepX’s initial motive for hiring international engineers: they needed employees with advanced technical skills. At first, when the company was founded in 2016, DeepX only intended to hire Japanese engineers. However, robotics is a fairly rare specialty in Japan, and those engineers who have studied it were reluctant to work at a newly-formed startup. Consequently, in 2018, DeepX hired their first international engineer; now they employ engineers from 20 different countries. Givery ran into the same issue. Though founded in 2009, the company spent five years trying to find enough staff to develop its B2C programming learning service, but struggled to attract talent because the company wasn’t yet well-known in Japan. In 2014 they received an application from a recruitment service, for an international front-end engineer who didn’t speak much Japanese. Since management was already discussing how best to globalize, they decided to seize this opportunity, despite the fact that many managers did not speak English. Seven years later, half of Givery’s development team of 120 are non-Japanese and hail from 20 different countries. The immediate benefits of widening the applicant pool speak for themselves. However Makoto Mizukami, head of Customer Engineering at KOMOJU by Degica, thinks recruiting internationally isn’t just a solution for today: it’s future-proofing. Because Japan is facing a declining and aging population, Mizukami believes that companies will face increased long-term risks if they insist on only hiring Japanese employees. In order for companies to survive, they must expand the range of people they employ. According to Mizukami, this applies to more than international engineers: companies must create an environment that can accept a highly diverse range of workers, including immigrants, women, people with disabilities, and the elderly. As will be seen later in this article, hiring international workers often has the side effect of creating a more favorable work environment for all. Recruiting at home But hiring international workers has a surprising secondary benefit: it improves domestic recruitment as well. KOMOJU found this out firsthand when they hired Shogo Ito as Staff SRE, since his primary motivation for joining KOMOJU was to improve his English. In Ito’s previous job, while he’d had the opportunity to collaborate with overseas teams, he hadn’t felt immersed in an English environment. But since at KOMOJU English is the primary form of communication, Ito felt confident he’d have a chance there to improve his skills. Givery has also benefited from this trend. It was their initial struggle to find engineers locally that led them to recruit internationally. As their multinational development team grew, though, they discovered that their diversity attracted more Japanese talent as well. As a result, Givery is one of the few tech companies in Japan to meet its recruitment goals on a regular basis. International knowledge Companies that hire internationally usually discover that their new employees bring more to the table than expected. It’s not just a question of tech skills—they carry with them fresh information that broadens companies’ knowledge bases overall. In the case of Beatrust, information from international employees contributes directly to their product. “We have a talent collaboration platform,” explained Dr. Andreas Dippon, the Vice President of Engineering at Beatrust. “The focus is [helping] employees better work with each other. Currently we’re focused on selling this product to big clients in Japan, which all already have some diversification. “Of course in Japan it’s mainly Japanese people, but you also have international engineers joining the big companies as well. So how can we support them collaborating in their company where there’s a language barrier, where there are cultural differences?” Having engineers of different backgrounds, especially with our product, helps us better understand how users think. KOMOJU also credits their global team with improving their product. As every country has unique payment methods and financial rules, the “insider knowledge” of employees from that country has proven invaluable. KOMOJU specifically cited China, which uses a number of payment methods such as Alipay and WeChat Pay that are unfamiliar in Japan; according to them, Chinese employees have been extremely helpful in explaining those systems to the rest of the team. Mizukami gave another example of international knowledge proving helpful. A user who had a free Chinese email address was flagged by the fraud detection system. At that time, Mizukami said, a Chinese engineer told them that “People who use this address cannot be trusted, so it’s okay to ignore it.” With that engineer’s assistance, the team was able to respond to the situation appropriately. Other tech companies we spoke to cited the benefits of international knowledge more generally, but Cybozu in particular knows the value of global perspectives. An earlier attempt to take their product, Cybozu Office, to the US via a subsidiary failed—in part, executives decided, due to differences in business customs between the US and Japan. That was why, in 2022, Cybozu approached international expansion differently. This time they created the New Business Division, an English-first multinational development team specifically designed to help Cybozu adapt existing products to the global market. In addition, the team has been tasked with building new products from the ground up, with an international audience in mind. Staying abreast of new tech Another plus to hiring international engineers, and particularly those who speak English, is earlier access to new tools and technology. Ito at KOMOJU pointed out that information on new services and tools is usually spread through English online media, and that most Japanese engineers don’t keep up with English articles on the subject. This means that, until someone writes an “I tried it” style post in Japanese, information on the latest developments isn’t readily available to Japanese developers. Having international engineers on the team, who are accustomed to scanning the English-language web for new tools and methods, accelerates the process. In addition, since KOMOJU’s official company language is English, there’s no concern about finding software with a Japanese UI, which greatly expands their options. Ito explained that KOMOJU uses services that are not very familiar in Japan, such as JumpCloud, Tenable, Vanta, and Honeybadger. Takuma Tatsumi, a recruiter for Yaraku, confirmed that the latest technology is overwhelmingly in English, leading to asymmetry of information. Even at previous companies, Japanese CTOs would ask the international engineers, “What are the current technology trends?” But since Yaraku has hired a number of international members, they’re now able to keep up with the latest development trends and incorporate new technology when it is, in fact, new. Changes in work environment Most Japanese companies with multinational teams end up making substantial culture changes to accommodate international employees. This could be considered a downside; instead, those we spoke to agree that the evolution of their company’s work environment was one of the top benefits of international recruitment. “The advantage I can see is with a mix of mindsets and [thoughts on the] future of work from so many different places,” said Thomas Santonja, VP of Engineering at Autify. I found a lot of very, very rich discussions about what to do, what not to do, and why, and a lot of debate, which is at least in my experience rarer in a pure Japanese environment. “Canadian and American staff are the ones that are the most vocal about why and how to do stuff, and [they] try to engage to get other people’s opinions,” he added. “That actually created a culture which is not necessarily super common. . . . I believe injecting a North American mindset in the mix is very valuable for a Japanese company, from my side of the fence.” Scott Tullis, head of Global Recruiting at MODE, also endorsed a mix of non-Japanese and Japanese work styles. “We’re a unique hybrid,” he said. Thanks to our Bay Area origins, we have the Silicon Valley tech startup culture in terms of entrepreneurship and innovation, and we also incorporate some of the great aspects of Japanese work culture around teamwork and collaboration. “We’re fortunate to not have any of the more notorious elements of Silicon Valley startup culture here,” he added. “The term ‘bro culture’ comes to mind and is well known in the Bay Area, which we thankfully do not have at MODE. Rather, we foster a more collaborative, thoughtful, and humble culture where people are truly trusted.” While the Japanese side of the company has inspired an atmosphere of humility and cooperation, the American side has contributed a fully remote work policy which, as Tullis pointed out, “is a relatively newer concept in Japan.” “We have offices in San Mateo and Tokyo, as it’s still important to have face-to-face interactions to collaborate effectively and continuously build our culture,” he said. “At the same time, the option to work remotely makes our work environment very flexible, which is beneficial for many team members, especially working parents. Our team comes from a diverse range of backgrounds, so this flexibility is key to better meeting the needs of each individual.” When it comes to work policy, Dippon at Beatrust has leaned on his European background. “ So I come from Germany, with German work culture,” he said, “which is like, we take care to take holidays and take time off and don’t do immense overwork and so on. So I try to bring that culture into my team, which is often difficult, because especially [people from] Japan, China, Taiwan, and so on—they used to work lots of overtime all the time.” So when I told them, ‘Please take the day off,’ and they said, ‘Okay, I’ll take the day off, but I can work in the morning and evening,’ I told them, ‘No, take the day off, don’t come in.’ They were confused at first, but over time I think they adapted to some extent, and now they really enjoy it, and when they come back they come back fully-refreshed and eager. That being said, Dippon takes great care not to impose his own European work paradigms too much. In fact, he finds the cultural differences amongst his team members both fascinating and useful. “Every day is very interesting,” he said. “You learn a lot about their countries, about their work style, and you can benefit from their experience in their work style as well.” Like Santonja, Dippon has noted how international hires lead to a more open style of communication. “The culture benefit is huge . . . when you can foster open communication in your engineering team, which we have achieved now. . . . So everybody can clearly state their opinion and not hold back,” Dippon said. “Which is very different from Japanese culture, from what I’ve heard,” Dippon added. “Even the Japanese people we have, they like that, so they can clearly say their opinion without having to fear any rejection.” All three of the executives quoted above are, notably, international hires themselves. But many Japanese managers also cite the benefits of adapting their company’s work environment. In fact, Tatsumi of Yaraku compared the company’s international members to the introduction of Western culture into Japan at the end of the Edo period, which led to profound cultural changes. Makiko Nakayama, Yaraku’s Human Resources manager, agreed with this. Foreign members are very frank about the issues they face, which is why we’ve created an environment that’s easy for them to work in. Those changes include a new approach to employee communication and collaboration. When work output is low or the team runs into difficulties, rather than immediately thinking, “Maybe someone is slacking off,” Yaraku employees tend to ask, “Why is it like this?” and “How can we improve it?” They said that the chance to actively communicate and think of ways to improve together creates a cooperative corporate culture, which has become one of the biggest attractions of working at Yaraku. International hires also led to new policies around paid leave. As Nakayama explained, employees from overseas told HR, “It takes four days to go home and back, so even if I use my paid leave, I really don’t have much time to rest.” As a result, Yaraku now allows employees to work remotely overseas for 30 days a year. Likewise, DeepX reported that its foreign engineers enjoy their new holiday substitute leave system. This system allows engineers to take a lump sum of vacation any time they like, by treating normal Japanese holidays as working days, and granting the same number of paid holidays. In this way, engineers can take longer vacations when returning to their home countries. But according to Satomi Makino, the system isn’t just used by international hires—many Japanese engineers are happy to take advantage of it as well. I feel DeepX is a comfortable working environment that incorporates the good points of overseas companies. In our interview with Givery, they offered some specific recommendations to other Japanese companies looking to build multinational teams. They suggested starting hiring early in the formation of the company, before internal policies had been well-established. Their newly-hired international employees, Givery’s management found, had different needs and expectations from their Japanese workers. For example, international engineers made requests like, “Can I go to the gym for two hours during lunch?” or “I want to go back to my home country in December. Can I take a month off?” Because Givery didn’t have too many procedures in place, it was able to consider suggestions like these and implement more flexible, globalized workplace practices. If Givery had waited to build its multinational development team until its policies were more firmly established, it may have struggled more to adapt to the needs of its international employees. It’s fun It may seem like an odd consideration, but multiple interviewees cited an interesting reason for hiring international employees—it’s fun! Yaraku’s engineering team was born out of CEO Suguru Sakanishi’s question to himself: What would happen if I created a global engineering team in my own company? Before founding Yaraku, Sakanishi had previously been to the US and worked in an international environment. This experience made him realize how fun it is to work with people from various backgrounds, and inspired him to hire people from abroad. KOMOJU shared a story about a newly-hired Indonesian member’s introduction to Japan. In Indonesia he had a 10 megabit Internet line for 6,000 yen a month; then he learned that in Japan, he could get a 10 gigabit line for the same price. The new hire was so surprised he exclaimed, ‘What’s going on?!’ The whole team enjoyed hearing that and sharing in his excitement. Members at KOMOJU believe that seeing and appreciating cultural differences, especially through casual conversations like this, is one of the unique attractions of multinational teams. Dippon, at Beatrust, describes this kind of cultural sharing as “one of the biggest pluses for me.” It’s so interesting, sitting together after work and talking about, ‘Oh, what’s going on in your country?’ . . . You get this kind of information in the news and so on, but you almost never hear from a person from that country. Conclusion For developers interested in working at Japanese companies, these interviews should offer insight into why Japanese managers are also interested in hiring them. Most businesses like these are looking for candidates who can bring more to the table than their work skills alone. They’re searching for applicants who can contribute the international knowledge and English proficiency that their teams need to level up. These companies also don’t necessarily expect candidates to conform to Japanese business norms. In fact, employees who forthrightly (but politely) explain their needs and expectations can benefit all the workers at the company, not just those from overseas. That being said, developers should be prepared to meet these companies halfway, mostly by being genuinely interested in Japan. It isn’t just a question of being willing to adapt to a new country: these managers appreciate the fun and interest of employing someone from another culture, so they’re keen to share their own as well. As Yaraku put it, they place importance on whether or not the candidate is specifically interested in this country, because that’s one of the greatest values that Yaraku can offer: “enjoying Japan.” To learn more about how you can work in (and enjoy) Japan, check out our job board or extensive library of articles. To continue the conversation, join the TokyoDev Discord.
More in programming
Brace yourself, because I’m about to utter a sequence of words I never thought I would hear myself say: I really miss posting on Twitter. I really, really miss it. It’s funny, because Twitter was never not a trash fire. There was never a time when it felt like we were living through some kind […]
Many hypergrowth companies of the 2010s battled increasing complexity in their codebase by decomposing their monoliths. Stripe was somewhat of an exception, largely delaying decomposition until it had grown beyond three thousand engineers and had accumulated a decade of development in its core Ruby monolith. Even now, significant portions of their product are maintained in the monolithic repository, and it’s safe to say this was only possible because of Sorbet’s impact. Sorbet is a custom static type checker for Ruby that was initially designed and implemented by Stripe engineers on their Product Infrastructure team. Stripe’s Product Infrastructure had similar goals to other companies’ Developer Experience or Developer Productivity teams, but it focused on improving productivity through changes in the internal architecture of the codebase itself, rather than relying solely on external tooling or processes. This strategy explains why Stripe chose to delay decomposition for so long, and how the Product Infrastructure team invested in developer productivity to deal with the challenges of a large Ruby codebase managed by a large software engineering team with low average tenure caused by rapid hiring. Before wrapping this introduction, I want to explicitly acknowledge that this strategy was spearheaded by Stripe’s Product Infrastructure team, not by me. Although I ultimately became responsible for that team, I can’t take credit for this strategy’s thinking. Rather, I was initially skeptical, preferring an incremental migration to an existing strongly-typed programming language, either Java for library coverage or Golang for Stripe’s existing familiarity. Despite my initial doubts, the Sorbet project eventually won me over with its indisputable results. This is an exploratory, draft chapter for a book on engineering strategy that I’m brainstorming in #eng-strategy-book. As such, some of the links go to other draft chapters, both published drafts and very early, unpublished drafts. Reading this document To apply this strategy, start at the top with Policy. To understand the thinking behind this strategy, read sections in reverse order, starting with Explore. More detail on this structure in Making a readable Engineering Strategy document. Policy & Operation The Product Infrastructure team is investing in Stripe’s developer experience by: Every six months, Product Infrastructure will select its three highest priority areas to focus, and invest a significant majority of its energy into those. We will provide minimal support for other areas. We commit to refreshing our priorities every half after running the developer productivity survey. We will further share our results, and priorities, in each Quarterly Business Review. Our three highest priority areas for this half are: Add static typing to the highest value portions of our Ruby codebase, such that we can run the type checker locally and on the test machines to identify errors more quickly. Support selective test execution such that engineers can quickly determine and run the most appropriate tests on their machine rather than delaying until tests run on the build server. Instrument test failures such that we have better data to prioritize future efforts. Static typing is not a typical solution to developer productivity, so it requires some explanation when we say this is our highest priority area for investment. Doubly so when we acknowledge that it will take us 12-24 months of much of the team’s time to get our type checker to an effective place. Our type checker, which we plan to name Sorbet, will allow us to continue developing within our existing Ruby codebase. It will further allow our product engineers to remain focused on developing new functionality rather than migrating existing functionality to new services or programming languages. Instead, our Product Infrastructure team will centrally absorb both the development of the type checker and the initial rollout to our codebase. It’s possible for Product Infrastructure to take on both, despite its fixed size. We’ll rely on a hybrid approach of deep-dives to add typing to particularly complex areas, and scripts to rewrite our code’s Abstract Syntax Trees (AST) for less complex portions. In the relatively unlikely event that this approach fails, the cost to Stripe is of a small, known size: approximately six months of half the Product Infrastructure team, which is what we anticipate requiring to determine if this approach is viable. Based on our knowledge of Facebook’s Hack project, we believe we can build a static type checker that runs locally and significantly faster than our test suite. It’s hard to make a precise guess now, but we think less than 30 seconds to type our entire codebase, despite it being quite large. This will allow for a highly productive local development experience, even if we are not able to speed up local testing. Even if we do speed up local testing, typing would help us eliminate one of the categories of errors that testing has been unable to eliminate, which is passing of unexpected types across code paths which have been tested for expected scenarios but not for entirely unexpected scenarios. Once the type checker has been validated, we can incrementally prioritize adding typing to the highest value places across the codebase. We do not need to wholly type our codebase before we can start getting meaningful value. In support of these static typing efforts, we will advocate for product engineers at Stripe to begin development using the Command Query Responsibility Segregation (CQRS) design pattern, which we believe will provide high-leverage interfaces for incrementally introducing static typing into our codebase. Selective test execution will allow developers to quickly run appropriate tests locally. This will allow engineers to stay in a tight local development loop, speeding up development of high quality code. Given that our codebase is not currently statically typed, inferring which tests to run is rather challenging. With our very high test coverage, and the fact that all tests will still be run before deployment to the production environment, we believe that we can rely on statistically inferring which tests are likely to fail when a given file is modified. Instrumenting test failures is our third, and lowest priority, project for this half. Our focus this half is purely on annotating errors for which we have high conviction about their source, whether infrastructure or test issues. For escalations and issues, reach out in the #product-infra channel. Diagnose In 2017, Stripe is a company of about 1,000 people, including 400 software engineers. We aim to grow our organization by about 70% year-over-year to meet increasing demand for a broader product portfolio and to scale our existing products and infrastructure to accommodate user growth. As our production stability has improved over the past several years, we have now turned our focus towards improving developer productivity. Our current diagnosis of our developer productivity is: We primarily fund developer productivity for our Ruby-authoring software engineers via our Product Infrastructure team. The Ruby-focused portion of that team has about ten engineers on it today, and is unlikely to significantly grow in the future. (If we do expand, we are likely to staff non-Ruby ecosystems like Scala or Golang.) We have two primary mechanisms for understanding our engineer’s developer experience. The first is standard productivity metrics around deploy time, deploy stability, test coverage, test time, test flakiness, and so on. The second is a twice annual developer productivity survey. Looking at our productivity metrics, our test coverage remains extremely high, with coverage above 99% of lines, and tests are quite slow to run locally. They run quickly in our infrastructure because they are multiplexed across a large fleet of test runners. Tests have become slow enough to run locally that an increasing number of developers run an overly narrow subset of tests, or entirely skip running tests until after pushing their changes. They instead rely on our test servers to run against their pull request’s branch, which works well enough, but significantly slows down developer iteration time because the merge, build, and test cycle takes twenty to thirty minutes to complete. By the time their build-test cycle completes, they’ve lost their focus and maybe take several hours to return to addressing the results. There is significant disagreement about whether tests are becoming flakier due to test infrastructure issues, or due to quality issues of the tests themselves. At this point, there is no trustworthy dataset that allows us to attribute between those two causes. Feedback from the twice annual developer productivity survey supports the above diagnosis, and adds some additional nuance. Most concerning, although long-tenured Stripe engineers find themselves highly productive in our codebase, we increasingly hear in the survey that newly hired engineers with long tenures at other companies find themselves unproductive in our codebase. Specifically, they find it very difficult to determine how to safely make changes in our codebase. Our product codebase is entirely implemented in a single Ruby monolith. There is one narrow exception, a Golang service handling payment tokenization, which we consider out of scope for two reasons. First, it is kept intentionally narrow in order to absorb our SOC1 compliance obligations. Second, developers in that environment have not raised concerns about their productivity. Our data infrastructure is implemented in Scala. While these developers have concerns–primarily slow build times–they manage their build and deployment infrastructure independently, and the group remains relatively small. Ruby is not a highly performant programming language, but we’ve found it sufficiently efficient for our needs. Similarly, other languages are more cost-efficient from a compute resources perspective, but a significant majority of our spend is on real-time storage and batch computation. For these reasons alone, we would not consider replacing Ruby as our core programming language. Our Product Infrastructure team is about ten engineers, supporting about 250 product engineers. We anticipate this group growing modestly over time, but certainly sublinearly to the overall growth of product engineers. Developers working in Golang and Scala routinely ask for more centralized support, but it’s challenging to prioritize those requests as we’re forced to consider the return on improving the experience for 240 product engineers working in Ruby vs 10 in Golang or 40 data engineers in Scala. If we introduced more programming languages, this prioritization problem would become increasingly difficult, and we are already failing to support additional languages.
The new AMD HX370 option in the Framework 13 is a good step forward in performance for developers. It runs our HEY test suite in 2m7s, compared to 2m43s for the 7840U (and 2m49s for a M4 Pro!). It's also about 20% faster in most single-core tasks than the 7840U. But is that enough to warrant the jump in price? AMD's latest, best chips have suddenly gotten pretty expensive. The F13 w/ HX370 now costs $1,992 with 32GB RAM / 1TB. Almost the same an M4 Pro MBP14 w/ 24GB / 1TB ($2,199). I'd pick the Framework any day for its better keyboard, 3:2 matte screen, repairability, and superb Linux compatibility, but it won't be because the top option is "cheaper" any more. Of course you could also just go with the budget 6-core Ryzen AI 5 340 in same spec for $1,362. I'm sure that's a great machine too. But maybe the sweet spot is actually the Ryzen AI 7 350. It "only" has 8 cores (vs 12 on the 370), but four of those are performance cores -- the same as the 370. And it's $300 cheaper. So ~$1,600 gets you out the door. I haven't actually tried the 350, though, so that's just speculation. I've been running the 370 for the last few months. Whichever chip you choose, the rest of the Framework 13 package is as good as it ever was. This remains my favorite laptop of at least the last decade. I've been running one for over a year now, and combined with Omakub + Neovim, it's the first machine in forever where I've actually enjoyed programming on a 13" screen. The 3:2 aspect ratio combined with Linux's superb multiple desktops that switch with 0ms lag and no animations means I barely miss the trusted 6K Apple XDR screen when working away from the desk. The HX370 gives me about 6 hours of battery life in mixed use. About the same as the old 7840U. Though if all I'm doing is writing, I can squeeze that to 8-10 hours. That's good enough for me, but not as good as a Qualcomm machine or an Apple M-chip machine. For some people, those extra hours really make the difference. What does make a difference, of course, is Linux. I've written repeatedly about how much of a joy it's been to rediscover Linux on the desktop, and it's a joy that keeps on giving. For web work, it's so good. And for any work that requires even a minimum of Docker, it's so fast (as the HEY suite run time attests). Apple still has a strong hardware game, but their software story is falling apart. I haven't heard many people sing the praises of new iOS or macOS releases in a long while. It seems like without an asshole in charge, both have move towards more bloat, more ads, more gimmicks, more control. Linux is an incredible antidote to this nonsense these days. It's also just fun! Seeing AMD catch up in outright performance if not efficiency has been a delight. Watching Framework perfect their 13" laptop while remaining 100% backwards compatible in terms of upgrades with the first versions is heartwarming. And getting to test the new Framework Desktop in advance of its Q3 release has only affirmed my commitment to both. But on the new HX370, it's in my opinion the best Linux laptop you can buy today, which by extension makes it the best web developer laptop too. The top spec might have gotten a bit pricey, but there are options all along the budget spectrum, which retains all the key ingredients any way. Hard to go wrong. Forza Framework!
I’m a big fan of keyring, a Python module made by Jason R. Coombs for storing secrets in the system keyring. It works on multiple operating systems, and it knows what password store to use for each of them. For example, if you’re using macOS it puts secrets in the Keychain, but if you’re on Windows it uses Credential Locker. The keyring module is a safe and portable way to store passwords, more secure than using a plaintext config file or an environment variable. The same code will work on different platforms, because keyring handles the hard work of choosing which password store to use. It has a straightforward API: the keyring.set_password and keyring.get_password functions will handle a lot of use cases. >>> import keyring >>> keyring.set_password("xkcd", "alexwlchan", "correct-horse-battery-staple") >>> keyring.get_password("xkcd", "alexwlchan") "correct-horse-battery-staple" Although this API is simple, it’s not perfect – I have some frustrations with the get_password function. In a lot of my projects, I’m now using a small function that wraps get_password. What do I find frustrating about keyring.get_password? If you look up a password that isn’t in the system keyring, get_password returns None rather than throwing an exception: >>> print(keyring.get_password("xkcd", "the_invisible_man")) None I can see why this makes sense for the library overall – a non-existent password is very normal, and not exceptional behaviour – but in my projects, None is rarely a usable value. I normally use keyring to retrieve secrets that I need to access protected resources – for example, an API key to call an API that requires authentication. If I can’t get the right secrets, I know I can’t continue. Indeed, continuing often leads to more confusing errors when some other function unexpectedly gets None, rather than a string. For a while, I wrapped get_password in a function that would throw an exception if it couldn’t find the password: def get_required_password(service_name: str, username: str) -> str: """ Get password from the specified service. If a matching password is not found in the system keyring, this function will throw an exception. """ password = keyring.get_password(service_name, username) if password is None: raise RuntimeError(f"Could not retrieve password {(service_name, username)}") return password When I use this function, my code will fail as soon as it fails to retrieve a password, rather than when it tries to use None as the password. This worked well enough for my personal projects, but it wasn’t a great fit for shared projects. I could make sense of the error, but not everyone could do the same. What’s that password meant to be? A good error message explains what’s gone wrong, and gives the reader clear steps for fixing the issue. The error message above is only doing half the job. It tells you what’s gone wrong (it couldn’t get the password) but it doesn’t tell you how to fix it. As I started using this snippet in codebases that I work on with other developers, I got questions when other people hit this error. They could guess that they needed to set a password, but the error message doesn’t explain how, or what password they should be setting. For example, is this a secret they should pick themselves? Is it a password in our shared password vault? Or do they need an API key for a third-party service? If so, where do they find it? I still think my initial error was an improvement over letting None be used in the rest of the codebase, but I realised I could go further. This is my extended wrapper: def get_required_password(service_name: str, username: str, explanation: str) -> str: """ Get password from the specified service. If a matching password is not found in the system keyring, this function will throw an exception and explain to the user how to set the required password. """ password = keyring.get_password(service_name, username) if password is None: raise RuntimeError( "Unable to retrieve required password from the system keyring!\n" "\n" "You need to:\n" "\n" f"1/ Get the password. Here's how: {explanation}\n" "\n" "2/ Save the new password in the system keyring:\n" "\n" f" keyring set {service_name} {username}\n" ) return password The explanation argument allows me to explain what the password is for to a future reader, and what value it should have. That information can often be found in a code comment or in documentation, but putting it in an error message makes it more visible. Here’s one example: get_required_password( "flask_app", "secret_key", explanation=( "Pick a random value, e.g. with\n" "\n" " python3 -c 'import secrets; print(secrets.token_hex())'\n" "\n" "This password is used to securely sign the Flask session cookie. " "See https://flask.palletsprojects.com/en/stable/config/#SECRET_KEY" ), ) If you call this function and there’s no keyring entry for flask_app/secret_key, you get the following error: Unable to retrieve required password from the system keyring! You need to: 1/ Get the password. Here's how: Pick a random value, e.g. with python3 -c 'import secrets; print(secrets.token_hex())' This password is used to securely sign the Flask session cookie. See https://flask.palletsprojects.com/en/stable/config/#SECRET_KEY 2/ Save the new password in the system keyring: keyring set flask_app secret_key It’s longer, but this error message is far more informative. It tells you what’s wrong, how to save a password, and what the password should be. This is based on a real example where the previous error message led to a misunderstanding. A co-worker saw a missing password called “secret key” and thought it referred to a secret key for calling an API, and didn’t realise it was actually for signing Flask session cookies. Now I can write a more informative error message, I can prevent that misunderstanding happening again. (We also renamed the secret, for additional clarity.) It takes time to write this explanation, which will only ever be seen by a handful of people, but I think it’s important. If somebody sees it at all, it’ll be when they’re setting up the project for the first time. I want that setup process to be smooth and straightforward. I don’t use this wrapper in all my code, particularly small or throwaway toys that won’t last long enough for this to be an issue. But in larger codebases that will be used by other developers, and which I expect to last a long time, I use it extensively. Writing a good explanation now can avoid frustration later. [If the formatting of this post looks odd in your feed reader, visit the original article]
At Kagi, our mission is simple: to humanise the web.