I'm hesitating... need some feedbacks!

Hi There,

As the title, I’m hesitating…

I’m investigating multiple frameworks and solutions to create my next project. It will be a mid size project, for several hundreds of logistic companies, world wide. I’m not started coding today… (in fact, my first project was run on a C=64… so you can guess )

I’m still not decided which framework to use. Originally, I was planning to do it in .Net Core, using Razor/Blazor webassembly… but I was wondering, there have to be an easier way! (well, even some game engine easier… LOL)

I’m more of a game dev, run my game studio, but time to time we have projects outside of our “normal gaming zone”. I want to work on this project with the less resources possible, with the most flexible way it could be… so I found Anvil (next to some other soltuions).

So why not .Net Core
I (and my team) working in C#, C++, python, tons of scripted languages, even C or in ASM if needed… so language was not a problem. However, MS is a beast… in the wrong meaning of it. They change everything and turn things upside down… looking back the last 20-30 years I’m working with MS tools and code (even worked on Windows source code), I know how complex it could be.
On one hand, you have many great tools and endless of documentations, free codes, (i.e. nugets plugins) to do whatever you want “quickly”. On the other hand, you always hit walls and once everything works, you get an update or note from MS what is changing next year.
Back to .Net Core, it was first ASP.Net where many people used VisualBasic, then .Net Framework, .Net core, throwing out completely VB… from simple forms to MVC, Razor, blazor endless…

It is not about being VB or any other tools, framework good or bad, but I’m planning systems which should work for decades, not only for a week or a year. Managing such a system, when the core changes is a nightmare…

Another problem is the complexity, even using docker to create an image, you need to be sure all the required tools, libs, everything is up to date and matching with each-other (not to mention which C# and .NET core are you using on which server, sql etc…)

So, while most of the enterprise devs would say go for .NET core, I’m not so sure, when I’m running many project with a small team. We always managed our project with 1/10 - 1/100 size of the average companies, simply picking the right tool for the job and not forcing our skills to be the selection.

So here comes Anvil… great at first look, but hey, honestly most of the tools does it!
But what about the second look at… :stuck_out_tongue:

And that is what / where I would need some help from people already into Anvil.

I had spent about a week in Anvil, made a small test app, checking my normal routes and still looking good. However, I’m still hesitating, which is a sign of, well something missing or I just missed it between the lines.

The biggest problem I see is production management. Or this is what I am still missing.
How can I develop - with the easy of Anvil - using multiple development branches? Can I? I’m sure there are some way to go, but is there any easy and clean way?
I know about staging environment, but it talks about 2 stages, a dev and a production. That is not enough for us. We need multiple branches for our codes, including ui, server, client, db.

In practice, when it is about a project with tons of clients, we need to develop new features requested by them. The most common way is to branch our code so we can have a stable public brach for running production code and as many branches as we need for features developments, special releases, etc.
This way the majority of our code share the very same code, but some parts can be updated, changed apart from each-other and there is no limit how many ways we are doing it.

What I can see, I could go for the open source Anvil, so we can have everything in git/hg/p4, but then we would missing the easy peasy part of Anvil editor features.
Using the enterprise model would be just too early, we are still just in planning phase. But maintenance is even higher priority when selecting a framework than anything else. However, it could be a great solution after some point.

So who do you develop, what is your 2nd view on Anvil after you already had some project finished.
Is it easy to maintain in long run or you run into many issues with an update from Anvil, missing library, new add-ons, new python version or with missing some serious source control. (the one I can see built into the editor is missing many important features for a mid size project).

Anyway, thanks for reading it through… and reaching this line :stuck_out_tongue:

I don’t have much practice with the Beta IDE, yet, but it was designed expressly to address such concerns.

2 Likes

I can confirm that the Beta editor allows super-easy separation of development/testing/production environments, and migrating changes up the chain.

For the rest of it, Anvil provides so much leverage that I can get more done as a sole developer than I could heading up a team of several developers in another language/framework.

Edit: As far as missing source control features, you can clone the repository to your machine and use command line git to do whatever you want.

7 Likes

I’m a former C# / .net dev so I know exactly where you’re coming from. I run a small software shop and I’ve been dabbling in Anvil for a couple years now.

Microsoft is terrible when it comes to licensing. But they really knocked it out of the park with C# and Visual Studio. No close second as far as IDEs are concerned and that’s a fact.

Anvil is great for prototyping and doing web stuff. And yes I know people run production level companies on it.

It’s just not really at a point right now as far as dependency management goes, that I’m really going to risk a bunch of money / resources on it.

Same thing goes for the IDE, and automated testing.

I’m still holding out that they’re going to open up the IDE for plugins, that would allow people to write their own automated testing tools. Testing is essential, and It’s been all but ignored as far as implementing testing frameworks or features, in the online IDE.

It’s getting there though, so I’m willing to stick around and pay my dues, because the velocity that the company is moving at indicates that they’re providing a lot of value, even if it’s not at my particular level of standards for software development (yet).

It doesn’t have all the nice things that you would get with VSC or Visual Studio.

You can’t enforce typing with a config file in VSC, and that’s one of my biggest gripes with python in general. Dynamic typing is absolutely terrible when tying to write larger apps. Lots and lots of tests I’ve seen written for loosely typed languages were just type checks.

Looking forward to that day though when I can start feeding the furnaces and hammering out my production stuff on a (Optional static type enforcement, testing enabled) Anvil :wink:

4 Likes

I am a one man show, writing software for internal use for my company. In some periods I had one or two other developers helping me or working on their own apps, but I’m mostly flying solo.

My first priority is my own productivity.

I have discarded all the frameworks that don’t come with an automatic deployment because I don’t want to take care of the deployment, db administration, certificates, security, backup, user management, etc.

I have discarded all the no/little-code solutions (very too common in small/medium size businesses) because, well, you don’t go too far without code.

Anvil is just perfect for me. There are some limitations, but they don’t bother me.

Anvil comes with some big limitations. For example Anvil apps are single page app, so if you need a searcheable site, you are out of luck.

The database that comes with Anvil has serious limitations, but (1) the accelerated tables just started their beta, (2) which makes me think that some more goodies are baking and will show up soon in that front, (3) with a dedicated plan (like mine) you can use SQL, and (4) you can just not use it and use any database you want.

I have 100+ of apps, all pointing to the same subdomain app-name.app.example.com, all sharing the same users table and the same database. Some are simple http endpoints, some have more complex UIs, some are for internal use in our company, some are open to the outside world.

Anvil is perfect for me. I do miss more db flexibility, a dashboard to have an idea of what’s going on on my server, a testing environment, PyCharm also for client code (I use it for server code and some client refactoring and some form fine tuning) and a few other things, but, even with its limitations, as far as I know, Anvil is the best environment.


I also create plugins for CAM, CAD and other software, and I created many desktop tools in .net.

Unlike @nathanguyette, when I need to work with C# on those tools I get allergic reactions. I just can’t stand strong typing. I love the flexibility of Python: PyCharm (not Anvil) recognizes the types 70% of the times, the other 30% you decide whether to help it with some type hinting or just be productive. (I created a few tools in C# and ported them to Python, they shrunk in size and improved in readibility. I created a few tools in Python and ported them to C# and it was a nightmare).

I still remember that day when I found out that strong typing was actually helping. It was that one lonely day. It did help me preventing an error and saved me a few minutes. It never happened again. What happened again and again, every minute of every day, it was me wasting time taking care of typing when there was absolutely no need. In C# you spend 10 hours on the logic and 50 on the typing, in Python you spend 3 hours on the same logic and 5 minutes on typing.

Did I say I can’t stand strong typing? I know, I’m going against the flow, here around y’all pros, but I just can’t stand it.

I would rather quit than switch from Python to a strongly typed language or from Anvil to any other framweork.

4 Likes

Most of what I would add has already been said here.

One thing to add to though is the data tables service - as @stefano.menci rightly points out, the data tables were slow. We run a production app on Anvil and the data tables service was a problem.

We have a unique set of challenges here in the remote parts of Australia particularly to do with internet / cell signal coverage so we spoke with the Anvil team at length about (1) how to mitigate the issues and (2) what could Anvil do to help. In both cases we got the support we needed and now we have a data tables service that meets our requirements in the the new Accelerated Tables service and PWA functionality including offline data storage. We asked, they answered. What more could you want from a company!!

Before coming to Anvil I had zero experience with Python and now, you would be hard pressed to get me to use anything other than Anvil.

I tried a number of other full stack development platforms before finding Anvil and always had this nagging thought that it wasn’t quite right. After building with Anvil for 18 months as a side hustle and now 18 months full time for our company, we will not be going anywhere else.

Fantastic Support
Excellent helpful Community in the forum
Easy to use and fast to build IDE with More features than we need
Simple deployment and hosting options (we use Dedicated Hosting)
Great integrations (like Stripe and Google)
We just worry about building our product and let Anvil take care of the rest.

Couldn’t put it better than that

Take the leap, you won’t be disappointed :slight_smile:

6 Likes

@p.colbert Thanks a lot for sharing these, I’m checking it out right now!

@nathanguyette it seems you are the closest in mind-set to me
First of all, thanks for the reply!

I think dependency management, refactoring (in editor or multi cursors super editing using VSC - actually I am an old user of Sublime Text, which is the base of VSC are something very very handy), QA with automated testing, production management all important when it comes to a product. Testing is essential, since I use to run Q&A division and I’m a former build master at Sony AAA game studio, etc, so I’m a bit keen on this part too. I was always the one who started first writing test, then the code…

Still, I see potential in Anvil. It is a different approach, need to “rethink” how and what needs to be done. Testing has many way of doing, i.e using automated UI test tools can actually run a test without any anvil integration. (you can program to click and check results in UI or in your own app/db whatever… long time I’ve used anything like that but there is always a way around)

2 Likes

Yeah, that’s all about Anvil for sure!
SPA: that’s exactly what I want, so that’s not an issue
DB: I can use my own db on my own server using uplink, so no problem. I did a test with both, using my own DB and using Anvil’s DB. The latest is way to simple and difficult to use to me. I mean I can get everything I want with sql especially using views and stored procedures in the DB. Using python to get around a query is kind of a headache to me. (ie. multiple rows key with multiple tables… took me some time to figure out how to get what I need and I did not like the results)

Btw, running your own DB on a virtual server is a no brainer. you don’t need that much of a maintenance for it. But I can understand to keep everything within Anvil is also a strong feature.

I think you just answered one of the biggest concern of all, when it comes to using any tool. I also wrote some “hard reading long email with some “silly” questions” to them and yes, I’ve got clear answers. (support test passed for me).
I am also surprised with you guys, all the comments in such a short time. And all of them full with VALUE, not just a “I like it dude” type of answers. I really appreciate all of your effort and help here and I’m also convinced that both the forum and Anvil team is there to help when needed!

I’m pretty sure I can also find someone to help if needed in a long term.

Regarding python / strong vs loose typing. Well, I’m from C background and my first official work was in a security team helping others to clean their codes and make it bullet proof. (esp. against exploits, virus, hackers, etc). So for me, I always use typing. I never wrote a “var i” in my C# code! Never! If you keep your type clean, you use it always, you wont waste any time! If you use var and later you want to figure out the right types, you will loose time for sure. Anyway, that’s me.
I love python and I use to write my servers / backend (ie. for game servers) in python. No typing is just another way of handling typing :slight_smile: you always has types, it is only hidden from your eyes.

Don’t forget, you write your code to human not for a computer! (or you should write it in pure machine code). So no matter if it is strong or week/loose typing, you have to write in a way it will be clear not only for you but for any other developers.
Back in some days, when I run a 30+ dev team, I had a rule: write code so, that the worst coder in our team can understand it. No fancy pency feature rich syntax, because it will lead to errors… it worked very well. If easier to read, easier to understand, quicker to change without creating bugs.

3 Likes

This is it, python does not need to be typed if written in this way. But like any writing implement, even a pen and paper can be used to make the most grammatically correct esoteric sentence that hardly any person can understand, or the most simple point imaginable with very few, clunky but simplistic literal words.

I have been writing python since before there was a standard typing module, nothing stopped me from naming variables something like orders_list or id_to_employee_name_dict, or checking object type equality with isinstance()

Also as far as anvil goes:

I like it dude!

Like @stefano.menci , I use it at my company solo.
I can create UI’s for people to use who only have the technical capacity of using a cell-phone browser, and expose to them the results of long processes of hard logic that comes from the live backend of the company ERP that they would never otherwise have the ability to access.

It is all multiple databases, old systems, SQL, and lots of on-the-fly ETL. Anvil uplink just works with it so I don’t have to constantly monitor everything.
It just works without users complaining, and that’s why I use it.

Oh also I can make something in 3 days that would have taken 3-6 months of work before it was ‘ready for prime-time’.

5 Likes

I have never used an external database with Anvil, but I think using uplink is not the right way. I think using a connection to the external database will manage exceptions, transactions, caching, etc. for you, while using uplink you would be in charge of all of that.

Another consideration about using an external database is the Users service: the Users service uses the Users table in the Anvil database, I think it is impossible to use another database for it. So, you either leave the Users table in Anvil and the rest on your own external database, or you redesign your own user management that uses the external database. (Or I am wrong, and it is possible)


I started my first reply by describing my use case and by saying “My first priority is my own productivity” because I know you are in a different place.

Still, since we are talking about Anvil/Python and you like C#/strong typing, I thought this digression would add some value to the discussion.

Just to pick an example, I have posted two custom components in this forum: DataGridJson and InputBox. I have done similar dynamic UIs in VBA, VB6, Python and other proprietary scripting languages, all with flexible typing. All did their job and some are still used after decades.

I also have done something similar in C#. Managing a json without schema as input and all those input components with slightly different behavior was a nightmare of generics and types and classes. The final result was a strongly typed component, very easy to use, covered by tests. But it took me 10 times longer to develop and it was impossible to understand unless you dug through all the classes.

Using Python I feel confident that if I (or the worst coder in the team) need a change in behavior next year, when I forgot how those components work, I can just open them, understand them, change one line of code and get the new behavior. (It has happened already many times.)

Using C# I was never able to get something old that I had forgotten, quickly understand what happens inside, and change its behavior without adding more and more classes or butchering the whole thing.

I’m not mentioning the DataGridJson or InputBox to show how a component should be done in Python. They are far from perfect. Very far! That’s the point: in Python you can be sloppy and get the job done.

I am mentioning them as a success story: it was fast and easy to create them, it will be easy to maintain them, they just work. No, they don’t have tests, because they are so simple that they don’t need tests. The same beast in C# would need tests, because it would be so complex that I wouldn’t trust it without tests.

1 Like

Just to add a few responses on things that I’m not sure others have addressed directly:

  1. I’ve been working on a hobby app since late 2018 and have not had any trouble with Anvil updates. They even still support Python 2. (I occasionally see others report temporary bugs affecting old apps, but they are addressed promptly when reported.) The closest thing to an issue I’ve had is that when new features are released or new third-party components appear, it can be a tough decision whether to overhaul parts of my code to use them going forward.
  2. Others have mentioned the new support for multiple branches and staging environments in the Beta IDE. Whether or not you use that (it’s nice but it’s still in beta), know that you can also go back and forth between a local git repository and the Anvil IDE fairly easily. In short, you can combine the full power of git version control with the benefits of the online Anvil editor. There are some finer points to making it work smoothly that you can read about elsewhere (in the docs, with more on the forum), but the basic idea is that you would “Clone” your production app within the Anvil IDE and then force-push code from the base git repository to that new Anvil-hosted app. That gives you a way to work in the Anvil IDE in a way that is isolated from your base production app, while retaining the ability to git merge in updates from the production code base.
1 Like

I had the same idea as you mentioned here with git cloning, now I know it is possible to do.
Thanks @hugetim !

1 Like

Here you could find more ideas: [Wiki] Best practices: Test-driven development with Anvil

@stefano.menci
your approaches and what you already mentioned with “being messy” improve when needed approach reminds me to old Xtream Programming mixed with some other principles

It is definitely not new concept and most of us doing it so.

ie. did you know that in an average software company (including big one like IBM, MS, Google, etc) over 90% of the new code will be deleted completely within 1 year! Yes, imagine tons of work devs doing that ending up in trash bin… still, this is a way to go. It is a very old stats, yet still valid. Nasa did huge effort to try to keep this under control using zero defect programming, (another methodology to good to be familiar with) and they did get around this problem somewhat, but it took another approach which is more suitable for a company, where the goal is clear before they start to make it real. Still, producing many prototype phases, which is almost the same time-effort wise as the 90% code waste…
Zero defect -in a very simplified way to say is: as early you can find a bug as cheaper it takes to fix.
Just think about it if you have a property set to a value which later find out it is not the right one to be used (i.e how many products a user can buy at the same time), fixing this limit has a huge difference based on when are you fixing it, at desing it costs like 10 cents 1 sec, (just write a bigger number) in coding it is not more then $1 and 10 sec , however when it is released it can reach $1000 and months, since need to do the whole cycle from catching the bug, identify the problem, redesign, recode, retest and release & deploy…

So get back to the main point here, being messy - or as I would say start with prototyping phase is normal for most cases. It is a way to go when you are a small team for sure. As you will hit some barrier you might think to redesign it or as we call it refactor it. This is a common way of software evolution, nothing bad about it.

It is a very common mistakes we programmer use to make is to either think too far and try to create an API or function or feature to make it easier to use / change later and adding unnecessary parameters, which might never be used in the hope it might will be needed. On the other side, sometimes we forget that we are not the only one to use this, so there might be a good reason to add a bit more common usage to it…

I think the best way to go is what you feel best at the time. Don’t get too complicate and make it as simple as you can. You can always make it complicated later :stuck_out_tongue:

So I can totally understand your point of “being messy” (although it has nothing to do with messy)

1 Like

Python and dynamic typed languages in general are good for banging out prototypes.

Sure lots of production code is written in python, and IDEs can infer types and give you autocomplete, in spite of the fact that it’s harder to do without strong typing by default.

It’s all trade offs of course. Using the right tool for the job.

That being said, IDEs are becoming so smart, lot’s of the differences and trade offs are being smoothed out.

Want stronger runtime guarantees? You’re gonna pay for it with static typing, though there’s a million and 1 different JSON to wrapper class products that exist for C# so that isn’t really a good argument for python for that particular case.

Want thread safe composition of blocks of code? You’re gonna want a pure functional programming language.

The nice cushy IDE / library support for languages like Haskell don’t exist, yet, so I won’t use them, except for toys.

Establishing market demand for a product is best done where you have low overhead cost.

Like a scouting mission done on a motorcycle. It’s fast, it’s dangerous, but damn it’s really fun.

How much comfort do you want though? Leather seats? Cruise control? It’s all subjective consumer preference, driven by what the individual person values and wants.

Once you establish there is gold in them there hills, you need to start taking less margin over time, and investing in more complicated infrastructure to efficiently cart the gold back to be processed.

1 Like

Actually that’s exactly the argument!

In Python I don’t need any wrappers, it just works.

  • How do I use json in python?

import json

  • How do I use json in C#?

It depends on who you ask and what class of what project you look at and when it was done and what is the alignment of the stars and blah blah blah.

Not really “one-- and preferably only one --obvious way to do it”.

You can add all the wrappers you want to C# so you make it as fun as Python. I will use Python :slight_smile:

I mean static typing is the default, but if you really want to give it up, you can use the dynamic keyword.

And just to be fair there is some stuff I really like about Python.

Like not forcing everything to be a class.

Sometimes I just want a collection of free floating function definitions ya know.

Why C#. Why.

1 Like

In the (almost) five years I’ve been working with Anvil (I’m a freelancer), I have clients with apps that

  • run at scale publicly to hundreds of thousands of users
  • run privately for a handful of users but are business critical
  • embedded into the physical product they produce and shipped with every unit
  • integrate with a host of existing systems

And all work beautifully (most of the time).

I’ve previously used all sorts of other Web frameworks over the years (I first coded on a zx81, so been doing this stuff a while too) and I won’t be going back to django/Ruby on rails/anything else any time soon.

Good luck!

3 Likes