What's cooking on Tuist? September 2024

Hola :wave:,

I came across Sourcehut’s blog recently, and I enjoyed their monthly updates so much that I thought, why not do the same for Tuist? I find them very useful for learning how others are reasoning about problems, shaping their companies, or making decisions. The Internet makes sharing that knowledge very easy, so why not do the same for Tuist? These are also opportunities to reflect and celebrate what everyone is achieving here. So, let’s dive right into our first update for September.

Product

We worked on a new feature called “Tuist Previews,”, which drew inspiration from past work at Shopify under the name “tophat.” We called it previews because it’s the term the web ecosystem uses, and we didn’t want to introduce the cognitive load of calling it something else. What’s great about how we envision it is that we adopt URLs as a collaboration token. In other words, anyone with a link to a preview should be able to preview it with one click. For that, we built a tiny macOS app as part of the github.com/tuist/tuist monorepo. Alternatively, you can run the preview using the CLI by running tuist run {url}. We have many ideas for things we’d like to do in that domain, but we put it on hold to let people try it and share feedback. Down the road, we’d like to support destinations other than iOS’, auto-install and manage simulators for non-technical people, and support giving feedback, which gets directly forwarded to the developer that generated the preview. That’d be awesome, no?

Give it a shot, and let us know what you think! And BTW, you don’t need a Tuist Project to make it work. It works with Xcode projects, too, so you don’t need to migrate anything to Tuist.

We also shipped our first server integration, GitHub, and a feature that builds on it “Reports on PRs”. We love meeting developers where they are. We did that by choosing Swift as the language for Tuist projects (and soon for automation) or aligning the language with Xcode’s, and we are doing the same here by surfacing relevant data in a place where developers spend a lot of their time: GitHub. For example, here’s a report on a PR that shows information about the previews that have been generated from that PR, as well as relevant information from test runs, like the cache hit rate, and the tests that were skipped thanks to our smart runner. Who doesn’t want their tests to run fast?

Note how convenient this is for Xcode developers. You don’t have to deploy your own instance of anything, have your infrastructure team monitor and roll out updates, or add complexity to your automation scripts running in your CI environments. It’s built right into your CLI, tuist. You sign in, integrate with GitHub, and voilà. The data is right there for you. These are the types of developer experiences that we like building. Simple and fun to use.

We also started setting up Weblate at https://translate.tuist.io to involve the community in translating the documentation. Languages are a tool to connect with people, and we want to connect with teams using Tuist more meaningfully. The assumption that everyone speaks English or feels comfortable working with it falls apart in some parts of the planet, and we don’t want Tuist to be that tool that’s not linguistically accessible. Quite the opposite, we want you to understand what we do and how we can impact you in your main language. We’ll probably start with Japanese and Korean and seek some professional help to help with the review.

We’ve also got oddly excited about Dagger, I won’t spoil you much about what we plan to use it for, but I’ll say that we plan to innovate in the automation space. We want to address the following needs in continuous integration:

  • Too much indirection in (CI > Proprietary Yaml > Scripts > xcodebuild > Xcode project)
  • Pipelines that are hard to debug
  • Automation that’s implemented in languages that developers are not familiar with.
  • Vendor-locking in CI providers that offer intricate pricing models

We’ve suffered the above for many years, so we want to take the lead in stopping that. Dagger will play a crucial role in making that happen, and we will invest in being able to run things in remote environments fast and reliably because many features we have plans for will require that as a foundation—more on this in future updates. Remember that name, I’ll be referring to it as “Tuist Workflows”.

On the server side, we managed to fix an issue that drove us crazy and caused terrible performance in our API. Guess what? It was caused by using a non-time-constant cryptographic function in the highly concurrent cache endpoints. The issue is now remediated, and not only that, but we made our monitoring dashboard open. Yes! You heard it right. You don’t need to take our word for how performant or reliable our API is because you can check it with your eyes. We are so thankful that we chose Elixir for the Tuist server because, thanks to Erlang’s Telemetry layer, we could trace requests and spot where the bottleneck was. Moreover, we learned a lot about Prometheus and Grafana, which comes in quite handy for something that we plan to do for our organizations.

We realized that building a dashboard when there are solutions like Grafana don’t make any sense. We’ll never be able to build something at the level of sophistication of Grafana in terms of flexibility and UI perfection. We could, but we’d instead gear our energy into something else, leverage other open-source projects in the industry, and support them. So what are we going to do? All the data collected from builds, projects, and artifacts will be persisted and exposed to organizations through project-scoped Grafana dashboards. You heard right! Once you sign up on the server, you’ll get your read-only Grafana dashboard. And if you want to customize it further, we’ll expose you an API to pull the metrics into your own prometheus database. When we first saw this in Fly.io @marekfort and I thought, damn, we need that. Imagine Xcode teams having a Grafana dashboard that they can use to make decisions.

We have some other ideas for improving the performance on the server further, but we will put that on hold for now to focus on something else. We’ll start working on enabling the execution of builds in ephemeral macOS virtualized environments, for which we’ll benefit significantly from the decision to use Erlang’s VM, which is unbeatable for this real-time and fault-tolerant infrastructure. I can’t wait to start working on it! Once we have this in place, we’ll be able to trigger releases with just one click on a commit (don’t worry, we’ll build and sign for you), or analyze artifacts in macOS environments, offering you a detailed report and a correlation, with your project’s graph (which we are lucky to have).

Community

The Tuist community continues to grow, which is something positive, but it also means it challenges some decisions that you made in the past. We are starting to notice that we cannot keep up with the stream of PRs and issues coming our way, so to address that, we will allocate a bit of our time every day to review and merge PRs. Hopefully, we’ll get those PRs down to zero. We also noticed that some conversations are recurrent in Slack (i.e., people asking the same things multiple times). This is normal, considering the conversational style of communication that Slack proposes. Slack turned out to be a good idea for Tuist because most teams using Tuist use Slack for their companies, but it’s hard to scale support unless you pay for some of their plans, which is something we can’t afford because you pay per seat, and we are above 1K people. We tried to move people to Discord, which would give us some extra flexibility, but people were not keen to it.

Moreover, we’d go from a walled and closed-source solution to another one. What if it’s time to revisit the communication style and move to a more open and flexible solution? That solution is called Discourse, and you’ve probably seen it on the Swift community forum.

OMG, it feels so great to move to longer and deeper conversations. Starting a “Topic” is so crucial that you take the time to think thoroughly about what and how you want to share. Anyone can land on those topics by searching the internet, even if they haven’t signed in, and share it with anyone. We can also integrate it with ActivityPub to subscribe to updates from Mastodon, and with Slack to promote conversations from there or to share updates on Slack. Discourse is amazing. We’ll try to move more conversations here and leave Slack for more urgent things and GitHub Issues for actionable elements.

Last but not least, on the community front. I created a Shopify shop just for fun to send people Tuist swag like t-shirts and stickers via drop-shipping, which I did manually at home, but I haven’t made much progress. I’ll see if I can squeeze in sometime next week to finalize the setup.

Business

Things are going surprisingly well. Companies love the results that they are getting (some up to 80% of CI improvements). We’ve been quite lucky to find companies that had the patience to collaborate with us, sharing feedback and iterating on their projects to benefit from the cache the most. You are amazing! Things are quite slow because it’s B2B, and that’s a very long and slow process, but we are getting better at it :sunglasses:. If you work at a team and would like to benefit from adding a server to the mix, for example, to speed up your builds, email me at pedro at tuist dot io. We’ll work with you to get those numbers down and boost your team’s productivity.

We are also working on getting the SOC 2 certification, which is not one of the funniest things to work on, but we’ll hopefully speed up some of those B2B conversations. As part of that, we have to establish a bunch of policies for us and future employees, which we are placing in our Handbook, which is public. If you are curious about how we shape the company and what we stand for, that’s the source of truth. The handbook is our DNA, and we believe it’s crucial in enabling a company that can work effectively within the same office or remotely. Thanks, Posthog and GitLab, for being such a source of inspiration.

Other than the above, I learned a lot about how things work in Germany, how to hire in Germany, how to set up an MDM system, and how to onboard people on an HR platform. Who would have told us we’d end up doing these things? Yes! It’s a must, but hopefully, it’ll get less and less painful over time.

We are also talking to other companies in the industry that are doing very cool things in the space to explore potential partnerships. It’s the first time we do something like this, so it requires a lot of thinking about what we do best, what we enjoy doing, and where we see Tuist in the future. If everything goes as planned, we can officially announce who those companies are and how we plan to partner with them. (Spoiler) No matter where things end up, I think they are doing pretty impressive tech.

Random

  • We have a new website in the making, but we are very slow in implementing it. Hopefully, you’ll see it within the next couple of weeks. I think you are going to love it! And… we are merging https://cloud.tuist.io into https://tuist.io. The Elixir server will serve the marketing and web app pages.
  • We attended NSSpain and got to meet the awesome Oura ring. The conference was as always amazing, and we had a great time meeting and chatting with other developers, some of whom happened to be Tuist users.
  • We are still only two people working full-time on the project, but we’ll have a designer and a developer joining us in Berlin. So if all the above was done with mostly two people, imagine if we double the team :motorway:.
  • Most of the services that we depend on now are open-source projects. We believe we need more open-source and will support that vision as much as possible. Unfortunately, we couldn’t do that with every service, but we’ll continue to monitor it if good alternatives emerge.

See you next month! Hopefully, with the new website available and a prototype of Tuist Workflows:

2 Likes