First off, a definition: if you came here hoping for a lesson in functional programming, I apologise for my loose use of terminology - I'm not talking about those side effects.The side effects I am referring to are what I would term external side effects - which we are defining as those that effect systems outside of the Django ORM . . .
If you are using Django's
choices option on a model field, you have probably come across the situation where adding / updating a choice generates a new migration. If you are using choices liberally for things that are variable over time (e.g. "where did you hear about us?") this can generate a lot of unnecessary migrations.
Take . . .
Timing the switch from "minimum viable" to "maximum value".
J-Class yacht "Lionheart" - 'minimum viable' was never part of the brief
Before we started building YunoJuno I invited my two co-founders to join me at the London leg of Eric Ries' launch promotion for "The Lean Startup". They both went to the wrong venue, so never got to see Mr Ries, but that's their . . .
Incorporate NPS surveys into your project to have maximum insight
tl;dr Our latest project (django-nps) allows you to run continuous, rolling NPS surveys, and to segment NPS by any user attribute.
NPS (Net Promoter Score) is a well-known methodology for capturing user 'satisfaction' with your product. I won't go into the details here - there's a wealth of info elsewhere on the web - but . . .
tl;dr We’ve released django-package-monitor, a django app to make it easier to see which packages are out of date.
UPDATE: I messed up the setup.py dependencies in the original package, and the latest package depends on a source install of
semantic_version, so you will need to use the
--process-dependency-links option when installing dpm. See . . .
That moment when you realise your Universally Unique Identifier... isn't.
@stevejalim – YJ Tech Lead
We like UUIDs at YJ. One use of them we're particularly fond of is sticking specific yet meaning-free labels on objects, so we don't have to worry about exposing 'walkable' integer PKs or human-readable usernames or any of that awkward stuff.
As such, we've used our own UUIDField . . .
Solving the case of the missing objects
tl;dr Beware of race conditions when using async queues and accessing data which may not have been committed on the main process.
Whenever we have to update an external system (pushing out data to out CRM system, notifications to HipChat, sending emails, that sort of thing) we send the data asynchronously by queueing up a function with . . .