X Stats

Login Sign Up
@tonyennis

Tony Ennis

@tonyennis

4,360 Tweets
2,743 Following
2,723 Followers

Building software teams & mobile apps Prev: Built a bank in Asia YC S21

Date ↓ Tweet ❤️ 🔄 💬 👁 📝
Mar 17 TFW you built an almost-identical product as a popular indie hacker, complete with the same name, and now it looks like you're trying to copy them 😂 https://t.co/R8Zc1foTYQ 0 0 0 0 172 .
Mar 16 @peer_rich @calcom I spy a @CiaranHan in the wild 👀 2 0 0 0 51 .
Mar 16 @bentossell I had a quick look through the archives but can't find a lot . Who else (apart from adept) is building general purpose AI browser bots? 0 0 0 0 147 .
Mar 15 @fergal_reid @intercom Nice! Main thing IMO to avoid is the frustration as a consumer of *knowing* there’s no help article or bot response to solve your problem but being gatekept by a bot from getting to a human 3 0 0 0 212 .
Mar 15 Big fan of @intercom and the team in there but I think pinning your brand on customer support that doesn’t require humans is the wrong direction and forgets that’s the most important person in the CS equation is the customer 4 0 3 2.7k 224 .
Mar 13 @ryanckulp Not exactly a swag API as much as merch, but ScalablePress is very good, have used it before 0 0 0 0 103 .
Mar 13 Just published dumb-tailwind to Github. An easy way to use Tailwind directly from a <link rel="stylesheet"> in the head of a static html file, no compilation/npm/javascript needed. https://t.co/XQFOOkIENE 1 0 0 209 211 .
Mar 13 Just published dumb-tailwind to Github. An easy way to use Tailwind directly from a <link rel="stylesheet"> in the head of a static html file, no compilation/npm/javascript needed. https://t.co/d73CZDKqYS 0 0 0 0 210 .
Mar 11 @pwang_szn Yup! Bonus points if you can build it for @roam_js 😁 https://t.co/FVdWNDtnoT 2 0 0 0 87 .
Mar 10 Been trying out various channels for @workwithtonic since January. Surprisingly cold email is by far the most effective so far. New high value leads coming in daily at this point. Also tried: Agency directories (clutch, sortlist), manual Linkedin DMs, referrals. https://t.co/mKXR1a7hPD 1 0 0 353 286 .
Mar 10 @WonderDynamics @peteromallet 1 0 0 0 29 .
Mar 08 @thatbenmiller @Replit @Codeanywhere Aparently @Codeanywhere now doesn’t need to be run in the browser any more. Another concern with them (or anyone hosted) was cost control - if I remember correctly they charged per team member and the bill went up quite quickly 0 0 0 0 264 .
Mar 08 @thatbenmiller @Replit @Codeanywhere Both are great, and I’m a big fan @Replit. When we did the experiment, both were browser based (which *feels* slower and less responsive than native vscode), and replit isn’t based on vscode and is much less powerful so devs who’ve spent years in vscode don’t want to downgrade 0 0 0 0 314 .
Mar 07 @Shpigford Code in the cloud? I have a digital ocean droplet that runs 4 rails app, always on. https://t.co/miKrYmqv0U 1 0 0 0 118 .
Mar 07 @coderberry This was all Rails - works just as well. When it comes to group vs individual, it works even better - I do all my personal coding on a "playground" server that hosts 4 Live rails apps. Happy to share the script, will DM 1 0 0 0 231 .
Mar 07 @coderberry Boy do I have a thread for you 😁 https://t.co/SzGDkFZMp2 1 0 0 0 69 .
Mar 07 @levelsio The @AcquiredFM pod on this is great if you haven't seen https://t.co/n0nJQ0Ed9x 1 0 0 0 91 .
Mar 06 Built myself a little app to track my finances over Christmas. Decided over the weekend to make it look nice and let some friends use it. https://t.co/NWUtzEb5mm 14 0 1 1k 161 .
Mar 02 There was a time when javascript was optional for building interfaces 😔 https://t.co/8cicxFChYB 1 0 0 162 96 .
Feb 28 It's sad that the phrase "Are they a good frontend dev" now approximates closer to "Can they work with react, npm, typescript and the rest of the ecosystem" than "Can they build a wide variety of common patterns in a team-friendly way using html & CSS" 1 0 1 359 256 .
Feb 25 @tylertringas https://t.co/sJ9BVmk8JQ 0 0 0 0 37 .
Feb 24 @chacon We stopped using it favour of @htmx_org - does the same thing but much easier to reason about and debug, and much better documentation. Takes a day to learn the three or four snippets needed and wrap your head around 2 0 0 0 224 .
Feb 23 @chacon @SendGrid @postmarkapp Might be misinterpreting but think this is possible with Postmark? https://t.co/tS4bku40TS 0 0 0 0 121 .
Feb 23 @chacon @SendGrid @postmarkapp is where it’s at! Much much better, designed for self serve 1 0 0 0 90 .
Feb 23 @volkandkaya @framer Decent example of custom components (devs using it) https://t.co/PPjiHqYZ4n 2 0 0 0 96 .
Feb 23 https://t.co/sBRlqiQR84 0 0 0 154 23 .
Feb 23 @housecor We do this. Although not exactly as you’ve described. We still have a PM, but treat the team as an integrated unit with the PM facilitating, but not acting as chain-of-command. Haven’t seen a setup with zero comms with devs that isn’t hugely inefficient https://t.co/POVsgaVVv7 https://t.co/atpG2mjd7H 0 0 0 0 312 .
Feb 21 @mhamann 100%, don't think it'll work beyond two, so definitely only doable on a certain kind of team. Personally I think more teams should operate like this anyway, a lá basecamp. https://t.co/dBGfMl2Aoz https://t.co/TRGGSsidjy 0 0 0 0 228 .
Feb 21 @th1agofm One solution might be to write a gem/script that scans for scopes, virtual attributes, soft delete attributes etc and creates a materialized SQL view that incorporates them. But haven't come across anything existing that does this. 1 0 0 0 241 .
Feb 21 @th1agofm Yeah Metabase just connects directly to the database, so doesn't have knowledge of the business logic. It's a good point though. In my previous company the data team built a bunch of materialized SQL views to handle this, which were also surface in metabase. 2 0 0 0 269 .
Feb 21 @th1agofm Metabase for 1 and 2. Don't have a drop-in solution for number 3 outside of copy-pasting the raw SQL into Metabase. 4 0 0 0 125 .
Feb 20 There are 2 reasons I wrote this thread (and went into so much detail): 1. To handle objections that might kill an experiment like this before it's started, & 2. To find others who are already working like this, or considering it. Would love to hear opinions on both sides. 3 0 1 271 278 .
Feb 20 Within weeks they were contributing meaningful, sizeable features, regularly. They were able to focus on how to build and populate interfaces *first*, not how to manage dependencies & sync data, which came later. This is (in my opinion) how it should be. https://t.co/DRtfFMlwYu 0 0 0 0 283 .
Feb 20 So, what started as an experiment became a regular part of our process. Now, whenever we start a new project with a small team, the staging VM is the first thing we do. The benefits, if your team culture is compatible, are unmistakeable. 1 0 1 269 237 .
Feb 20 Junior-Friendliness We recently onboarded 2 awesome bootcamp grads. There was some understandable apprehension at first to working like this, and a fear that they might unintentionally break things, but once they settled in, mentored by their senior teammate... 0 0 0 0 262 .
Feb 20 - PMs asking "is that on staging yet" - Dev 1 blocked because they're waiting on push from Dev 2 - Devs fixing deployment/buildpack related issues after adding new packages ...and many more I can't recall 1 0 0 0 205 .
Feb 20 Things that got much easier: - Real-time API/Webhook testing - Real-device mobile testing (open the url on your phone) Things that either decreased or disappeared: - Merge conflicts - Data discrepancies slowing debugging (the "it works for me" issue). 0 0 0 0 252 .
Feb 20 Output Quality Difficult to measure, but unmistakeable. The upshot of making it easier to work as a group around a single piece of "output", was a marked reduction in bugs (often flagged by the PM), and a clear improvement in the "finish" (UX/interactions) of the product. 0 0 0 0 273 .
Feb 20 Another impact was the likelihood of developers to solicit feedback mid-build. We try to avoid over-speccing (prescribing every tiny detail of a feature up front), so this meant developers could use their own judgement *and* get feedback from their PM, super quick. 0 0 1 171 265 .
Feb 20 This newly-enabled fix-it-immediately approach shifted the expectations around what's considered a normal amount of time to spend/waste on blockers like this. Nowadays, it's very rare that anyone, junior or not, spends more than a few mins stuck on environment or data issues. 1 0 1 166 276 .
Feb 20 Collaboration Before the experiment, it was common at a morning standup for a dev, often junior, to mention a blocker they're having. Previously, this was something we'd pick up after the meeting, but now, we'd often debug & fix during the call 🤯 1 0 0 0 251 .
Feb 20 Iteration Speed The merge/deploy steps are so ingrained in our current practices, we don't notice how much they slow us down. When software is always-on, time-spent-waiting for deploys and teammates goes to zero, substantially increasing flow and output. https://t.co/azJBuFVvTB 0 0 0 0 280 .
Feb 20 On to Benefits On the whole, the benefits easily outweigh the drawbacks, which is evidenced by the fact we're still doing this today. Some of those were: 1. Velocity/Iteration Speed 2. Improved Collaboration 3. Output Quality 4. Junior Friendliness 3 0 0 0 250 .
Feb 20 Collisions As we had guessed, the biggest drawback was developers getting in each other's way, and/or getting slowed down by something someone else is working on. I looked at ways to solve this with technology, but in the end it came down to communication/buy-in of the team. 1 0 0 0 276 .
Feb 20 Collisions (cont) Our teams are made up of one junior and one mid/senior who work regularly with each other, mostly on the same timezone, have good rapport already, and were open to experimenting. I'm not sure if you changed some of these variables it would still work. 1 0 0 0 270 .
Feb 20 Yes - this meant the cost to run one of these environments flawlessly on @digitalocean was $48/month, but when you look at the benefits and the comparable fully-loaded costs of using @heroku with plugins etc, it was still a no-brainer, for us at least. 2 0 0 0 252 .
Feb 20 This damaged confidence a little bit. But we marched on. The ultimate solution was a combination of 1. Installing @linuxnetdata to keep an eye on/fix what was spiking cpu/ram usage, 2. Tweaking rails & system config, and 3. Ultimately ensuring the server had enough resources. https://t.co/7DYIeQWiDj 2 1 0 0 305 .
Feb 20 Performance & Debugging This was trickier to figure out. Rails can be very resource intensive, especially when you disable the caching and pre-compilation typical in a live environment 😅. For the first week or two, the server would often become slow or non-responsive. 1 0 0 0 273 .
Feb 20 What We Learned Let's start with the drawbacks. They can be broken down into... 1. Learning Curve 2. Performance & Debugging 3. Collisions/Co-Ordination 1 0 0 0 158 .
Feb 20 Learning Curve The new setup required different commands for things like tailing logs, restarting the server, and running background jobs. Overall I was surprised by how minor this ended up being. We did a walkthrough call, created a cheat sheet, and the team was on their way. 0 0 0 0 279 .
Feb 20 I remember the first time we got this working - making an update in @code, opening chrome, hitting reload, and seeing changes reflect in real time - it felt like magic. Now it feels normal. But it makes working with apps where you have to wait for deploy feel slow by comparison. 1 0 0 0 279 .
Feb 20 We ended up with a chunky script that auto-installs everything and uses Nginx & Passenger to serve apps. To start a new vm you just create an ssl cert with certbot, add a few lines to the Nginx config to point the domain to the app folder. Then it just stays running. 1 0 0 0 271 .
Feb 20 The server setup was by far the most involved part of the process. We wanted to be able to easily spin up a new server that serves a Rails app and requires zero dev-ops knowledge to keep alive once provisioned. 2 0 0 0 210 .
Feb 20 Diving In Our first port of call was browser-based tools. We tried @gitpod, @Codeanywhere, and CodeSpaces, which all use @code, but inside the browser. The ease of setup and replicability was great, but coding in the browser still felt like a step backwards vs native @code 1 0 0 0 274 .
Feb 20 So we ditched the browser products and went VScode-first. The downside is that we had to set up our own server. The upside is that, provided the server is geographically close to the developers, it feels completely identical to an offline-first setup. 2 0 0 0 252 .
Feb 20 3. Is architecturally capable of treating remote file systems identically to local ones. Since early 2022, Microsoft @code has had all three. The consequences and applications of this still seem under-appreciated, but that's for another day. 1 0 0 0 242 .
Feb 20 In order for this to work, there needed to be a tool that: 1. Is ubiquitous enough that most devs already use it. 2. Has really great built-in support for the "non-text-editor" parts of building software (version control & terminal), and... 2 0 0 0 245 .
Feb 20 Up until recently, running this experiment was a non-starter, because the amount of behavioural and ergonomic change required was simply too high. 2 0 0 0 146 .
Feb 20 Additionally, software programming is an area where ergonomics matter a lot. Most developers have spent a lot of time customising their setup to suit how they work, so this also needs to be considered. 2 0 1 210 201 .
Feb 20 Because of this, developers are rightfully protective of their workspaces, so asking them to code alongside each other, where everyone can see and modify the same code in real time, feels jarring and takes a lot of getting used to. 2 0 1 212 231 .
Feb 20 This is a radical idea in more ways than one. Writing software collaboratively is different to writing documents collaboratively. With word processing, if I make a change on page 8, it doesn't affect my colleagues work on page 2. With software it can, and it does. 2 0 0 0 264 .
Feb 20 There is lots of value in that, but it doesn't solve the "many versions" problem I mentioned above. We wanted to go a bit further. So, for our smaller projects (2 developer team), we switched to doing all development on one single online-by-default environment. https://t.co/ZgQbd4zFHC 2 0 0 0 287 .
Feb 20 Remote Development has advantages for 1. Developer Productivity and 2. Team Collaboration. It's been growing in popularity recently, but most of the discourse seems focused on 1. (Developer Productivity), and giving each developer their own online-by-default environment. https://t.co/KqDKvbxqiA 1 0 0 0 295 .
Feb 20 👆 This idea is nuanced and deserves it's own thread, but in the interest of keeping this one semi-readable, I'll leave that 'til another time. 1 0 0 0 142 .
Feb 20 Why does this interest me? IMO, one of the biggest barriers to building software as an iterative group design process, is the cognitive and operational friction introduced by having many (mostly offline) versions of the same software at the same time. https://t.co/bnl9acsDTX 2 0 0 0 277 .
Feb 20 This is in contrast to many other creative tools which have moved online-by-default. For example, if I create and share a Google doc with a colleague, there is only one version of that document, which we both edit in real time. Similarly for Figma, Canva etc. 2 0 0 0 259 .
Feb 20 Remote Development is a way to build software that is online-by-default. Whenever you make a code change, your colleagues see the updates to the software immediately. Similarly, other developers can also see the changes you've made to the code immediately. No "push" needed. 1 0 0 0 274 .
Feb 20 First, what's "Remote Development"? Usually, when a developer writes a software program, that program runs on *their* computer. The files, the application and the database are not connected to the internet and can't be viewed by anyone else until they proactively "push" it. https://t.co/e5KHpbRrbH 3 0 0 0 299 .
Feb 20 Last year, my team started a "Remote Development" experiment. We're still iterating, but it's already a core part of our workflow. The learnings are broadly applicable/interesting to both a technical & non-technical audience, so I've written this thread for both. 👇 11 1 1 1.9k 271 .
Feb 12 @myles_cooks @reflectnotes Yup! I built it and never properly launched it. https://t.co/iqEBXttgyL to sign up https://t.co/kolGprMkjE 1 0 0 0 133 .
Feb 11 Hot take: This was one of the worst ideas in @JamesClear’s book. Not because compounding isn’t powerful, but because *daily compounding*, applied to human behaviour, for a year, is preposterous. https://t.co/kWiSNsb2Or 2 0 0 0 218 .
Feb 10 @_williamkennedy Yeuuuup 1 0 0 0 24 .
Feb 10 @thomasauros Other devs *who know typescript* 😏. What percentage of js devs (new and existing) you think that is? 0 0 0 0 113 .
Feb 10 @mikenikles And once it becomes accepted, it becomes invisible. Good example is the fact that despite most browsers support css/js code splitting now, it’s still super rare to find a codebase that doesn’t do pre/post compilation (which requires additional conceptual and tooling knowledge) 0 0 0 0 289 .
Feb 10 @mikenikles In that way, every new approach to “doing stuff properly” seems justifiable in isolation, but stack them up over time and it’s death by a thousand small cuts. 0 0 0 0 170 .
Feb 10 @mikenikles Also agree with the spirit of that statement (doing stuff properly), the problem it’s normative, subjective, and almost always applied post hoc (in that it wasn’t like people pre typescript were thinking “Ugh this codebase is really not done properly”). 0 0 0 0 265 .
Feb 10 @mikenikles Yeah. And also for those who are used to it, it makes building a bit quicker from what I understand? My very strong hunch is that for crudware (low complexity, low interactivity apps), the ratios are still small and the tradeoffs not worth it. Also this https://t.co/dofPgbYm7s 0 0 0 0 289 .
Feb 10 @mikenikles What’s your guess as to the percentage of bugs you’d find in a non-typed (let’s say ruby/rails as an example), well maintained 4 year old codebase (mid level engineers), vs the same codebase, same age, same seniority, but written with js/ts? Like 20% fewer bugs? 0 0 0 0 274 .
Feb 10 I haven’t gone super deep on typescript, but I’ve noticed many people talk about it like this. If that’s the case - honest question - why is it so popular? https://t.co/eAW6p7KJqN 1 1 0 0 179 .
Feb 07 @Shpigford How do we get the name of this stealth startup? 👀 0 0 0 0 60 .
Feb 04 Oh https://t.co/YGY88lO264 1 0 0 0 26 .
Feb 03 @andrewculver 😱 2 0 0 0 15 .
Feb 01 @faborio Needed because VCs expect it, but not actually necessary to build the software 0 0 0 0 87 .
Feb 01 To be fair, the standard of the average outsourced agency isn't known to be very high, and the go-to agency pricing model (hourly/project based) often doesn't work well for startups. Wonder will that change as people are forced to be more honest and lean in the next few years. 2 0 0 0 277 .
Feb 01 Still regularly having conversations where founders are totally convinced that they *need* a technical co-founder for their marketplace/e-commerce/e-learning/health-tech etc. startup, because the dogma is so ingrained and basically completely unquestioned. https://t.co/6Ht3AFQeTX 1 0 0 0 280 .
Feb 01 It's surprising to me that the investor narrative that "Not having in-house tech is a red flag for a startup" still prevails, even though >50% of startups are just a thin layer over real-world processes, and the frontend/backend layers are completely homogenous/undifferentiated 4 0 0 0 281 .
Feb 01 @jakobgreenfeld Only one I haven't seen suggested in replies is @getfernand . No idea if it's good (haven't used) but I use their other product which is really great. 1 0 0 0 166 .
Jan 31 https://t.co/L3PDvxZeiS 1 0 0 0 23 .
Jan 31 @thdxr Such a cop out. Instead of using that framing, you could also just ask “Is this additional layer likely to lead to more casual learners or fewer entering the space?”. Learning and developing new behaviours is just a fuel-vs-friction equation, not necessarily “overwhelm” 1 0 0 0 277 .
Jan 23 As another data point here, I've attempted to buy things from Gumroad creators on several ocassions and every time my card gets rejected, has never worked. I always thought that was surely impacting creator revenue, turns out maybe it was https://t.co/7W6CuOQCsv 0 0 0 0 262 .
Jan 21 @volkandkaya @framer I may be misreading, but it seems your attitude toward Framer is to dismiss it, which I think is short-sighted, as it's (IMO) going to start to take market-share from other website builders (including Versoly I'd guess), and it's not just because of polish. 0 0 0 0 278 .
Jan 21 @volkandkaya @framer I get you - twitter is a lossy place to discuss this stuff with any nuance, I'd guess we have pretty similar opinions on a lot of it if we sat down. I've also been following/have used versoly, and tried my hand at solving similar problem with https://t.co/HafcfF5Xha 1 0 0 0 287 .
Jan 21 @jessethanley @volkandkaya @framer Not trying to reinvent anything, having language for new ideas is helpful, and "Beginner friendly tools" doesn't capture the same idea https://t.co/lNkwXalTM5 1 0 0 0 193 .
Jan 21 @volkandkaya @framer That's a good point and I think if it doesn't work, that'll be the reason why, but my hunch is that that can be solved with smart abstractions vs full access to the html. They may be different use cases though 1 0 0 0 230 .
Jan 21 @volkandkaya @framer I think you're missing the point. It's built in such a way that designers don't need to know react. The react people can do their thing and build out complex stuff, the non-devs can access and control things using the UI. 1 0 0 0 242 .
Jan 21 @volkandkaya @framer On the dev side, the fact that it's built on react, which means devs can re-use and/or build new stuff without changing behaviour. On the builder side, the fact that the UI/UX is intuitive/feels enjoyable to use. Plus the out-of-the-box templates & components are A+ quality 1 0 0 0 299 .
Jan 21 @volkandkaya @framer If you count me, then yes 😊 I'm still playing around with the ability to work with my own react components which is very cool. But a better example is developers building extensions for it that can be copy/pasted in, e.g https://t.co/zJMGtIY29y 1 0 0 0 267 .
Jan 21 A few years ago I suggested the term "co-code" as a product/tool that allows both developers and non-developers to build/collaborate in the same environment. Of the products I've used since then, @framer is the exemplar. Still early but they're nailing it https://t.co/NmNl8DxGue 4 1 2 1.1k 280 .
Jan 20 @Huperniketes @notengoid @johncutlefish The Ship & Done is in there to highlight how some people (IMO incorrectly) attempt to build software. Wrt manufacturing, you're right that my familiarity is limited, but I'm pretty sure I'm correct to implying that once a product is shipped, it's shipped 0 0 0 0 298 .
Jan 20 @benjaminnathan @framer Trying it now, is there any way to connect it to a CMS collection? 0 0 0 0 90 .
Showing 1501-1600 of 4360 tweets